GUI füllen

  • Ein freundliches Hallo zusammen,

    mit AutoIT fange ich erst an und bin auch hier noch recht neu in der Runde.
    Ich kämpfe gerade mit dem Füllen einer GUI und komme nicht weiter.

    Die Idee:
    Und zwar möchte ich die Controls der GUI aus einer INI-Datei füllen.
    Die Key’s der INI-Datei sind dabei die Controls der GUI.

    Über die Funktion „IniReadSection“ lese ich dann den Block aus und über eine Schleife fülle ich die GUI.

    For $i = 1 To $var[0][0]
    GUICtrlSetData($var[$i][0],$var[$i][1])
    Next

    Das Dumme ist, es funktioniert nicht. Oder muß ich jedes einzelne Control zuordnen?
    Hat einer einen Tipp?

    Vielen Dank vorab.

    Gruß Schumi

    Einmal editiert, zuletzt von Schumi (28. April 2011 um 09:54)

  • Jedem Element in der GUI wird automatisch ein Control zugeordnet, welches es beim erstellen ausgibt.
    In meinem Programm habe ich es gelöst, indem ich einzelne Dateien gemacht habe, die jeweils ein Wort/Satz pro Zeile hatten und das dann über Filereadline eingelesen und als Text den eintzelnen Elementen in der GUI zugeordnet.
    Beispielsweise zwei Ausschnitte:
    Deutsch:

    Spoiler anzeigen

    Bearbeiten
    Neuer Eintrag
    Update
    Server updaten
    Einstellungen
    Sprache
    Optionen
    Über
    Informationen
    Hilfe
    Deutsch
    Englisch
    Lateinisch
    Suche
    Deutscher Name
    Englischer Name
    Lateinischer Name
    Klasse
    Ordnung
    Unterordnung
    Überfamilie


    Englisch:

    Spoiler anzeigen

    Edit
    New Entry
    Update
    Update Server
    Settings
    Language
    Options
    About
    Informations
    Help
    German
    English
    Latin
    Search
    German Name
    English Name
    Latin Name
    Class
    Order
    Suborder


    Französisch:

    Spoiler anzeigen

    S'Occuper
    Nouveau note
    Dernière Version
    Dernière Version le serveur
    Paramètre
    Langue
    Choix
    Au-dessus
    Information
    Aide
    Allemand
    Anglais
    Latin
    Recherches
    Nom allemand
    Nom anglais
    Nom latin
    Classe
    Ordre (~Classement)
    Sous-ordre
    Au-dessus-famille


    Eingelesen habe ich es mit einer Funktion, da man die Sprache auch bei laufendem Programm verändern konnte:

    Spoiler anzeigen
    [autoit]

    Func _SpracheUbernehmen()
    $TextBearbeiten = FileReadLine($AktuellerSprachpfad, 1)
    $TextNeuerEintrag = FileReadLine($AktuellerSprachpfad, 2)
    $TextUpdate = FileReadLine($AktuellerSprachpfad, 3)
    $TextServerUpdaten = FileReadLine($AktuellerSprachpfad, 4)
    $TextEinstellungen = FileReadLine($AktuellerSprachpfad, 5)
    $TextSprache = FileReadLine($AktuellerSprachpfad, 6)
    $TextOptionen = FileReadLine($AktuellerSprachpfad, 7)
    $TextUber = FileReadLine($AktuellerSprachpfad, 8)
    $TextInformationen = FileReadLine($AktuellerSprachpfad, 9)
    $TextHilfe = FileReadLine($AktuellerSprachpfad, 10)
    $TextDeutsch = FileReadLine($AktuellerSprachpfad, 11)
    $TextEnglisch = FileReadLine($AktuellerSprachpfad, 12)
    $TextLateinisch = FileReadLine($AktuellerSprachpfad, 13)
    $TextSuche = FileReadLine($AktuellerSprachpfad, 14)
    $TextDeutscherName = FileReadLine($AktuellerSprachpfad, 15)
    $TextEnlischerName = FileReadLine($AktuellerSprachpfad, 16)
    $TextLateinischerName = FileReadLine($AktuellerSprachpfad, 17)
    $TextKlasse = FileReadLine($AktuellerSprachpfad, 18)
    $TextOrdnung = FileReadLine($AktuellerSprachpfad, 19)
    $TextUnterordnung = FileReadLine($AktuellerSprachpfad, 20)
    $TextUberfamilie = FileReadLine($AktuellerSprachpfad, 21)
    $TextFamilie = FileReadLine($AktuellerSprachpfad, 22)
    $TextUnterfamilie = FileReadLine($AktuellerSprachpfad, 23)
    $TextGattung = FileReadLine($AktuellerSprachpfad, 24)
    $TextArt = FileReadLine($AktuellerSprachpfad, 25)
    $TextBeschreibung = FileReadLine($AktuellerSprachpfad, 26)
    $TextFressfeind = FileReadLine($AktuellerSprachpfad, 27)
    $TextNahrung = FileReadLine($AktuellerSprachpfad, 28)
    $TextWichtigerHinweis = FileReadLine($AktuellerSprachpfad, 29)
    $TextBildpfad = FileReadLine($AktuellerSprachpfad, 30)
    $TextKomma = FileReadLine($AktuellerSprachpfad, 31)
    $TextSpeichern = FileReadLine($AktuellerSprachpfad, 32)
    $TextEintragAndern = FileReadLine($AktuellerSprachpfad, 33)
    $TextVersion = FileReadLine($AktuellerSprachpfad, 34)
    $TextServerVersion = FileReadLine($AktuellerSprachpfad, 35)
    $TextProjektvon = FileReadLine($AktuellerSprachpfad, 36)
    $TextAchtung = FileReadLine($AktuellerSprachpfad, 37)
    $TextEintragausListe = FileReadLine($AktuellerSprachpfad, 38)
    $TextOK = FileReadLine($AktuellerSprachpfad, 39)
    $TextTeilklasse = FileReadLine($AktuellerSprachpfad, 40)
    $TextUnterklasse = FileReadLine($AktuellerSprachpfad, 41)
    $TextUberordnung = FileReadLine($AktuellerSprachpfad, 42)
    $TextWissenschaftlicherName = FileReadLine($AktuellerSprachpfad, 43)
    $TextUberstamm = FileReadLine($AktuellerSprachpfad, 44)
    $TextStamm = FileReadLine($AktuellerSprachpfad, 45)
    $TextUnterstamm = FileReadLine($AktuellerSprachpfad, 46)
    $TextReich = FileReadLine($AktuellerSprachpfad, 47)
    $TextUberabteilung = FileReadLine($AktuellerSprachpfad, 48)
    $TextAbteilung = FileReadLine($AktuellerSprachpfad, 49)
    $TextUnterabteilung = FileReadLine($AktuellerSprachpfad, 50)
    $TextKlassifikation = FileReadLine($AktuellerSprachpfad, 51)
    $TextDomane = FileReadLine($AktuellerSprachpfad, 52)
    $TextOhneRangI = FileReadLine($AktuellerSprachpfad, 53)
    $TextOhneRangII = FileReadLine($AktuellerSprachpfad, 54)
    $TextOhneRangIII = FileReadLine($AktuellerSprachpfad, 55)
    $TextReihe = FileReadLine($AktuellerSprachpfad, 56)
    $TextName = FileReadLine($AktuellerSprachpfad, 57)
    $TextFranzosisch = FileReadLine($AktuellerSprachpfad, 58)
    $TextWissenschaftlich = FileReadLine($AktuellerSprachpfad, 59)
    $TextMehr = FileReadLine($AktuellerSprachpfad, 60)
    $TextFachbegriffe = FileReadLine($AktuellerSprachpfad, 61)
    $TextSprachauswahl = FileReadLine($AktuellerSprachpfad, 62)
    $TextFranzosischerName = FileReadLine($AktuellerSprachpfad, 63)
    $TextSucheWahlen = FileReadLine($AktuellerSprachpfad, 64)
    $TextSpracheWahlen = FileReadLine($AktuellerSprachpfad, 65)
    $TextFehler = FileReadLine($AktuellerSprachpfad, 66)
    $TextFehlerNachrichtNE = FileReadLine($AktuellerSprachpfad, 67)
    $TextFehlerKeinListEintragGewahlt = FileReadLine($AktuellerSprachpfad, 68)
    $TextNichtgefunden = FileReadLine($AktuellerSprachpfad, 69)
    $TextInandererSprachesuchenhilft = FileReadLine($AktuellerSprachpfad, 70)
    $TextKeineBeschreibung = FileReadLine($AktuellerSprachpfad, 71)
    $TextNochnichtvorhanden = FileReadLine($AktuellerSprachpfad, 72)
    $TextWichtige = FileReadLine($AktuellerSprachpfad, 73)
    $TextMehrInformationen = FileReadLine($AktuellerSprachpfad, 74)
    $TextEintragSchonvorhanden = FileReadLine($AktuellerSprachpfad, 75)
    $TextDetSuche = FileReadLine($AktuellerSprachpfad, 76)
    $TextStatistik = FileReadLine($AktuellerSprachpfad, 77)
    $TextDeutscheEintrage = FileReadLine($AktuellerSprachpfad, 78)
    $TextEnglischeEintrage = FileReadLine($AktuellerSprachpfad, 79)
    $TextFranzEintrage = FileReadLine($AktuellerSprachpfad, 80)
    $TextEigen = FileReadLine($AktuellerSprachpfad, 81)
    $TextFremd = FileReadLine($AktuellerSprachpfad, 82)
    $TextInsgesamt = FileReadLine($AktuellerSprachpfad, 83)
    _GUIMAINerstellen()
    EndFunc ;==>_SpracheUbernehmen

    [/autoit]

    Die Texte in den GUIs waren dann immer die entsprechenden Variabeln, z.b. hier:

    Spoiler anzeigen
    [autoit]

    $MenuBearbeiten = GUICtrlCreateMenu($TextBearbeiten)
    $MenuNeuerEintrag = GUICtrlCreateMenuItem($TextNeuerEintrag, $MenuBearbeiten)
    $MenuEintragandern = GUICtrlCreateMenuItem($TextEintragAndern, $MenuBearbeiten)
    $MenuDetSuche = GUICtrlCreateMenuItem($TextDetSuche, $MenuBearbeiten)
    $MenuUpdateoben = GUICtrlCreateMenu($TextUpdate)
    $MenuUpdate = GUICtrlCreateMenuItem($TextUpdate, $MenuUpdateoben)
    $MenuServerupdatem = GUICtrlCreateMenuItem($TextServerUpdaten, $MenuUpdateoben)
    $MenuEinstellungen = GUICtrlCreateMenu($TextEinstellungen)

    [/autoit]

    oder hier:

    Spoiler anzeigen
    [autoit]

    $LabelDName = GUICtrlCreateLabel($TextDeutscherName, 16, 16, 105, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelEname = GUICtrlCreateLabel($TextEnlischerName, 16, 40, 107, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelLNameEA = GUICtrlCreateLabel($TextLateinischerName, 16, 64, 116, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelOrdnung = GUICtrlCreateLabel($TextOrdnung, 16, 232, 55, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelUnterordnung = GUICtrlCreateLabel($TextUnterordnung, 16, 256, 85, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $Labeluberfamilie = GUICtrlCreateLabel($TextUberfamilie, 16, 280, 73, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelFamilie = GUICtrlCreateLabel($TextFamilie, 16, 304, 48, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelUnterfamilie = GUICtrlCreateLabel($TextUnterfamilie, 16, 328, 75, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelGattung = GUICtrlCreateLabel($TextGattung, 16, 664, 50, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $LabelArt = GUICtrlCreateLabel($TextArt, 16, 688, 20, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

    [/autoit]

    Ich hoffe das hilft dir weiter und überfordert dich nicht, weil du ja ganz neu bist ^^
    Viel Erfolg weiterhin,
    Aquaplant

    PS: Das praktische an den Dateien ist, dass du einfach wenn dir was neues einfällt dies bequem ans Ende schreiben kannst. Du darfst nur nicht die Reihenfolge ändern, dass eine andere Übersetzung in Zeile 2 steht, als im Deutschen.

  • Hallo Aquaplant,

    herzlichen Dank für deine Antwort.
    Ein gutes Beispiel bzw. Konzept. So richtig trifft es meine Sache nicht.

    Ich möchte ja meine "Input"-Felder mit Werten versehen. Diese Werte kommen aus einer ini-Datei.
    Soweit sicher vergleichbar mit deiner Lösung.

    Ich möchte aber für die spätere Zuordnung die Controls auch auslesen (das sollen die Key's der ini-datei sein).
    Ich möchte mir dabei nur die Tipperei sparen. Und vorallem möchte ich mir beim Füllen keine Gedanken mehr machen müssen (an alle Felder gedacht? ).

    Vermutlich kann die "GUICtrlSetData"-Funktion den Control nicht aus dem String lesen... oder so..

    Gruß Schumi

  • Ich bin einfach mal davon ausgegangen, das in deinem kompletten Script mehr als 4 Inputs sind.
    Falls das stimmt, würde sich ein 2D Array für die ID's anbieten, denn dann kann man die Controls mit For-Schleifen erzeugen und spart sich beim beschriften Eval, wenn man in den Sektionen und Keys der Ini die Spalten und Reihen des Arrays angibt.

    Falls es bei den vieren bleibt, dann will ich nichts gesagt haben^^
    Lg

  • Im moment sind es schon 40 Controls. Einige kommen aber noch dazu.
    Aber Controls in einer For-Schleife erstellen?... und dann alle Eigenschaften wie Position, Register,Gruppe usw. vorgeben.
    Also -sorry- ich halte das für sehr umständlich. Wenn man eine Art Liste erstellen möchte - dann ok.

    Ich hätte mir eher gewünscht alle Controls über eine Funktion (liefert Array mit Controls) aus der GUI auszulesen.
    Und dann aus dem Array alles andere abwickeln.

    Oder bin ich jetzt auf dem falschen Weg?

    Gruß Schumi