Eine GUI mit Funktionen belegen?

  • Hallo Leute,

    ich habe letztens noch herausgefunden, dass man ein script schreiben kann, dass dann als XML Datei ein Baumdiagramm in Microsoft Visio automatisch erstellt. Siehe hier: [ gelöst ] Baumdiagramm erstellen?

    Mein bisheriges Script:

    Spoiler anzeigen
    [autoit]

    <?xml version="1.0" encoding="UTF-8"?>
    <bs:Brainstorm xmlns:bs="http://schemas.microsoft.com/visio/2003/brainstorming">

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    <bs:topic bs:TopicID="T1">
    <bs:text>Hauptthema</bs:text>
    <bs:topic bs:TopicID="T1.1">
    <bs:text>13/25 Mädchen</bs:text>
    <bs:topic bs:TopicID="T1.1.1">
    <bs:text>12/24 Jungen</bs:text>
    </bs:topic>
    <bs:topic bs:TopicID="T1.1.2">
    <bs:text>12/24 Mädchen</bs:text>
    </bs:topic>
    </bs:topic>

    <bs:topic bs:TopicID="T1.2">
    <bs:text>12/25 Jungen</bs:text>
    <bs:topic bs:TopicID="T1.2.1">
    <bs:text>11/24 Jungen</bs:text>
    </bs:topic>
    <bs:topic bs:TopicID="T1.2.2">
    <bs:text>13/24 Mädchen</bs:text>
    <bs:topic bs:TopicID="T1.2.2.1">
    <bs:text>12/23 Mädchen</bs:text>
    </bs:topic>
    </bs:topic>
    </bs:topic>
    </bs:topic>


    </bs:Brainstorm>

    [/autoit]

    Nun zu meiner Frage, kann man eine Art Fenster machen, heißt GUI glaub ich.
    Das erstellte Fenster sollte dann eine Art script selber schreiben und dann entweder das geschriebene Script zeigen, sodass man es nur noch im Editor oder wo auch immer einfügt und zur XML Datei macht. Oder das Fenster sollte schon von selber eine XML Datei erstellen.

    Nun zu den Funktionen des Fensters:
    Man sollte Angeben können ( jetzt mal zum Beispiel von dem Link was ich oben gepostet habe):
    Man sollte Angeben können, wie viele Freikarten es gibt ( Beim Beispiel zB. 5), wie viele Personen es insgesammt sind (25) und halt das es 12 Jungen und 13 Mädchen sind.
    Dann sollte man noch angeben können, wie viele Freikarten die Jungen und wieviele Freikarten die Mädchen bekommen.
    Und halt das nach jeder Freikarte die Anzahl der Insgesamt Personen um -1 sinkt.

    Meine bisherige GUI sieht so aus (Ist aber komplett noch ohne Funktionen):

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #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)
    $AnzElement0 = GUICtrlCreateInput("", 120, 56, 65, 21)
    $AnzElement1 = GUICtrlCreateInput("", 120, 88, 65, 21)
    $AnzElement2 = GUICtrlCreateInput("", 120, 120, 65, 21)
    $AnzElement3 = GUICtrlCreateInput("", 120, 152, 65, 21)
    $AnzElement4 = GUICtrlCreateInput("", 120, 184, 65, 21)
    $AnzElement5 = GUICtrlCreateInput("", 120, 216, 65, 21)
    $AnzElement6 = GUICtrlCreateInput("", 120, 248, 65, 21)
    $AnzElement7 = GUICtrlCreateInput("", 120, 280, 65, 21)
    $AnzElement8 = GUICtrlCreateInput("", 120, 312, 65, 21)
    $NameElement0 = GUICtrlCreateInput("", 320, 56, 121, 21)
    $NameElement1 = GUICtrlCreateInput("", 320, 88, 121, 21)
    $NameElement2 = GUICtrlCreateInput("", 320, 120, 121, 21)
    $NameElement3 = GUICtrlCreateInput("", 320, 152, 121, 21)
    $NameElement4 = GUICtrlCreateInput("", 320, 184, 121, 21)
    $NameElement5 = GUICtrlCreateInput("", 320, 216, 121, 21)
    $NameElement6 = GUICtrlCreateInput("", 320, 248, 121, 21)
    $NameElement7 = GUICtrlCreateInput("", 320, 280, 121, 21)
    $NameElement8 = GUICtrlCreateInput("", 320, 312, 121, 21)
    $MitZuruecklegen = GUICtrlCreateRadio("", 280, 352, 17, 17)
    GUICtrlCreateRadio("", 280, 376, 17, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GenQuellcode
    ;
    Case $GenXml
    ;
    EndSwitch
    WEnd

    [/autoit]

    Wer sich mit erstellen solcher GUI Fenster auskennt soll mir bitte schreiben. Dann könnte ich das eventuell genauer beschreiben.
    Ich hoffe ihr konntet es einigermaßen gut verstehen.


    Wozu ich so ein Programm brauche beantworte ich jetzt auch schonmal^^:
    Also ich bin ein Schüler, 16 Jahre alt und in der 10. Klasse.
    Wir haben zur Zeit das Thema Wahrscheinlichkeiten in Mathe.
    Das Schuljahr ist eigentlich beendet und ich habe auch bereits meine 1 im Zeugnis stehen, aber weil ich nach diesem Schuljahr abgehe will ich meine Lehrerin noch eine Freunde machen mit diesen Script ^^
    Sodass sie ein Programm hat, dass die Baumdiagramme automatisch erstellt^^

    Lg

    Einmal editiert, zuletzt von RealMadrid08rk (26. Mai 2011 um 21:19)

  • 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 ;)

  • 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 ;)

    Okay habs, aber ich weiß nicht wie ich dann das fertige GUI mit funktionen belegen soll =/

    Einmal editiert, zuletzt von RealMadrid08rk (25. Mai 2011 um 23:10)

  • Im Prinzip hast du oben 3 Textboxen und davor jeweils ein Label, das dem Benutzer sagt, was in das Feld soll.
    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:

    [autoit]

    #include <ButtonConstants.au3>
    #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 ###

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $Button1
    EndSwitch
    WEnd

    [/autoit]

    Nach 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
    _Generate()
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func _Generate()
    $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

    [/autoit]


    & 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 :D
    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 ^^

    4 Mal editiert, zuletzt von Weisgarnix (25. Mai 2011 um 23:48)

  • Also ich hab jetzt schon einen GUI fertig, musst jetzt nur noch alles mit Funktionen belegen:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #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)
    $Button1 = GUICtrlCreateButton("XML Datei erstellen", 272, 416, 129, 49, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Quellcode", 48, 416, 129, 49, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Anzahl insgesamt:", 24, 24, 89, 17)
    GUICtrlCreateInput("", 120, 24, 65, 21)
    $Label2 = GUICtrlCreateLabel("1. Anzahl:", 24, 56, 51, 20)
    $Label3 = GUICtrlCreateLabel("2. Anzahl:", 24, 88, 51, 17)
    GUICtrlCreateInput("", 120, 56, 65, 21)
    GUICtrlCreateInput("", 120, 88, 65, 21)
    $Label4 = GUICtrlCreateLabel("Name der 1. Anzahl:", 216, 56, 100, 17)
    $Label5 = GUICtrlCreateLabel("Name der 2. Anzahl:", 216, 88, 100, 17)
    GUICtrlCreateInput("", 320, 56, 121, 21)
    GUICtrlCreateInput("", 320, 88, 121, 21)
    $Label6 = GUICtrlCreateLabel("Anzahl an Ziehungen:", 208, 24, 108, 17)
    GUICtrlCreateInput("", 368, 24, 73, 21)
    GUICtrlCreateRadio("", 280, 376, 17, 17)
    GUICtrlCreateRadio("", 280, 352, 17, 17)
    $Label7 = GUICtrlCreateLabel("Ziehen mit Zurücklegen:", 120, 352, 119, 17)
    $Label8 = GUICtrlCreateLabel("Ziehen ohne Zurücklegen:", 120, 376, 130, 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)
    GUICtrlCreateInput("", 120, 120, 65, 21)
    GUICtrlCreateInput("", 120, 152, 65, 21)
    GUICtrlCreateInput("", 120, 184, 65, 21)
    GUICtrlCreateInput("", 120, 216, 65, 21)
    GUICtrlCreateInput("", 120, 248, 65, 21)
    GUICtrlCreateInput("", 120, 280, 65, 21)
    GUICtrlCreateInput("", 120, 312, 65, 21)
    $Label14 = GUICtrlCreateLabel("8. Anzahl:", 24, 280, 51, 17)
    $Label15 = GUICtrlCreateLabel("9. Anzahl:", 24, 312, 51, 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)
    GUICtrlCreateInput("", 320, 120, 121, 21)
    GUICtrlCreateInput("", 320, 152, 121, 21)
    GUICtrlCreateInput("", 320, 184, 121, 21)
    GUICtrlCreateInput("", 320, 216, 121, 21)
    GUICtrlCreateInput("", 320, 248, 121, 21)
    GUICtrlCreateInput("", 320, 280, 121, 21)
    GUICtrlCreateInput("", 320, 312, 121, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit]

    Ich habe das jetzt eher Allgemein bezogen und nicht auf die Aufgabe mit den Jungen/Mädchen.
    Mit "Anzahl Insgesamt" ist gemeint, was die Anzahl zusammen ist zB. 12 Jungs + 13 Mädchen = 25. Also trägt man dort zB. die 25 ein.
    Mit "1. Anzahl:" ist gemeint, die Anzahl zB. an Jungen. Dort trägt man entweder "12" ein oder "13".
    Mit "Name der 1. Anzahl:" ist gemeint, dass man dort den Namen eintragen soll. zB. man trägt bei 1. Anzahl die 12 ein, so muss man beim "Name der 1. Anzahl:" Jungen hinschreiben, weil es ja 12 Jungen sind.
    Das gleiche mit den Mädels bei der 2. Anzahl.

    Dann muss man die "Anzahl an Ziehungen" bestimmen, dass sind jetzt zB. bei der Aufgabe 5 Freikarten, also 5 Ziehungen.

    "Ziehen mit Zurücklegen/Ziehe ohne Zurücklegen":
    Wenn eine person nur eine Freikarte kriegen darfn, dann ist es "Ziehen ohne Zurücklegen".
    Wenn jetzt ein Mädchen eine Freikarte bekommt, so muss die Gesamtzahl -1 genommen werden und auch die Anzahl an Mädchen -1.
    Das nennt man dann "Ziehen ohne Zurücklegen".

    Bei "Ziehen mit Zurücklegen" ist es egal wie viele Freikarten eine Person bekommen darf, somit bleibt die Anzahl Insgesamt und die Anzahl an Mädchen/Jungen stets gleich.
    Wäre gut, wenn du dich morgen mit mir in icq oder skype zusammen setzen könntest und das dann gemeinsam bearbeiten, denn ich will ja auch was dazu lernen ^^


    PS: Ich habe bis zu 9. Anzahlen im GUI gemacht, weil bei anderen aufgaben, wo es zB. um gelbe, rote, blaue, grüne, rosane kugeln geht, braucht man halt mehrere Anzahlen und nicht nur 2^^

    Hoffe hast du so verstanden, lg RealMadrid11rk

  • 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>
    #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 ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GenQuellcode
    ;
    Case $GenXml
    ;
    EndSwitch
    WEnd

    [/autoit]

    Wie 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.

  • Soweit bin ich gestern noch gekommen, vielleicht kannst du damit ja schon mal was anfangen:

    Spoiler anzeigen
    [autoit]

    While 1
    $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

    [/autoit] [autoit][/autoit] [autoit]

    ; Diese Funktion erhält als In-Parameter:
    ; $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
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _SchreibeLeerzeichen($AnzLeerzeichen)
    $lw2=0
    While ($lw2 <= $AnzLeerzeichen)
    $leerzeichen &= " "
    $lw2 = $lw2+1
    WEnd
    return $leerzeichen
    EndFunc

    [/autoit]

    Das 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 :P
    Bis wann bräuchtest du das Geschenk für deinen Lehrer denn?

  • Hey danke für deine Mühe!
    Frühster Termin wäre am Montag und spätester am Freitag 03.06.11.
    Ich werde mich gleich mal ran setzen und ausprobieren, aber werde es wahrscheinlich alleine nicht auf die Reihe bekommen.
    Wenn du eventuell ein "kleineres" script erstellst. Also mit 2x Ziehen ohne zurücklegen, dann 3 Mädchen und 2 Jungen. Dann wäre das für dich nicht so viel Arbeit und ich könnte dann von deinem Script lernen und den Rest selbst dann eventuell schaffen^^

  • Hab gerade einiges Probiert, aber mit deinem Script kann ich leider noch nichts anfangen. Das beste wäre, wenn du ein ganz kleines Beispiel fertig machst und ich dann anhand des Beispiels alles weiter schreiben kann^^

    Ach und hier taucht ein Fehler auf:

    Spoiler anzeigen
    [autoit]

    $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)

    [/autoit]

    Das liegt daran, dass die Zahlen bei

    Zitat

    $NameElement[1]


    in einer Eckigen Klammer sind.
    Nimmt man die eckige Klammer raus, so funktioniert es wieder.


    Lg RealMadrid11rk

  • 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]
    Dim $NameElement[9]

    [/autoit]

    , um die Größe zu initialisieren.

  • 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]
    Dim $NameElement[9]

    [/autoit]

    , um die Größe zu initialisieren.

    ^^
    Ja das schon, habe sogar mit GUI gearbeitet, aber das waren so meine hacks/bots phasen^^
    Damals hatte ich bots für onlinegames erstellt ^^
    Aber halt ganz einfache sachen wie, automatisch tastendrücken, farbwerte lesen usw.
    und halt auch mal per GUI sodass man die Tasten die gedrückt werden bestimmen kann, aber das liegt 2 Jahre her und seitdem habe ich nichts mehr gemacht und vieles vergessen :/

    Hoffe du kannst mir da helfen, wie gesagt, ein einfaches script reicht, sodass ich ins Schema reinkomme und es dann weiter von selbst schaffe.

  • 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.

  • 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.

    Hmm okay, naja Hauptsache du versuchst es :)
    Ich weiß, es ist sehr schwer.
    Ich hätte da beim quellcode anzeigen eher an so was wie gedacht, dass er dann Editor öffnen und dann das script da rein schreibt mit "send" befehlen, dann den editor schließt, es abspeichert als Baumdiagramm.xml und halt der Code muss UTF-8 sein. und halt auch noch "if" weil ist ja entweder mit zurücklegen oder ohne.
    Sowas wie:

    Spoiler anzeigen
    [autoit]

    Send (" <?xml version="1.0" encoding="UTF-8"?> ")
    Send (" {Enter} ")
    Send (" <bs:Brainstorm xmlns:bs="http://schemas.microsoft.com/visio/2003/brainstorming"> ")
    Send (" {Enter} ")
    Send (" <bs:topic bs:TopicID="T1"> ")
    Send (" {Enter} ")
    Send (" <bs:text>Hauptthema</bs:text> ")
    Send (" {Enter} ")
    Send (" <bs:topic bs:TopicID="T1.1"> ")
    Send (" {Enter} ")
    Send (" <bs:text> $Label2 / {$Label2 + $Label3} $Label4 </bs:text> ")
    Send (" {Enter} ")
    Send (" </bs:topic> ")
    Send (" {Enter} ")
    Send (" </bs:Brainstorm> ")

    [/autoit]

    Ich weiß, dass ist gerade nicht so ganz richtig wie ich das geschrieben habe. Aber vom Denken her müsste es doch so möglich sein oder?
    Bzw. so in der Art?

    Edit 21:12 Uhr :
    Ich habe mich jetzt nochmal umgesehen und vieles Probiert und ich denke, mit dem hier so in der Art müsste es zumindest gehen?

    Spoiler anzeigen
    [autoit]

    Case $GenXml
    GUICtrlRead ($Label1, $Label2, $Label3, $Label4, $Label5)
    Run("notepad.exe")
    WinWaitActive("Unbenannt - Editor")
    Sleep (1000)
    Send (" <?xml version="1.0" encoding="UTF-8"?> ")
    Send (" {Enter} ")
    Send (" <bs:Brainstorm xmlns:bs="http://schemas.microsoft.com/visio/2003/brainstorming"> ")
    Send (" {Enter} ")
    Send (" <bs:topic bs:TopicID="T1"> ")
    Send (" {Enter} ")
    Send (" <bs:text>Hauptthema</bs:text> ")
    Send (" {Enter} ")
    Send (" <bs:topic bs:TopicID="T1.1"> ")
    Send (" {Enter} ")
    Send (" <bs:text>")
    Send ($Label2)
    Send ("/")
    Send ($Label1)
    Send ($Label4)
    Send ("</bs:text>")
    Send (" {Enter} ")
    Send (" </bs:topic> ")
    Send (" {Enter} ")
    Send (" </bs:Brainstorm> ")
    WinClose("Unbenannt - Editor")
    Sleep(2000)
    Send("!s")
    Sleep (2000)
    Send ("Baumdiagramm.xml")
    Sleep (1000)
    Send ( "!s")
    EndSwitch
    WEnd

    [/autoit]

    Man müsste nur noch einstellen, dass wenn der Editor alles abspeichert, er den Code UTF-8 nehmen muss.
    Der Ansatz so ist richtig, wie ich es meine oder?

    3 Mal editiert, zuletzt von RealMadrid08rk (27. Mai 2011 um 21:23)

  • 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. :P

  • 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. :P

    Ja deins ist auf jeden fall besser ^^
    Ich bin ja noch ein totaler Anfänger^^
    Wollte nur, dass du weißt, dass ich auch dran arbeite und es irgendwie versuche. Nicht, dass du denkst du musst hier die ganze Arbeit machen unso und ich liege auf der faulen haut ;)
    Habe mir übrigens mal angeschaut was Arrays sind, habs jetzt verstanden was du meinstest.

    Deine Variante ist besser, schaffst du das denn auch?
    Das komplizierte ist ja wie man das machen soll bei mehreren Ziehungen. Bei einer Ziehung ist es ganz einfach. Bei mehreren wird es schwer, da die Anzahl dann imemr -1 genommen werden muss.
    Danke, dass du dir so viel Mühe gibst :)

    Lg

  • 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 :P
    Sprich, du leistest die Denkarbeit und ich tippe es noch ab :D

    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?

  • 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 :P
    Sprich, du leistest die Denkarbeit und ich tippe es noch ab :D

    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?

    Wie meinst du das jetzt?
    Mein du jetzt, wie du die Pfade für den Baumdiagramm bestimmst?

    Also das ist wie folgt:

    Spoiler anzeigen
    [autoit]

    <?xml version="1.0" encoding="UTF-8"?>
    <bs:Brainstorm xmlns:bs="http://schemas.microsoft.com/visio/2003/brainstorming">

    [/autoit] [autoit][/autoit] [autoit]

    <bs:topic bs:TopicID="T1">
    <bs:text>Hauptthema</bs:text>
    </bs:topic>

    </bs:Brainstorm>

    [/autoit]

    Das hier ist jetzt noch kein Pfad, drin und noch keine Ziehung etc.

    Jetzt bauen wir da zB. die erste Ziehung rein. Dafür brauchen wir einen pfad 13/25 Mädchen und einen Pfad 12/25 Jungen.
    Wir fügen erst die Mädchen ein:

    Spoiler anzeigen
    [autoit]

    <?xml version="1.0" encoding="UTF-8"?>
    <bs:Brainstorm xmlns:bs="http://schemas.microsoft.com/visio/2003/brainstorming">

    [/autoit] [autoit][/autoit] [autoit]

    <bs:topic bs:TopicID="T1">
    <bs:text>Hauptthema</bs:text>
    <bs:topic bs:TopicID="T1.1">
    <bs:text>13/25 Mädchen</bs:text>
    </bs:topic>
    </bs:topic>

    </bs:Brainstorm>

    [/autoit]

    Jetzt fügen wir die Jungen ein:

    Spoiler anzeigen
    [autoit]

    <?xml version="1.0" encoding="UTF-8"?>
    <bs:Brainstorm xmlns:bs="http://schemas.microsoft.com/visio/2003/brainstorming">

    [/autoit] [autoit][/autoit] [autoit]

    <bs:topic bs:TopicID="T1">
    <bs:text>Hauptthema</bs:text>
    <bs:topic bs:TopicID="T1.1">
    <bs:text>13/25 Mädchen</bs:text>
    </bs:topic>

    <bs:topic bs:TopicID="T1.2">
    <bs:text>12/25 Jungen</bs:text>
    </bs:topic>
    </bs:topic>

    </bs:Brainstorm>

    [/autoit]

    Das Schema ist ganz einfach. Wenn man jetzt Mädchen und Jungen hat, also Anzahl 2, dann gibt es T1.1 und T1.2
    Wenn man jetzt aber zB. rote, blaue und grüne kugeln hat, dann gibt es T1.1, T1.2 und T1.3
    Das heißt nach dem "T1." kommt immer die Anzahl an der verschiedenen Kugeln ( rot, blau, grün = 3), personen (mädchen, jungen = 2).
    Nach dem T1.1 wiederholt sich das ganze. Bei den Mädchen und Jungen würde nach T1.1 noch ein ".1" und ein ".2" kommen, dh: T1.1.1 und T1.1.2
    Und halt das gleiche mit T1.2.1 und T1.2.2
    Verstehst du das Prinzip?

  • 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.

    Okay, verstehe. Aber weiß selber nicht wie man das da sonst machen muss =/
    Das ganze ist total kompliziert.