Im Anhang hab ich mal eine Beispielgrafik gebastelt, um dir das einfachste Beispiel: Ziehen mit zurücklegen, zu erläutern.
*Edit*: In die Tiefe gehts natrlich $AnzahlZiehungen weit/oft.
Beiträge von Weisgarnix
-
-
Alles anzeigen
Hallo WeisGarNix,
du solltest vor allem ein kompilierbares Skript einstellen, denn folgende Fehler:
Code>Running AU3Check (1.54.19.0) from:C:\Programme\AutoIt3 C:\Programme\AutoIt3\Examples\Tests\cboWeisgarnix.au3(184,44) : ERROR: syntax error (illegal character) $Zusammenstellungen[$lw2][0] = $ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Examples\Tests\cboWeisgarnix.au3(185,44) : ERROR: syntax error (illegal character) $Zusammenstellungen[$lw2][1] = $ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Programme\AutoIt3\Examples\Tests\cboWeisgarnix.au3 - 2 error(s), 0 warning(s) !>20:11:10 AU3Check ended.rc:2 >Exit code: 0 Time: 4.905werden gemeldet. Ausserdem solltest du auch die komplette INI und die anderen benötigten Dateien mit einstellen, dann hilft ja vielleicht jemand.
Bis dahin ein kleines Beispiel-Programm mit ähnlichem Lösungsansatz:
Spoiler anzeigen
[autoit]#include
[/autoit] [autoit][/autoit] [autoit]
#include
#include
#include
#include
#IncludeConst $sCSV = @ScriptDir & "\cboKFZ.TXT"
[/autoit] [autoit][/autoit] [autoit]
Const $sElect = "bitte auswählen"
Dim $aKFZ, $aSplit, $scboChr = ""
_FileReadToArray($sCSV, $aKFZ)
_ArraySort($aKFZ)
For $i = 1 To UBound($aKFZ) - 1
ConsoleWrite($i & $aKFZ[$i] & @CRLF)
$scboChr &= $aKFZ[$i]& "|"
Next
ConsoleWrite($scboChr & @CRLF)$hGui = GUICreate("Combobox aus TXT-Datei", 250, 85, 302, 218)
[/autoit] [autoit][/autoit] [autoit]
$idCboKFZ = GUICtrlCreateCombo($sElect, 8, 8, 200, 25)
GUICtrlSetTip(-1,"Automarke auswählen")
GUICtrlSetData(-1, $scboChr)
$idBtnINFO = GUICtrlCreateButton("&Info", 5, 40)
GUICtrlSetState(-1,$Gui_DISABLE)
GUICtrlSetTip(-1,"MsgBox zeigen")
$idBtnAll = GUICtrlCreateButton("&alle auslesen", 50, 40) ;read all
GUICtrlSetTip(-1,"Programm beenden")
$idBtnExit = GUICtrlCreateButton("Be&enden", 175, 40)
GUICtrlSetTip(-1,"Programm beenden")
GUISetState(@SW_SHOW)While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $idBtnExit
Exit
Case $idCboKFZ
if GUICtrlRead($idCboKFZ) = $sElect Then
GUICtrlSetState($idBtnINFO,$Gui_DISABLE)
Else
GUICtrlSetState($idBtnINFO,$Gui_ENABLE)
EndIf
Case $idBtnINFO
MsgBox(0,"Info",GUICtrlRead($idCboKFZ))
case $idBtnAll
$sKFZ = _GUICtrlComboBox_GetList($idCboKFZ)
MsgBox(0,"KFZ",$sKFZ)
EndSwitch
WEndmfg autoBert
Hi. Danke dir erstmal, ich werde versuchen, es zu verstehen.
Das mit den beiden $-Zeichen zu viel bitte ich zu entschuldigen, bei mir hab ichs schon rausgenommen, ich dachte, ich hätte das heir auch korrigiert, aber scheinbar fehlgedacht. -
Im Optimalfall erklärst du mir, wie ich anhand von welchen Zahlen darauf komme, welche Zahlen beim aktuellen "Knoten" stehen, und wie ich dann daraus zum nächsten Knoten komme

Sprich, du leistest die Denkarbeit und ich tippe es noch ab
Zum Beispiel, wie kann ich anhand von welchen Zahlen den aktuellen Titel (T1.4.12..54.63.4.5.3.4.6 was auch immer da für Punkte und Zahlen stehen :D) bekommen?
-
Ich habe gelesen, nach 3 Tagen darf man pushen.
*Push* -
Gehen tuts so schon auch, ist halt die Brut-Force-Variante mim Kopf durch die Wand, und vor allem: nicht dynamisch! d.h., wie sieht dein Code aus, wenn es 4 Ziehungen gibt? Der soll ja dementsprechend reagieren oder etwa nicht, ist das Feld nur zum Gut-Aussehen da?^^
PS: Mein Ansatz war jetzt eher, das alles erstmal in eine String-Variable zu speichern und dann am Ende das ganze abzuspeichern... Und ich würde den Ansatz von mir besser finden als sichnöffnende Editorfenster etc.

-
Ich frag jetzt einfach mal hier:
Wofür steht denn immer dieses
- 10 Zeichen -
? -
Wie gesagt, das komplizierte sind die Überlegungen, an welcher Stelle in deinem Beispielscirpt (xml) von oben das gewünschte aus welchen gegebenen werten generierst. im Prinzip sinds die einfachen kontrollstrukturen while und if, kompliziert ists, die passenden variablen für die while-schleifen zu benutzen und an korrekter Stelle zu erhöhen (/erniedrigen). Diese Überlegungen sind das schwere dran, ich habs noch nich ganz gepeilt, wie ich das lösen kann.
-
Hast du jemals überhaupt schonmal was programmiert?^^ Du fängst hier mit was verdammt kompliziertem an, dabei scheinst du nicht einmal zu wissen, was ein Array ist oO
Setze vor die beiden Arrays:
[autoit]Dim $AnzElement[9]
[/autoit]
Dim $NameElement[9], um die Größe zu initialisieren.
-
Soweit bin ich gestern noch gekommen, vielleicht kannst du damit ja schon mal was anfangen:
Spoiler anzeigen
[autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GenQuellcode
$temp=_Generate($AnzahlElementeGesamt, $AnzahlZiehungen, $AnzElement, $NameElement, $MitZuruecklegen)
ClipPut($temp)
Case $GenXml
$temp=_Generate($AnzahlElementeGesamt, $AnzahlZiehungen, $AnzElement, $NameElement, $MitZuruecklegen)
$datei = FileOpen("baum.xml", 9)
FileWrite($datei, $temp)
FileClose($datei)
EndSwitch
WEnd; Diese Funktion erhält als In-Parameter:
[/autoit] [autoit][/autoit] [autoit]
; $AnzEleGes : Integer
; $AnzZiehn : Integer
; $AnzEle : Array, das Inputs enthält, die Integer enthalten
; $NameEle : Array, das Inputs enthält, die Strings enthalten
; $Zuruek : Radiobutton
; Diese Funktion gibt zurück:
; $code : String
;
Func _Generate($AnzEleGes, $AnzZiehn, $AnzEle, $NameEle, $Zuruek)
$code = "<?xml version="&Chr(34)&"1.0"&Chr(34)&" encoding="&Chr(34)&"UTF-8"&Chr(34)&"?>"&@CRLF
$code &= "<bs:Brainstorm xmlns:bs="&Chr(34)&"http://schemas.microsoft.com/visio/2003/brainstorming"&Chr(34)&">"
$code &= @CRLF&@CRLF&@CRLF
; Anzahl der verschiedenen Elemente auslesen
$AnzVerschElemente=0
While (GUICtrlRead($AnzEle[$AnzVerschElemente]) <> "")
$AnzVerschElemente+=1
If ($AnzVerschElemente = 9) Then
ExitLoop
EndIf
WEnd ; Abgeschlossen.
$AktuellElement=0 ; Der aktuell betrachtete Eintrag
$AktuelleTiefe=0 ;Wie tief der Baum momentan ist / wie oft schon gezogen wurde.
$code &= _SchreibeLeerzeichen($AktuelleTiefe)&"<bs:topic bs:TopicID="&Chr(34)&"T1"&Chr(34)&">"&@CRLF
$AktuelleTiefe += 1
$code &= _SchreibeLeerzeichen($AktuelleTiefe)&"<bs:text>Hauptthema</bs:text>"&@CRLF
While ((($AktuelleTiefe <= $AnzZiehn) And ()) = False)
;
return $code
EndFuncFunc _SchreibeLeerzeichen($AnzLeerzeichen)
[/autoit]
$lw2=0
While ($lw2 <= $AnzLeerzeichen)
$leerzeichen &= " "
$lw2 = $lw2+1
WEnd
return $leerzeichen
EndFuncDas kann noch nix, also testen brauchst du es noch nicht, aber wenn du möchtest, kannst du dich ja beim generieren der Unterbäume versuchen.
Möglicherweise hilft dir Wikipedia, suche dort nach 2,4-Bäumen oder in google, deins wäre ein 1,X-Baum, wobei X zwischen 2 und 9 liegt und dein Buam außerdem für den Fall ohne Zurücklegen evtl nicht einmal ausgeglichen ist. Sowas hat man im Informatik-Studium (also 2,4-Bäume, ausgeglichen) im 2. Semester.
Heute und morgen hatte ich eigentlich was anderes geplant und am Wochenende is hier so n Traditionsfeschdl, da hab ich kene Zeit
Bis wann bräuchtest du das Geschenk für deinen Lehrer denn? -
Das Generieren des Quellcodes ist schwer, da brauch ich wenigstens länger für, wenn ichs überhaupt schaffe.
Deine Input-Felder musst du nachher auslesen, daher musst du ihnen eine Variable zuweisen, sosnt kannst du nie mehr darauf zugreifen.
Für das bessere Abarbeiten solltest du Arrays verwenden:Spoiler anzeigen
[autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Baumdiagramm Creator by Rawi Kumar V 1.0", 451, 492, 401, 225)
$GenQuellcode = GUICtrlCreateButton("Quellcode", 48, 416, 129, 49, $WS_GROUP)
$GenXml = GUICtrlCreateButton("XML Datei erstellen", 272, 416, 129, 49, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("Anzahl insgesamt:", 24, 24, 89, 17)
$AnzahlElementeGesamt = GUICtrlCreateInput("", 120, 24, 65, 21)
$Label6 = GUICtrlCreateLabel("Anzahl an Ziehungen:", 208, 24, 108, 17)
$AnzahlZiehungen = GUICtrlCreateInput("", 368, 24, 73, 21)
$Label2 = GUICtrlCreateLabel("1. Anzahl:", 24, 56, 51, 20)
$Label3 = GUICtrlCreateLabel("2. Anzahl:", 24, 88, 51, 17)
$Label9 = GUICtrlCreateLabel("3. Anzahl:", 24, 120, 51, 17)
$Label10 = GUICtrlCreateLabel("4. Anzahl:", 24, 152, 51, 17)
$Label11 = GUICtrlCreateLabel("5. Anzahl:", 24, 184, 51, 17)
$Label12 = GUICtrlCreateLabel("6. Anzahl:", 24, 216, 51, 17)
$Label13 = GUICtrlCreateLabel("7. Anzahl:", 24, 248, 51, 17)
$Label14 = GUICtrlCreateLabel("8. Anzahl:", 24, 280, 51, 17)
$Label15 = GUICtrlCreateLabel("9. Anzahl:", 24, 312, 51, 17)
$Label4 = GUICtrlCreateLabel("Name der 1. Anzahl:", 216, 56, 100, 17)
$Label5 = GUICtrlCreateLabel("Name der 2. Anzahl:", 216, 88, 100, 17)
$Label16 = GUICtrlCreateLabel("Name der 3. Anzahl:", 216, 120, 100, 17)
$Label17 = GUICtrlCreateLabel("Name der 4. Anzahl:", 216, 152, 100, 17)
$Label18 = GUICtrlCreateLabel("Name der 5. Anzahl:", 216, 184, 100, 17)
$Label19 = GUICtrlCreateLabel("Name der 6. Anzahl:", 216, 216, 100, 17)
$Label20 = GUICtrlCreateLabel("Name der 7. Anzahl:", 216, 248, 100, 17)
$Label21 = GUICtrlCreateLabel("Name der 8. Anzahl:", 216, 280, 100, 17)
$Label22 = GUICtrlCreateLabel("Name der 9. Anzahl:", 216, 312, 100, 17)
$Label7 = GUICtrlCreateLabel("Ziehen mit Zurücklegen:", 120, 352, 119, 17)
$Label8 = GUICtrlCreateLabel("Ziehen ohne Zurücklegen:", 120, 376, 130, 17)
$AnzElement[0] = GUICtrlCreateInput("", 120, 56, 65, 21)
$AnzElement[1] = GUICtrlCreateInput("", 120, 88, 65, 21)
$AnzElement[2] = GUICtrlCreateInput("", 120, 120, 65, 21)
$AnzElement[3] = GUICtrlCreateInput("", 120, 152, 65, 21)
$AnzElement[4] = GUICtrlCreateInput("", 120, 184, 65, 21)
$AnzElement[5] = GUICtrlCreateInput("", 120, 216, 65, 21)
$AnzElement[6] = GUICtrlCreateInput("", 120, 248, 65, 21)
$AnzElement[7] = GUICtrlCreateInput("", 120, 280, 65, 21)
$AnzElement[8] = GUICtrlCreateInput("", 120, 312, 65, 21)
$NameElement[0] = GUICtrlCreateInput("", 320, 56, 121, 21)
$NameElement[1] = GUICtrlCreateInput("", 320, 88, 121, 21)
$NameElement[2] = GUICtrlCreateInput("", 320, 120, 121, 21)
$NameElement[3] = GUICtrlCreateInput("", 320, 152, 121, 21)
$NameElement[4] = GUICtrlCreateInput("", 320, 184, 121, 21)
$NameElement[5] = GUICtrlCreateInput("", 320, 216, 121, 21)
$NameElement[6] = GUICtrlCreateInput("", 320, 248, 121, 21)
$NameElement[7] = GUICtrlCreateInput("", 320, 280, 121, 21)
$NameElement[8] = GUICtrlCreateInput("", 320, 312, 121, 21)
$MitZuruecklegen = GUICtrlCreateRadio("", 280, 352, 17, 17)
GUICtrlCreateRadio("", 280, 376, 17, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $GenQuellcode
;
Case $GenXml
;
EndSwitch
WEndWie gesagt, die Funktion zum erstellen des Quellcodes wird happig. Weiß echt noch nich ob ich das schaff.
PS: Du solltest keine Gesamtzahl angeben, sondern die lieber berechnen, das schließt nachher Fehler im Programm aus, wenn Gesamt 10 sein soll, aber die Summe der Teile nur 8 ist.
-
Im Prinzip hast du oben 3 Textboxen und davor jeweils ein Label, das dem Benutzer sagt, was in das Feld soll.
[autoit]
Dann erstells du dir noch einen Button, da gibts dann in grün links drin "OnClick". Da klickst du rein und achtest darauf, dass der Radiobutton auf "Notify" steht.
Dann klickst du auf Code erstellen.
Sieht dann z.B. so aus:#include <ButtonConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=C:\Programme\AutoIt3\Extras\koda\Forms\Aufgabe.kxf
$Form1 = GUICreate("AutoIt", 162, 122, 246, 235)
$Label1 = GUICtrlCreateLabel("Anzahl der Freikarten:", 8, 12, 107, 17)
$Input1 = GUICtrlCreateInput("", 120, 8, 33, 21)
$Label2 = GUICtrlCreateLabel("Anzahl der Mädchen:", 8, 36, 105, 17)
$Input2 = GUICtrlCreateInput("", 120, 32, 33, 21)
$Label3 = GUICtrlCreateLabel("Anzahl der Jungen:", 8, 60, 95, 17)
$Input3 = GUICtrlCreateInput("", 120, 56, 33, 21)
$Button1 = GUICtrlCreateButton("XML-Dateiinhalt generieren!", 8, 88, 145, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit][autoit][/autoit][autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $Button1
[/autoit]
EndSwitch
WEndNach dem Case $Button1, was das Kontrollelement ist, das auf einen Klick reagieren soll, rufst du die Funktion auf, die du unten noch ausformulieren musst.
Wie sieht denn das obige Beispiel als Bild aus? Wenn cih das richtig verstehe, ist der Baum nicht ausbalanciert, d.h., dass am Ende nicht eine 2er-Potenz an Blättern ganz rechts sind? also nicht jeder Knoten 2 Nachfolger hat? Im Obigen Beispielcode gibts 3 Freikarten, oder?Die Antwort auf die Fragen brauch ich noch, morgen kann ich mir das dannw eiter anschauen, aber vom prinzip her hier der statische Teil:
[autoit]Case $Button1
[/autoit][autoit][/autoit][autoit]
_Generate()
EndSwitch
WEndFunc _Generate()
[/autoit]
$content = "<?xml version="&Chr(34)&"1.0"&Chr(34)&" encoding="&Chr(34)&"UTF-8"&Chr(34)&"?>"&@CRLF
$content &= "<bs:Brainstorm xmlns:bs="&Chr(34)&"http://schemas.microsoft.com/visio/2003/brainstorming"&Chr(34)&">"
$content &= @CRLF&@CRLF&@CRLF
EndFunc
& verknüpft zwei Strings.
Chr(34) sind die Gänsefüßchen (")
$A &= ist eine Kurzschreibweise für $A = $A &
@CRLF ist ein Zeilenumbruch.
Anhand der Bezeichner für die T1.1.2.3.4 wie auch immer da die Benennung funktioniert, das erkenne ich an dem kleinen Beispiel da oben nicht so ganz, baust du dir die dynamisch zusammen. Genauso setzt du die Anzahl Karten und Anzahl Schüler um. denk dran, nicht statisch, sondern dynamisch über While-Schleifen. Sprich, du zählst z.b. für die Tiefe des Baumes die Freikarten runter. Dürfte allerdings recht kompliziert werden, allein für die Bezeichner dynamisch zu erstellen hab ich grad keinen guten Einfall. Vielleicht meldet sich noch ein Profi hier zu Wort
Noch ein Hinweis am Ende: Das ist die einfachste und unschönste Art, keine kommentare, und mit globalen Variablen gearbeitet, aber darauf sollte es beim ersten Versuch noch nicht ankommen, alles mit Funktionen, die per Parameter arbeiten und einen Wert zurückgeben, zu lösen. Generell muss ich sagen hast du dir echt das einfachste rausgesucht wa?^^ Mein erster Versuch war zwar auch sowas in der Art, aber ohne dabei Schleifen zu brauchen
-
Die hilft der Koda Form Designer

Wechsel ind ein AutoIt-Installationsverzeichnis, dort auf Extras, da gibts dann glaub ich den ordner namens Koda. Darin müsste die Datei FD.exe oder so was liegen. Die öffnest du mal
-
is übersichtlicher, wenn du schreibst
While ($i<100)
; mach irgendwas
Wend
als ohenKlammern, vor allem wenn die Ausdrücke komplizierter werden.
Ich würde aber auch nie auf die Idee kommen, While (1) für nen Dauerloop zu schreiben :D^^ -
Ist gebookmarkt, danke dir!

-
Ums ganz salop auf den Punkt zu bringen, ich weiß nicht, wie ich aus der Combobox rausbekomme, welche Checkboxen anzukreuzen sind.
-
Für Zufallselemente aus einem gegebenen, begrenzten Universum, soll heißen, du weißt, wie viele du aus wie vielen haben willst, wäre mein erster Ansatz immer ein Array.
Aber zu deinem Hinweis in deinem letzten Beitrag:
Erstens kannst du das Thema in deinem ersten Beitrag hier ganz oben selber umbenennen
Zweitens solltest du das nicht tun, sondern bei einem anderen Problem erneut suchen und gegebenenfalls ein neues Thema eröfnen, damit andere, die dasselbe Problem haben, dein Thema zu diesem Problem finden können. -
Möglicherweise hab ich da was gefunden, per UDF: _GUICtrlComboBox_GetCurSel()
Ich les da nur nicht raus, wie die Elemente der Combobox ihren index bekommen...
-
Hi. Ich bins wieder mit meinem altbekannten Programm, zu dem ich schon 2 oder 3 mal Hilfe gebraucht habe.
Diesmal hab ich ebenfalls keinen blassen Schimmer, wie ich das anstellen könnte bzw. steh voll aufm Schlauch
Es geht, wie oben im Titel ebschrieben, um die Stelle in der While 1-Schleife der GUI, die sich um die Combobox kümmert.
Hier der Quellcode:Spoiler anzeigen
[autoit]#RequireAdmin
[/autoit] [autoit][/autoit] [autoit]
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=icon.ico
;#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Res_Comment=AutoItstall
#AutoIt3Wrapper_Res_Description=Installationsmenü
#AutoIt3Wrapper_Res_Fileversion=0.0.0.1
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****AutoitSetOption("TrayIconHide" ,1)
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <array.au3>If(IniRead("settings.ini", "Einstellungen", "Hinweise", "ja")="ja") Then
[/autoit] [autoit][/autoit] [autoit]
MsgBox(48,"Wichtige Hinweise","1.) Sie sollten Hardwaretreiber vor der Software installieren! Die Hardwaretreiber finden Sie auf den Installationsmedien, die der Hardware beim Kauf beiliegen." & @CRLF & @CRLF & "2.) Sie sollten ihre Virenschutzsoftware während den automatische Installationen unbedingt deaktivieren! Es wird nur installiert und keine Anwendung gestartet. Überprüfen Sie gegebenenfalls nach Abschluss aller Installationen ihren Computer durch einen manuellen Suchvorgang nach Viren." & @CRLF & @CRLF & "3.) Es werden Administratorrechte benötigt, unter Windows Vista und neueren Windows-Betriebssystemen muss UAC (User Account Control) deaktiviert werden, dies kann nach diesem Hinweis über den Konfigurieren-Button rechts oben im Menü geschehen." & @CRLF & @CRLF & "4.) Während den automatischen Installationen sollten Sie nicht am Computer arbeiten!" & @CRLF & @CRLF & "5.) Nach Abschluss aller automatischen Installationen erfolgt ein automatischer Neustart.")
EndIfDim $onlineoffline
[/autoit] [autoit][/autoit] [autoit]
$ping = Ping("www.google.com")
If $ping > 0 then
$onlineoffline = "data\website_online.jpg"
Else
$onlineoffline = "data\website_offline.jpg"
EndIf
$Form2 = GUICreate("AutoItstall", 1024, 650, -1, -1)
$Pic15 = GUICtrlCreatePic("data\header.jpg", 0, 0, 174, 48)
;GUICtrlSetTip(-1, "Website im Browser öffnen")
GUICtrlSetCursor (-1, 0)
$Pic16 = GUICtrlCreatePic("data\background.jpg", 174, 0, 706, 48)
$Help = GUICtrlCreatePic("data\background_thin.jpg", 880, 0, 48, 48)
$About = GUICtrlCreatePic("data\about.jpg", 928, 0, 48, 48)
GUICtrlSetTip(-1, "Über dieses Programm")
GUICtrlSetCursor (-1, 4)
$Combo1 = GUICtrlCreateCombo("benutzerdefiniert", 648, 56, 369, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL,$CBS_DROPDOWNLIST))
$Label33 = GUICtrlCreateLabel("Fertige Zusammenstellung auswählen", 464, 61, 181, 17)
$Install_Markierte = GUICtrlCreateButton("Installiere markierte Software jetzt!", 8, 56, 193, 25)
$Settings = GUICtrlCreatePic("data\settings.jpg", 976, 0, 48, 48)
GUICtrlSetTip(-1, "Einstellungen")
GUICtrlSetCursor (-1, 0)
$PageControl1 = GUICtrlCreateTab(8, 88, 1012, 557)
GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")$AnzKategorien=IniRead("settings.ini","Einstellungen","Kategorien","1")
[/autoit] [autoit][/autoit] [autoit]
$AnzZusammenstellungen=IniRead("settings.ini","Einstellungen","Zusammenstellungen","1")
; An Stelle [n][1] im Array steht ein Name, an Stelle [n+1][1] steht der Pfad zur Konfigurationsdatei, für alle ungeraden n.
$Kategorien=IniReadSection("settings.ini","Kategorien")
; An Stelle [n][1] im Array steht ein Name, an Stelle [n+1][1] steht die Auswahl der Daten
$tempZusammenstellungen=IniReadSection("settings.ini","Zusammenstellungen")
; Legt die Kategorien als Reiter-Array an.
Dim $TabSheetKategorien[($AnzKategorien*2)-1]
; Legt die in jedem Reiter vorhandenen Elemente an...
Dim $AktuellBildBox[$AnzKategorien]
Dim $AktuellBild[$AnzKategorien]
Dim $Software[$AnzKategorien]
Dim $AktuellBeschreibungBox[$AnzKategorien]
Dim $AktuellBeschreibung[$AnzKategorien]
Dim $Beschreibung[$AnzKategorien]
Dim $Grafik[$AnzKategorien]
Dim $AktuellWebsite[$AnzKategorien]
Dim $AktuellSprache[$AnzKategorien]
Dim $AktuellInstall[$AnzKategorien]
Dim $AktuellFreeware[$AnzKategorien]
Dim $AktuellParameter[$AnzKategorien]
Dim $AnzElemente[$AnzKategorien]
Dim $AktuellWebsiteGrafik[$AnzKategorien]
Dim $AktuellInstallGrafik[$AnzKategorien]
;$IchbaumirmeinenStringfuerdieComboboxhaltselber
Dim $IbmmSfdCbhs
$IbmmSfdCbhs=""
;[X][0]=Name, [X][1]=Daten
Dim $Zusammenstellungen[$AnzZusammenstellungen][2];26 mögliche Elemente je Kategorie sollten reichen - passen ja eh nur 26 auf eine Seite...
[/autoit] [autoit][/autoit] [autoit]
Dim $Checkboxen[$AnzKategorien][26]
Dim $Icons[$AnzKategorien][26]
Dim $Titel[$AnzKategorien][26]
Dim $Hersteller[$AnzKategorien][26]
Dim $ElementeBeschreibung[$AnzKategorien][26]
Dim $ElementeBild[$AnzKategorien][26]
Dim $ElementeWebsite[$AnzKategorien][26]
Dim $ElementeSprache[$AnzKategorien][26]
Dim $ElementeFreeware[$AnzKategorien][26]
Dim $ElementeInstall[$AnzKategorien][26]
Dim $ElementeParameter[$AnzKategorien][26]$lw1=0
[/autoit] [autoit][/autoit] [autoit]
$lw2=0
While ($lw1 < ($AnzKategorien*2))
$TabSheetKategorien[$lw1] = GUICtrlCreateTabItem($Kategorien[$lw1+1][1])
$inifile=$Kategorien[$lw1+2][1]$Beschreibung[$lw2] = GUICtrlCreateEdit("", 16, 120, 489, 65, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
[/autoit] [autoit][/autoit] [autoit]
$file0 = FileOpen(IniRead($inifile,"Daten","Beschreibung","fehlt.txt"), 0)
GUICtrlSetData($Beschreibung[$lw2], FileRead($file0))
FileClose($file0)$Grafik[$lw2] = GuiCtrlCreatePic(IniRead($inifile, "Daten", "Grafik", ""), 512, 120, 64, 64)
[/autoit] [autoit][/autoit] [autoit]$Software[$lw2] = GUICtrlCreateGroup("Software", 16, 191, 561, 442)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellBildBox[$lw2] = GUICtrlCreateGroup("Logo/Bild", 592, 120, 337, 277)
[/autoit] [autoit][/autoit] [autoit]
$AktuellBild[$lw2] = GUICtrlCreatePic("", 600, 144, 320, 240)
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellBeschreibungBox[$lw2] = GUICtrlCreateGroup("Beschreibung", 592, 416, 417, 217)
[/autoit] [autoit][/autoit] [autoit]
$AktuellBeschreibung[$lw2] = GUICtrlCreateEdit("", 600, 433, 401, 193, BitOR($ES_AUTOVSCROLL,$ES_READONLY,$ES_WANTRETURN,$WS_VSCROLL))
GUICtrlCreateGroup("", -99, -99, 1, 1)$AktuellWebsiteGrafik[$lw2] = GUICtrlCreatePic($onlineoffline, 950, 130, 48, 48)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetTip(-1, "Website im Browser öffnen")
GUICtrlSetCursor (-1, 0)
GUICtrlSetState(-1, $GUI_HIDE)
$AktuellSprache[$lw2] = GUICtrlCreatePic("data\german.jpg", 950, 200, 48, 48)
GUICtrlSetTip(-1, "Sprache: deutsch")
GUICtrlSetState(-1, $GUI_HIDE)
$AktuellFreeware[$lw2] = GUICtrlCreatePic("data\freeware.jpg", 950, 270, 48, 48)
GUICtrlSetTip(-1, "Keine Freeware!")
GUICtrlSetCursor (-1, 4)
GUICtrlSetState(-1, $GUI_HIDE)
$AktuellInstallGrafik[$lw2] = GUICtrlCreatePic("data\install.jpg", 950, 340, 48, 48)
GUICtrlSetTip(-1, "Jetzt installieren!")
GUICtrlSetCursor (-1, 0)
GUICtrlSetState(-1, $GUI_HIDE);Eintragen der Elemente in die Softwareliste
[/autoit] [autoit][/autoit] [autoit]
$AnzElemente[$lw2] = IniRead($inifile, "Daten", "Elemente", 0)
$lw3=0
While ($lw3 < $AnzElemente[$lw2])
;...
$temp = Mod($lw3, 2)
If ($temp == 0) Then
;linke Spalte
$Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 24, Floor(223+40*($lw3/2)), 16, 16)
;GUICtrlSetState(-1, $GUI_HIDE)
$Icons[$lw2][$lw3] = GUICtrlCreateIcon(IniRead($inifile, "Element"&$lw3+1, "Icon", "data\setup.ico"), -1, 40, Floor(215+40*($lw3/2)), 32, 32)
$Hersteller[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Hersteller", "unbekannter Hersteller"), 80, Floor(215+40*($lw3/2)))
$Titel[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Name", "?")&" v"&IniRead($inifile, "Element"&$lw3+1, "Version", "1"), 80, Floor(231+40*($lw3/2)))
Else
;Rechte Spalte
$Checkboxen[$lw2][$lw3] = GUICtrlCreateCheckbox("", 296, 203+40*($lw3/2), 16, 16)
;GUICtrlSetState(-1, $GUI_HIDE)
$Icons[$lw2][$lw3] = GUICtrlCreateIcon(IniRead($inifile, "Element"&$lw3+1, "Icon", "data\setup.ico"), -1, 296, 195+40*($lw3/2), 32, 32)
$Hersteller[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Hersteller", "unbekannter Hersteller"), 352, 195+40*($lw3/2))
$Titel[$lw2][$lw3] = GUICtrlCreateLabel(IniRead($inifile, "Element"&$lw3+1, "Name", "?")&" v"&IniRead($inifile, "Element"&$lw3+1, "Version", "1"), 352, Floor(211+40*($lw3/2)))
EndIf
$file1 = FileOpen(IniRead($inifile, "Element"&$lw3+1, "Beschreibung", "fehlt.txt"), 0)
$ElementeBeschreibung[$lw2][$lw3] = FileRead($file1)
FileClose($file1)
$ElementeBild[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Grafik", "")
$ElementeWebsite[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "URL", "http://www.autoit.de")
$ElementeSprache[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Sprache", "en")
$ElementeFreeware[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Freeware", "ja")
$ElementeInstall[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Setupdatei", "data\dummy.exe")
$ElementeParameter[$lw2][$lw3] = IniRead($inifile, "Element"&$lw3+1, "Parameter", "")
;Laufvariable für die Elemente erhöhen
$lw3=$lw3+1
WEnd
;übriger Code für die einzelnen Kategorien
;Erhöhen der Laufvariablen, $lw1 zählt im Auslesearray, $lw2 zählt in den Zielarrays, beide zählen in den Kategorien hoch.
$lw1=$lw1+2
$lw2=$lw2+1
WEnd
GUICtrlCreateTabItem("");Combobox-Daten auslesen
[/autoit] [autoit][/autoit] [autoit]
$lw1=0 ;geht bis Anzahl Zusammenstellungen mal 2 (Siehe ini-Struktur)
$lw2=0 ;geht bis tatsächliche Anzahl Zusammenstellungen
; An Stelle [n][1] im Array steht ein Name, an Stelle [n+1][1] steht die Auswahl der Daten
while ($lw1 < ($AnzZusammenstellungen*2))
;String für die Combobox bauen
$IbmmSfdCbhs = $IbmmSfdCbhs & $tempZusammenstellungen[$lw1][1] & "|"
;Daten einlesen zur späteren bequemeren Verwendung...
$Zusammenstellungen[$lw2][0] = $$tempZusammenstellungen[$lw1][1]
$Zusammenstellungen[$lw2][1] = $$tempZusammenstellungen[$lw1+1][1]
$lw1=$lw1+2
$lw2=$lw2+1
WEnd
;Den letzten | entfernen...
$temp1 = StringLeft($IbmmSfdCbhs,StringLen($IbmmSfdCbhs))
GUICtrlSetData($Combo1, $temp1, "benutzerdefiniert")
GUISetState(@SW_SHOW)$iAktTab = 0
[/autoit] [autoit][/autoit] [autoit]
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Install_Markierte
_InstallNow()
Case $Combo1
Switch $Combo1
Case "benutzerdefiniert"
; nix machen
Case $Zusammenstellungen[0][0] To $Zusammenstellungen[$AnzZusammenstellungen-1][0]
; Haken (Checkboxen) setzen, aber wie?
EndSwitch
Case $PageControl1
$iAktTab = _GUICtrlTab_GetCurSel($PageControl1)
Case $Checkboxen[$iAktTab][0] To $Titel[$iAktTab][$AnzElemente[$iAktTab] - 1]
ConsoleWrite("Ksg-ID: " & $nMsg & @TAB)
if mod($nMsg - $Checkboxen[$iAktTab][0],4) Then
$iAktCheckBox = -1 ;es kann keine Checkbox sein
else
$iAktCheckBox = ($nMsg - $Checkboxen[$iAktTab][0]) /4
GUICtrlSetData($Combo1, "benutzerdefiniert")
EndIf
ConsoleWrite("Checkbox: " & $iAktCheckBox & @TAB)
if mod($nMsg - $Icons[$iAktTab][0],4) Then
$iAktIcon = -1 ;es kann kein Icon sein
else
$iAktIcon = ($nMsg - $Icons[$iAktTab][0]) /4
_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
_SelectOne($iAktTab, $iAktIcon)
EndIf
ConsoleWrite("Icon: " & $iAktIcon & @TAB)
if mod($nMsg - $Hersteller[$iAktTab][0],4) Then
$iAktHersteller = -1 ;es kann kein Hersteller sein
else
$iAktHersteller = ($nMsg - $Hersteller[$iAktTab][0]) /4
_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
_SelectOne($iAktTab, $iAktHersteller)
EndIf
ConsoleWrite("Hersteller: " & $iAktHersteller & @TAB)
if mod($nMsg - $Titel[$iAktTab][0],4) Then
$iAktTitel = -1 ;es kann kein Titel sein
else
$iAktTitel = ($nMsg - $Titel[$iAktTab][0]) /4
_UnMarkAll($iAktTab, $AnzElemente[$iAktTab])
_SelectOne($iAktTab, $iAktTitel)
EndIf
ConsoleWrite("Titel: " & $iAktTitel & @CRLF)
case $AktuellInstallGrafik[$iAktTab]
GUISetState(@SW_HIDE)
RunWait($AktuellInstall[$iAktTab]&" "&$AktuellParameter[$iAktTab])
GUISetState(@SW_SHOW)
case $AktuellWebsiteGrafik[$iAktTab]
ShellExecute($AktuellWebsite[$iAktTab])
case $AktuellFreeware[$iAktTab]
MsgBox(64,"Keine Freeware!","Die (dauerhafte) Benutzung dieser Software ist kostenpflichtig!"&@CRLF&"Sie können Ihre Registrierungsinformationen beim ersten Programmstart eingeben.")
EndSwitch
WEndFunc _UnMarkAll($cat, $anzelements)
[/autoit] [autoit][/autoit] [autoit]
$temp=0
While ($temp < $anzelements+1)
GUICtrlSetBkColor($Hersteller[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetBkColor($Titel[$cat][$temp], $GUI_BKCOLOR_TRANSPARENT)
$temp=$temp+1
WEnd
GUICtrlSetState($AktuellFreeware[$cat], $GUI_HIDE)
GUICtrlSetState($AktuellSprache[$cat], $GUI_HIDE)
EndFuncFunc _SelectOne($cat, $element)
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetBkColor($Hersteller[$cat][$element], 0x7A96DF)
GUICtrlSetBkColor($Titel[$cat][$element], 0x7A96DF)
GUICtrlSetData($AktuellBeschreibung[$cat], $ElementeBeschreibung[$cat][$element])
GUICtrlSetImage($AktuellBild[$cat], $ElementeBild[$cat][$element])
$AktuellInstall[$cat] = $ElementeInstall[$cat][$element]
$AktuellWebsite[$cat] = $ElementeWebsite[$cat][$element]
$AktuellParameter[$cat] = $ElementeParameter[$cat][$element]
If ($ElementeFreeware[$cat][$element] <> "ja") Then
GUICtrlSetState($AktuellFreeware[$cat], $GUI_SHOW)
EndIf
If (StringCompare($ElementeSprache[$cat][$element], "de")=0) Then
GUICtrlSetImage($AktuellSprache[$cat], "data\german.jpg")
GUICtrlSetState($AktuellSprache[$cat], $GUI_SHOW)
GUICtrlSetTip($AktuellSprache[$cat], "Sprache: deutsch")
EndIf
If (StringCompare($ElementeSprache[$cat][$element], "en")=0) Then
GUICtrlSetImage($AktuellSprache[$cat], "data\english.jpg")
GUICtrlSetState($AktuellSprache[$cat], $GUI_SHOW)
GUICtrlSetTip($AktuellSprache[$cat], "Sprache: englisch")
EndIf
GUICtrlSetState($AktuellInstallGrafik[$cat], $GUI_SHOW)
GUICtrlSetState($AktuellWebsiteGrafik[$cat], $GUI_SHOW)
EndFuncFunc _InstallNow()
[/autoit] [autoit][/autoit] [autoit]
; Schön aufbereiten in der Darstellung
$lw1=0 ; Laufvariable für Kategorien
$lw2=0 ; Laufvariable für Programme
While ($lw1 < $AnzKategorien)
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlRead($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
; Farbe ändern auf rot
GUICtrlSetData($Icons[$lw1][$lw2], "data\not_installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0xff0000)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0xff0000)
GUICtrlSetState($Checkboxen[$lw1][$lw2], $GUI_DISABLE)
Else;If (GUICtrlRead($Checkboxen[$lw1][$lw2]) = $GUI_UNCHECKED) Then
; ausgrauen
GUICtrlSetData($Icons[$lw1][$lw2], "data\not_install.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0xe2e2e2)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0xe2e2e2)
GUICtrlSetState($Checkboxen[$lw1][$lw2], $GUI_DISABLE)
EndIf
$lw2 = $lw2 + 1
WEnd
$lw1 = $lw1+1
$lw2 = 0
WEnd
; Nun wird installiert!
$lw1=0 ; Reinitialisierung Laufvariable für Kategorien
$lw2=0 ; Reinitialisierung Laufvariable für Programme
While ($lw1 < $AnzKategorien)
GUISwitch($Form2, $TabSheetKategorien[$lw1])
if ($lw1 <> 1) Then
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlRead($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
RunWait($ElementeInstall[$lw1][$lw2]&" "&$ElementeParameter[$lw1][$lw2])
; Farbe ändern auf grün
GUICtrlSetData($Icons[$lw1][$lw2], "data\installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0x00ff00)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0x00ff00)
EndIf
$lw2 = $lw2 + 1
WEnd
ElseIf ($lw1 = 1) Then
; nix machen, wird erst als letzte durchlaufen
EndIf
$lw1 = $lw1+1
$lw2 = 0
WEnd
; Nun wird die oben ausgelassene Kategorie nachgeholt.
$lw1 = 1
While ($lw2 < $AnzElemente[$lw1])
If (GUICtrlRead($Checkboxen[$lw1][$lw2]) = $GUI_CHECKED) Then
RunWait($ElementeInstall[$lw1][$lw2]&" "&$ElementeParameter[$lw1][$lw2])
; Farbe ändern auf grün
GUICtrlSetData($Icons[$lw1][$lw2], "data\installed.ico")
GUICtrlSetColor($Titel[$lw1][$lw2], 0x00ff00)
GUICtrlSetColor($Hersteller[$lw1][$lw2], 0x00ff00)
EndIf
$lw2 = $lw2 + 1
WEnd
GUISetState(@SW_HIDE, $Form2)#Region ### START Koda GUI section ### Form=
[/autoit]
$Form1 = GUICreate("Neustart", 186, 82, -1, -1)
$Form1Label1 = GUICtrlCreateLabel("Installationen abgeschlossen.", 8, 8, 143, 17)
$Form1Label2 = GUICtrlCreateLabel("Der Computer wird in", 8, 32, 102, 17)
$Form1Label3 = GUICtrlCreateLabel("25", 112, 32, 16, 17)
$Form1Label4 = GUICtrlCreateLabel("Sekunden", 128, 32, 53, 17)
$Form1Label5 = GUICtrlCreateLabel("heruntergefahren und neu gestartet!", 8, 56, 174, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
$countdown = 25
While ($countdown > 0)
sleep(999)
GUICtrlSetData($Form1Label3, $countdown&"")
$countdown = $countdown - 1
WEnd
GUISetState(@SW_HIDE, $Form1)
Shutdown(6)
;While 1
;$nMsg = GUIGetMsg()
;Switch $nMsg
; Case $GUI_EVENT_CLOSE
; Exit
;
;EndSwitch
;WEnd
EndFunc
So sehen die Daten der Ini-Datei aus:
;Elemente der Kategorie, mit ; voneinander getrennt. Kategorien mit | voneinander getrennt.
Zusammenstellung1Name=Alle Freeware
Zusammenstellung1Auswahl=1;2;3;4;5|3;6Meine erste Idee war mit StringSplit, was vermutlich auch gehen würde, wenn ich wüsste, welcher Eintrag in der Combobox ausgewählt ist und welcher Zahl das in meinem Array entspricht, das ja so aufgebaut ist: ;[X][0]=Name, [X][1]=Daten Vielleicht tuts mir irgend einer Suche, dass ich den Index rausbekomme, aber ich habe ja nicht mal den Namen, also was in der Combobox gerade ausgewählt ist

PS: Kleine Orientierungshilfe in dem langen Code:
Zeilen 1-95: Deklarationen etc.
Zeilen 95-195: Initialisierung der Variablen
Zeilen 195-255: While 1-Teil der GUI
Ab zeile 255: Hilfsroutinen -
Woah, schrecklich zu lesen für meine Augen, ich empfehle für alle Ausdrücke immer Klammern^^
-
jo, schau mal rein. Die Aktuelle Datei inkl. Pfad befidnet sich in der Variable %1, wird dir beim Blick in die Registry auch auffallen :D^^