So:
[autoit]
#include <GUIConstants.au3>
GUICreate('Test', 640, 480)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
If MsgBox(4, 'Test', 'Programm beenden?') = 6 Then Exit
EndSwitch
WEnd
So:
[autoit]
#include <GUIConstants.au3>
GUICreate('Test', 640, 480)
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
If MsgBox(4, 'Test', 'Programm beenden?') = 6 Then Exit
EndSwitch
WEnd
Die einzigen Checkboxen, die ich entdecken kann, sind diese hier:
[autoit]
GUICtrlCreateCheckbox($pr2, 10, 20 + $i * 20, 680, 20)
Diese Checkboxen sind 680 Pixel breit? Plus Position 10 also 690 Pixel in einem GUI-Fenster ($check) das nur 670 Pixel breit ist. Und Du wunderst Dich über Probleme?
Außerdem generierst Du sie in einer If-Abfrage ( If $Adv = 3 Then). Erreicht $Adv denn überhaupt den Wert 3? Schonmal überprüft?
Nächster Punkt (Funktion Ort2()):
Func Ort2() ;Wenn Einfach, alle Printer der Umgebung installieren. Sonst ---> Einzeln
If $Adv = 4 Then
$Adv = 0
$linkname = _FileListToArray("\\server\swroot\Group\Public\Printers\zh\" & $n & " Obergeschoss\" & $ort, '*.lnk', 1)
If Not IsArray($linkname) Then
MsgBox(16, "Error", "An diesem Ort sind keine Drucker vorhanden. -->" & $ort)
EndIf
For $i = 1 To $linkname[0]
$pr = StringInStr($linkname[$i], " ", 1)
$prLen = StringLen($linkname[$i])
$pr3 = $prLen - $pr
$pr2 = StringTrimRight($linkname[$i], $pr3)
$srv = StringInStr($linkname[$i], " ", 1, 1)
$srv2 = StringTrimLeft($linkname[$i], $srv + 3)
$srv3 = StringTrimRight($srv2, 4)
RunWait("rundll32 printui.dll,PrintUIEntry /in /n \\" & $srv3 & "\" & $pr2)
Next
$Msg = MsgBox(4, "Drucker", "Die Drucker im " & $msgn & "ten Stock " & $an & " " & $ort & " wurden eingerichtet. " & @CRLF & "Weitere Drucker einrichten?")
If $Msg = 6 Then ;JA
hide()
$Neustart = 1
Else ;NEIN
$Radio = 1
EndIf
Else
$Radio = 1
EndIf
EndFunc ;==>Ort2
Du hast zwar eine Fehlerabfrage drin (If Not IsArray($linkname) Then), aber Du überspringst nicht den möglicherweise fehlererzeugenden Teil:
[autoit]
For $i = 1 To $linkname[0]
Wenn $linkname gar kein Array ist, aufgrund fehlender *lnk-Dateien, dann wird es hier zu einem Error kommen.
Das Gleiche gilt für die Funktion Einzeln(). Dort fehlt die Fehlerabfrage komplett.
Und bevor ich so eine Menge verschachtelter MsgLoop-Schleifen schreiben würde, würde ich lieber den OnEvent-Mode benutzen. Aber das kann ich nicht weiter testen, aufgrund der speziellen Gegebenheiten.
GtaSpider : Gesucht habe ich auch im engl. Forum, aber zuviel gefunden/falschen Suchbegriff verwendet.
Vielen Dank! Du hast genau das Richtige gefunden, denke ich. Muss das noch ausgiebig testen.
Danke! Danke! Danke! Das erspart mir eine Menge Arbeit.
Edit: Hier noch ein Beispiel, wo wirklich nur die Tabelle zu sehen ist, eingebettet in ein AutoIt-GUI-Fenster.
#include <GUIConstants.au3>
$Form1 = GUICreate('Embedded Excel', 600, 600, -1, -1)
$Obj1 = ObjCreate('OWC10.Spreadsheet')
$Obj1_ctrl = GUICtrlCreateObj($Obj1,50, 50,500,500)
[/autoit] [autoit][/autoit] [autoit]With $Obj1
.AutoFit=0
.DisplayGridlines=-1
.DisplayHorizontalScrollBar=0
.DisplayTitleBar=0
.DisplayToolbar=0
.DisplayVerticalScrollBar=0
.EnableEvents=-1
.MoveAfterReturn=-1
.RightToLeft=0
.ViewableRange='1:28'
EndWith
With $Obj1
.range('A1').value = 'aaa'
.range('A2').value = '65'
.range('A3').value = '75'
.range('B1').value = 'bbb'
.range('C1').value = 'ccc'
.range('A19').value = 'SUM(A2:A18)'
.range('A20').formula = '=SUM(A2:A18)'
Endwith
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Das reicht mir nicht. Ich bräuchte die Tabelle als Eingabefeld und in einige Felder sollen auch Formeln.
Zum Thema Excel findet man ja eigentlich jede Menge. Auch UDFs usw., aber was ich suche ist eine Möglichkeit eine Excel-Tabelle in einem GUI-Fenster zu erstellen, also eingebettet sozusagen. So dass man nicht die Symbolleisten, Statusleiste usw. sieht, sondern nur die Tabelle. Kennt jemand eine Möglichkeit sowas zu machen? Oder geht das nicht?
Würde mir eine Menge Arbeit ersparen.
Wie Fast2 schon schrieb kann man mit ShellExecute auch die Bilder direkt aufrufen, dann wird das Standard-Bildanzeigeprogramm benutzt. So, wie Du es jetzt gemacht hast, war es aber von mir gemeint. Wenn das Script auf das Beenden des gestarteten Programms (hier: Photoshop) warten soll, dann kann man auch ShellExecuteWait benutzen. Das kann ganz hilfreich sein, wenn man das Bild mit Photoshop ändert und man dann im Script das geänderte Bild weiterverwenden will.
Das mit dem View-Fenster kannst Du auch so schreiben, dass Du ein zusätzliches GUI-Fenster erstellst und wenn ein Bild angezeigt werden soll, dann mit GUISetState($GUI_SHOW, $show) das Fenster und das Bild mit GUICtrlSetImage anzeigen lassen. Bei den OnEvent-Funktionen dann nur das Fenster wieder verstecken mit GUISetState($GUI_HIDE, $show). Für das anzeigen lassen mit Photoshop vielleicht noch der Hinweis auf ShellExecute. Schau Dir dazu mal die Hilfe-Datei an.
Eine Lösung für das Problem mit dem Scrollbereich ist mir auch noch nicht eingefallen. Dazu habe ich mich mit den Funktionen noch zu wenig beschäftigt. Ich schreibe zur Zeit auch gerade an einem dringenden Projekt, so dass ich auch nicht all zu viel Zeit habe.
Du generierst eine menge Fenster (für jedes GIF eins?). Naja, egal. Jedenfalls musst Du, wenn das Bild nicht zusammen mit dem jeweiligen Fenster generiert wird, vorher zu dem Fenster wechseln, mit GUISwitch(winhandle). Woher soll AutoIt sonst wissen in welchem GUI-Fenster es das Bild erstellen soll?
Bei Deinen Bilder ist mir noch aufgefallen, dass Du als Parameter 0,0,0,0 angibst für Left,Top, Width,Height. Wozu soll das denn gut sein?
Fehler schon gefunden.
Zeile 96:
[autoit]
$label[$i] = GUICtrlCreateLabel($ar_pics[$i] & " | " & $pic_date[$i] & " | " & $pic_size[$i] & "M", ($l_space) + ($var_x * ($pic_size_x + 30)), (40 + $pic_size_y) + ($var_y * ($pic_size_y + 40)), $pic_size_x, $pic_size_y)
ändern in:
[autoit]
$label[$i] = GUICtrlCreateLabel($ar_pics[$i] & " | " & $pic_date[$i] & " | " & $pic_size[$i] & "M", ($l_space) + ($var_x * ($pic_size_x + 30)), (40 + $pic_size_y) + ($var_y * ($pic_size_y + 40)), $pic_size_x, 20)
Die Label sind viel zu groß und überdecken die Bilder. Das führt dazu, dass man sie nicht mehr anklicken kann.
Die Zeilen 79...81:
[autoit]
$1 = ($gui_width + 40) / ($pic_size_x + 15 + 15);40/2 = 20 ist min.abstand zum linken/rechten Rand
$1 = StringSplit($1, ".");Wie oft passen die Bilder horizontal ins Fenster? Ergebnis wird beim , (.) zerteilt...
$pic_xn = $1[1];...und nur die Zahl vorm , (.) wird verwendet
kannst Du kürzen, in:
[autoit]
$pic_xn = Int(($gui_width + 40) / ($pic_size_x + 15 + 15));40/2 = 20 ist min.abstand zum linken/rechten Rand
;$1 = StringSplit($1, ".");Wie oft passen die Bilder horizontal ins Fenster? Ergebnis wird beim , (.) zerteilt... *** Zeile löschen ***
;$pic_xn = $1[1];...und nur die Zahl vorm , (.) wird verwendet *** Zeile löschen ***
Zeig doch mal Dein Script. Dann kann ich bei der Fehlersuche mithelfen.
Das klappt auch:
[autoit]
Func funktion()
For $i = 0 To 1000
If @GUI_CTRLID = $pic[$i] Then
; hier die Befehle, die beim Klick auf das Bild ausgeführt werden sollen
EndIf
Next
EndFunc
Naja, eigentlich soll man ja mit CHECKED und UNCHECKED arbeiten. Außerdem sind das doch sowieso nur 2 Radiobuttons. Es kann immer nur einer ausgewählt sein. Man kann das Ganze also auf einen Eintrag reduzieren:
; by Benjamin C. und Ritzelrocker04 ==> RDv2017.au3
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit];$var = IniRead("C:\Temp\myfile.ini", "section2", "key", "NotFound") ; Beispiel aus Hilfe
[/autoit] [autoit][/autoit] [autoit]$var1 = IniRead(@ScriptDir & "\RD.ini", "Settings", "sichern", "0")
;GUICtrlSetState($rb_SichernUaus, $var1)
$GUI = GUICreate("Running Disk v 2.0.17", 315, 150, -1, 180, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
$gb_All = GUICtrlCreateGroup("", 8, 1, 300, 112)
$avi = GUICtrlCreateAvi("RDsys\RD.avi", -1, 24, 10, 100, 100, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
$gb_EigeneDateien = GUICtrlCreateGroup("Eigene Dateien", 144, 13, 145, 90)
$bn_Close = GUICtrlCreateButton("&Beenden", 229, 120, 75, 25, 0)
$bn_OK = GUICtrlCreateButton("&OK", 149, 120, 75, 25, 0)
GUICtrlSetState(-1,$GUI_DEFBUTTON)
$rb_Sichern = GUICtrlCreateRadio("&sichern", 150, 40, 113, 17)
;GUICtrlSetState($rb_Sichern, $GUI_CHECKED)
$rb_SichernUaus = GUICtrlCreateRadio("&nach sichern den PC ausschalten", 150, 65, 113, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1) ; ==> BitOR($BS_AUTORADIOBUTTON,
Switch $var1
Case 0
GUICtrlSetState($rb_Sichern, $GUI_CHECKED)
Case 1
GUICtrlSetState($rb_SichernUaus, $GUI_CHECKED)
EndSwitch
;$GUI_UNCHECKED Markierung in Radio oder Checkbox wird entfernt
;$GUI_CHECKED Radio oder Checkbox wird markiert
GUISetState(@SW_SHOW)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
If $nMsg <> 0 Then
$Sichern = GUICtrlRead($rb_Sichern)
Select
Case $nMsg = $GUI_EVENT_CLOSE Or $nMsg = $bn_Close
Exit
Case $nMsg = $bn_OK
If FileExists("E:\$Backup$\$EigeneDateien$\EigeneDateien-0" & @WDAY & ".zip ") Then
$ExistsFileWahl = MsgBox(32+4, "Löschen", 'Möchten Sie die bereits existierende Datei "EigeneDateien-0' & @WDAY & '.zip" löschen ? ')
If $ExistsFileWahl = 6 Then
FileDelete("E:\$Backup$\$EigeneDateien$\EigeneDateien-0" & @WDAY & ".zip ")
EndIf
EndIf
If $Sichern = 1 Then
$_Userwahlsich = MsgBox(32+4, " Sichern", "Möchten Sie nach der Sicherung weiterarbeiten ? ")
If $_Userwahlsich = 7 Then
MsgBox(48, " Sichern", " ...es wurden keine Daten gesichert ! ")
Exit
EndIf
$Methode = "Sichern"
Switch GUICtrlRead($rb_Sichern)
Case $GUI_CHECKED
IniWrite(@ScriptDir & "\RD.ini", "Settings", "sichern", "0")
Case $GUI_UNCHECKED
IniWrite(@ScriptDir & "\RD.ini", "Settings", "sichern", "1")
EndSwitch
_SichernFunc1()
MsgBox(64, " Sichern", " Sicherung abgeschlossen ! ")
Exit
Else
$_Userwahlout = MsgBox(32+4, " Sichern & Ausschalten", "Möchten Sie nach der Sicherung den PC automatisch ausschalten ? ")
If $_Userwahlout = 7 Then
MsgBox(48, " Sichern & Ausschalten", " ...es wurden keine Daten gesichert ! ")
Exit
EndIf
$Methode = "Sichern & Ausschalten"
Switch GUICtrlRead($rb_Sichern)
Case $GUI_CHECKED
IniWrite(@ScriptDir & "\RD.ini", "Settings", "sichern", "0")
Case $GUI_UNCHECKED
IniWrite(@ScriptDir & "\RD.ini", "Settings", "sichern", "1")
EndSwitch
_SichernFunc1()
;Shutdown(9)
EndIf
ExitLoop
EndSelect
EndIf
WEnd
Func _SichernFunc1()
;RunWait(@ComSpec & ' /c ' & "RDsys\7za.exe a -tzip " & "E:\$Backup$\$EigeneDateien$\EigeneDateien-0" & @WDAY & ".zip " & '"C:\Dokumente und Einstellungen\XP-Home\Eigene Dateien"',@ScriptDir ,@SW_MINIMIZE)
$logfile = FileOpen("RD.log", 1)
If $logfile = -1 Then
MsgBox(0, "Error", " Die Datei RD.log konnte nicht geöffnet werden.", 3)
Exit
EndIf
FileWriteLine($logfile, "Letzte Sicherung (" & $Methode & ") der Eigenen Dateien am : " & @YEAR & "-" & @MON & "-" & @MDAY & " um " & @HOUR & ":" & @MIN & ":" & @SEC & " Uhr")
FileClose($logfile)
;SoundSetWaveVolume(50)
;SoundPlay("RDsys\Success.wav", 1)
EndFunc
Die Antwort auf Deine 2. Frage: Ja!
Man kann durchaus beide Modi in einer Datei benutzen, nur nicht für ein und dieselbe GUI.
Bei sehr vielen Abfragen (GUI-Elementen) benutze ich sowieso immer den OnEventMode. Da kann man gleich die Funktion angeben und dank @GUI_CTRLID weiss man auch, welches Element angeklickt wurde.
Das ist mir auch schon aufgefallen, dass AutoIt nicht automatisch das ScriptDir verwendet, wenn man einen relativen Pfad angibt.
Ändere mal folgende Zeile in:
GUICtrlCreateIcon(@ScriptDir & "\Icons\au3.ico",0,0,0,50,50)
Versuch's mal so:
[autoit]
#include <GUIConstants.au3>
Opt('GUIOnEventMode', 1)
Dim $btn[3]
$GUI = GUICreate("Test", 640, 480, -1, -1)
GUISetOnEvent($GUI_EVENT_CLOSE, "beenden")
$btn[0]=GUICtrlCreateButton("Button0", 10, 10, 60, 22) ;Irgendein Button
GUICtrlSetOnEvent(-1, "funktion")
$btn[1]=GUICtrlCreateButton("Button1", 80, 10, 60, 22) ;Irgendein Button
GUICtrlSetOnEvent(-1, "funktion")
$btn[2]=GUICtrlCreateButton("Button2", 150, 10, 60, 22) ;Irgendein Button
GUICtrlSetOnEvent(-1, "funktion")
GUISetState()
While 1
Sleep(20)
WEnd
Func funktion()
Switch @GUI_CTRLID
Case $btn[0]
MsgBox(0,"","Es wurde auf Button Nummer 0 geklickt")
Case $btn[1]
MsgBox(0,"","Es wurde auf Button Nummer 1 geklickt")
Case $btn[2]
MsgBox(0,"","Es wurde auf Button Nummer 2 geklickt")
EndSwitch
EndFunc
Func beenden()
Exit
EndFunc
Wobei ich dazu sagen muss, dass meine Update-Funktion nur positive (+ x Stunden) Zeitunterschiede richtig anzeigt. Bei negativen Unterschieden muss die Funktion entsprechend angepasst werden.
Wenn Du die neue AutoIt-Version benutzt: Dort gibt es auch neue UDFs.
Unter anderem diese:
[autoit]
#include <GuiSlider.au3>
_GUICtrlSlider_SetTicFreq($Slider1, 3)
Der Parameter (hier: 3) bestimmt den Abstand der Striche.
Alina: Du hast DDR1-RAM in Deinem Rechner. Dementsprechend muss auch der neue Speicher DDR1-RAM sein. Geschwindigkeitsmäßig würde ich PC-400 (auch PC-3200 genannt) empfehlen. Die CL-Werte sind relativ egal. Die Unterschiede zwischen CL2, CL2.5 und CL3.0 sind nicht so gravierend. Du solltest aber ein sogenanntes KIT kaufen, also 2 in einer Verpackung, nicht zwei einzelne. Damit gibt es weniger Probleme und (falls Dein Mainboard das unterstützt) Du kannst den DualChannel-Mode benutzen.
Ändere bei meinem Script mal den Aufruf xDateUpdate in _DateUpdate und beobachte die Anzeige eine Weile, dann flackert die Anzeige gelegentlich. Mit xDateUpdate flackert es sehr viel seltener.
Das mit dem Tab-Element habe ich übrigens auch getestet und dort verhält es sich genauso.
Hallo Fabian!
Willkommen hier im Forum!
Vielleicht möchtest Du uns ja mal eines Deiner Scripte vorstellen. Kritik und / oder Lob sind Dir sicher.
Und ich glaube nicht, dass Dich hier jemand nach Deinem Alter beurteilt, eher nach Deinem Verhalten.