Tut mir leid, dass da gerad noch so viele Fehler im Tut sind -->sollte eig das meisste behoben sein...
--->fettes THX an den der das hier angepinnt hat
Bitte meldet mir Fehler im Tut Was ist eine GUI???
Ein GUI (Graphic User Interface) ist eine grafische Oberfläche die es dem Anwender
ermöglicht den Programmablauf über Controls(Button, Kombobox, usw…(Steuerelemente)
zu steuern.
Natürlich könnte man auch mit einer Inputbox Werte eingeben,
aber mit einer GUI ist es eleganter und es ermöglicht ein mehrere Werte
„gleichzeitig“ einzugeben.
Erstes Erstellen einer
GUI:
Um die GUI-Funktionen vollständig nutzen zu können müssen
wir die Datei „GUIConstantsEx.au3“ einbinden.
Das machen
wir per #include:
AutoIt-QuellCode
1
#include<GUIConstantsEx.au3>
Ich hoffe ihr konntet mir bisher folgen ;-)
Als nächstes brauchen wir eine GUI um darauf
Steuerelemnte(Controls) zu erstellen.
Aber für ein ganz normales Fenster brauchen wir eigentlich
nur die ersten 3 Parameter.
Gucken wir uns die doch mal an:
$title = Der Titel des Fensters (zb. „night’s GUI“)
$width = wie breit das fenster sein soll
$height = Die Höhe des Fensters
Zusätzlich brauchen wir GUIsetstate() um das Fenster
sichtbar zu machen.
-->Mit GUIsetstate kann man den Status eines Fensters ändern.
Aber im Moment wollen wir ja nur das Fenster sichtbar machen
und nicht minimieren oder so etwas…
Jetzt gibt es 2 Möglichkeiten(vielleicht auch mehr aber das
ist mir egal): 1.Möglichkeit:
GUIsetstate() besitzt 2 Parameter und beide sind optional.
Ich möchte mich erstmal nur auf den 1. Parameter beziehen weil er nach meiner Meinung wichtiger ist.
Als Parameter kann man ihn Makros mitgeben. (Nein, ich meine keine Viren xD)
Ein Makro fängt immer mit einem @ an… z.b.
@sw_hide, @sw_show, @sw_minimize, usw
Ich denke, dass es jetzt nicht weiter schwer fallen wird daraus den richtigen Makro zu machen wenn wir wissen, dass wir etwas sichtbar machen wollen…
Also ich würde @sw_show nehmen aber das ist ganz eure Entscheidung…
Die anderen bedeuten z.b.
@sw_minimize = minimiert das Fenster
@sw_hide = versteckt das Fenster(um es wieder sichtbar zu machen nehmen wir @sw_show
2.Möglichkeit
Wir schreiben einfach gar keine Parameter in die Funktion
Warum ich das nicht gleich geschrieben habe? Kein Ahnung
#include<GUIConstantsEx.au3>;funktionen;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate()
Probieren wir das doch gleich mal aus!
Dieser Beitrag wurde bereits 16 mal editiert, zuletzt von »@night@« (9. März 2010, 20:32)
Aber eigentlich ist das ja nicht das, was wir haben wollen…
Kurz mal nachdenken...
Gehen wir mal den Programmablauf durch…
1 das programm bindet die GUI-Funktionen ein
2. es erstellt ein Fenster mit dem Titel „Das ist eine GUI und ich bin
kreativ!“
3. und das programm ist zu ende….
Das Problem liegt also daran dass sich das Programm zu
schnell schließt!!!
Dieses Problem lässt sich ja einfach lösen…
Wir bauen einfach eine Endlosschleife ein die nichts anderes
macht als zu warten.
#include<GUIConstantsEx.au3>;funktionen;werden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)While1Sleep(1000)Wend
So… Eigentlich sollte jetzt folgendes passiert sein:
-->Ein Fenster mit dem Titel „Das ist eine GUI und ich bin kreativ“ sollte erstellt worden sein
-->es wurde sichbar gemacht
-->Es bleibt offen Wie erstelle ich ein Fenster mit selbst gewählten Grössen?
So jetzt haben wir zwar ein Fenster aber wir wollen ja vieleicht ein Fenster mit anderen Größen…
Dazu füllen wir den 2. und den 3. Parameter der Funktion GUIcreate().
Nochmal zur Wiederholung(omg, ich spreche schon fast wie nen Lehrer!!!):
$width = Die Breite des Fenters
$height = Die Höhe des Fensters
Verändern wir unser Programm mal ein bisschen…
AutoIt-QuellCode
1
2
3
4
5
6
7
#include<GUIConstantsEx.au3>;funktionen warden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)While1Sleep(1000)Wend
Und schon wird das Fenster grösser…
Das ist ja schon mal nicht schlecht aber eigentlich wollten wir ja eine GUI mit vielen Controls erstellen…
Und es geht nicht zu…
Aber das ist jetzt egal! Dem werden wir uns später zuwenden ;-D
Controls:
Ein Control ist (wie schon gesagt) ein Button oder ein sonstiges Steuerelement.
Wir erstellen ein Control mit der Funktion GUIctrlcreate…()
Diese Funktion gibt es zwar nicht aber es ist die Wurzel aus vielen anderen Funktionen.
Ein Button erstellt man zum Beispiel so…
GUIctrlcreatebutton($text, $left, $top)
Es gibt natürlich noch mehr Parameter aber die anderen sind optional (anders gesagt: „sie sind vorbelegt“. Das steht in meinem (hoffentlich) zukünftigen UDF-Turorial). Im Gegensatz zur GUI muss man die Steuerelemente nicht sichtbar machen. Ansonsten ähneln die Parameter der Funktion der „GUICreate“-Funktion.
$text = Ist der Text der in dem Steuerelement steht (einfaches beispiel ist ein button, wobei der Text in dem Button drin steht.)
$left = Die Koordinaten des Steuerelementes auf der GUI. Das heisst wenn x = 30 ist und y = 30 ist, ist das Steuerelement nicht in der Ecke des Desktops sondern in der Ecke der GUI. $top = siehe $left
Weitere optionale Parameter sind:
$width = So ähnlich wie bei der GUI (also die Breite des Steuerelements)
$height = So ähnlich wie bei der GUI (alo die höhe des steuerelements)
#include<GUIConstantsEx.au3>;funktionen warden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)While1Sleep(1000)Wend
GUICtrlCreateAvi: Erstellt ein AVI Video-Control für die GUI.
GUICtrlCreateButton Erstellt eine Schaltfläche (Button) für die GUI. GUICtrlCreateCheckbox Erstellt ein Kontrollkästchen (checkbox) für die GUI. GUICtrlCreateCombo Erstellt eine Liste mit ausklappbarer Auswahl (ComboBox) für die GUI.
GUICtrlCreateContextMenu Erstellt ein Kontextmenü für ein Steuerelement oder das ganze GUI-Fenster.
GUICtrlCreateDate Erstellt ein Datumsauswahl-Element für die GUI.
GUICtrlCreateDummy Erstellt ein Dummy-Steuerelement für die GUI.
GUICtrlCreateEdit Erstellt ein mehrzeiliges Textfeld für die GUI.
GUICtrlCreateGroup Erstellt ein Gruppen-Steuerelement für die GUI.
GUICtrlCreateIcon Erstellt ein Icon für die GUI.
GUICtrlCreateInput Erstellt ein einzeiliges Textfeld für die GUI.
GUICtrlCreateLabel Erstellt eine Beschriftungsfläche (Label) für die GUI.
GUICtrlCreateList Erstellt ein Listen-Steuerelement für die GUI.
GUICtrlCreateListView Erstellt eine Liste mit mehreren Spalten für die GUI. GUICtrlCreateListViewItem Erstellt einen Eintrag in einer mehrspaltigen Liste. GUICtrlCreateMenu Erstellt eine Menüleiste für die GUI.
GUICtrlCreateMenuitem Erstellt einen Menüeintrag für die GUI.
GUICtrlCreatePic Erstellt ein Bild-Element für die GUI.
GUICtrlCreateProgress Erstellt einen Fortschrittsbalken für die GUI.
GUICtrlCreateRadio Erstellt ein Optionsfeld (Radio button) für die GUI.
GUICtrlCreateSlider Erstellt einen Schieberegler für die GUI.
GUICtrlCreateTab Erstellt eine Registerkartengruppe für die GUI.
GUICtrlCreateTabItem Erstellt eine Registerkarte für die GUI.
GUICtrlCreateTreeView Erstellt ein Strukturbaum-Steuerelement (TreeView control) für die GUI.
GUICtrlCreateTreeViewItem Erstellt einen Eintrag in einem Strukturbaum. GUICtrlCreateUpdown Erstellt ein Pfeiltasten-Control für die GUI.
Weitere Infos gibt es in der Dokumentation von autoit.de.
Trotzdem gehe ich in diesem Tutorial noch auf wichtige Controls ein.
Der Button
Wie schon gesagt erstellt man Buttons mit „GUIctrlcreatebutton“ und die Parameter hab ich ja auch schon erklärt. Aber wozu schreibe ich dann hier noch mal extra ein Kapitel über Buttons???
Wir können zwar schon Buttons erzeugen aber wenn man auf einen Button klickt passiert nicht sonderlich viel…
Natürlich kann man ein Programm auch schon so programmieren aber es hat nicht viel Sinn
Also wie bringe ich das Control jetzt dazu etwas zumachen???
Dafür gibt es in Autoit 2 Möglichkeiten, wobei die 2. etwas übersichtlicher ist aber nicht immer angebracht ist. So sollte man doch beide Möglichkeiten kennen.
Allerdings ist es für beide wichtig dass wir die „ID“ des Steuerelements haben sonst weis das der Compiler ja nicht welches Steuerelement was machen soll.
Die ID kriegen wir indem wir den Rückgabewert der jeweiligen Erstellungs-Funktion auffangen. Aber wie macht man das noch mal???
Ein Rückgabewert fängt man auf indem man wie bei einer „initalisierung“ eine Variable auf die Linke Seite der Zuweisung stellt
Also fängt man ein Rückgabewert auf indem man ein Variable auf die linke Seite der Zueisung schreibt, einen „=“ in der Mitte setzt und dann die Funktion aufruft.
AutoIt-QuellCode
1
2
;das ist das übliche Schema ein rückgabewert aufzufangen$variable= Funktion()
So jetzt könnt ihr mal überlegen wie man jetzt die ID (also den Rückgabewert der Funktion)
auffängt...
Jetzt haben wir die ID des Controls und jetzt können wir anfangen das Steuerelement dazu zu bringen etwas zu machen. Allerdings macht man das auch bei jedem anderen Control so mit der ID. Sogar bei der GUI(die GUI ist aber kein control(wenn ich da falsch liege berichitgt mich)):
#include<GUIConstantsEx.au3>;funktionen warden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)$ID_Button=GUIctrlcreatebutton("lol",30,30);----------------------------------------------------------------------$msg=GUIgetmsg();es ist do ähnlich wie “tradition“ dass man $msg als Variable verwendet. ;Dadurch lässt sich der Code am Ende auch für andere Programmierer gut lesen.;------------------------------------------------------------------------------------While1Sleep(1000)Wend
So! Jetzt haben wirs gleich! Aber Moment mal… Jetzt haben wir doch noch nen Problem… Wie können wir jetzt unterscheiden welcher Button jetzt geklickt wurde???
Ganz einfach! Die Funktion GUIgetmsg() gibt die „ID“ des geklickten Steuerelement zurück
Das heisst…
Wenn die msg = id ist dann
…mache das und das…
Endwenn
Das sieht jetzt derbst dämlich aus, aber bei größeren Projekten schreiben sich manche Programmierer wirklich so einen Pseudo-Quelltext.
#include<GUIConstantsEx.au3>;funktionen;----------------------------------------GUIcreate("Dasist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)$ID_Button=GUIctrlcreatebutton("lol",30,30);----------------------------------------------------------------------$msg=GUIgetmsg();es ist do ähnlich wie “tradition“ dass man $msg als Variable;verwendet. Dadurch lässt sich der Code am Ende auch für andere Programmierer;gut lesen.Switch$msgCase$ID_Button;hier kommen die Befehle rein in disem Beispiel eine msgboxMsgbox(0,"lol","Es funktioniert!!!")endswitch;------------------------------------------------------------------------------------While1Sleep(1000)Wend
Also bei mir sieht das ja jetzt nich schlecht aus... >>Bild<<
Aber… Moment mal!... Das bringt ja immer noch nichts den
Button anzuklicken!!!
Woran könnte das wohl liegen???
Erst mal nachdenken…
Hmmm…lol…..hmmmm Ahh!!!
Gehen wir mal den Quellcode durch.
1.das programm bindet die nötigen funktionen ein
2.es wird ein Fenster erstellt
3.wir erstellen einen Button und weisen die ID der Variable
$ID_Button zu
4.wir weisen der Varible $msg den Rückgabewert der Funktion
GUIgetmsg() zu (also die msg)
5.Wir überprüfen ob die msg „sagt“ dass der button geklickt
wurde
6.Danach führt er eine Endlosschleife aus die wartet…
7. die msg wird nicht wieder erneuert und es wird auch nicht
wieder überprüft ob der Button geklickt wurde… --->Hier liegt also dass Problem!!!
Das is dann ja net so schlimm! Das probelm haben wir schnell
erledigt…
#include<GUIConstantsEx.au3>;funktionen warden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)$ID_Button=GUIctrlcreatebutton("lol",30,30)While1;----------------------------------------------------------------------$msg=GUIgetmsg();es ist do ähnlich wie “tradition“ dass man $msg als Variable verwendet. ;Dadurch lässt sich der Code am Ende auch für andere Programmierer gut lesen.Switch$msgCase$ID_Button;hier kommen die Befehle rein in disem Beispiel eine msgboxMsgbox(0,"lol","Es funktioniert!!!")Endswitch;WIR SCHIEBEN DEN CODE EINFACH IN DIE SCHLEIFEE;------------------------------------------------------------------------------------Sleep(1000)Wend
Probieren wir es jetzt mal aus!!!
Was?!? Das geht immer noch nicht???
Gucken wir mal in die schleife zur switch struktur
Mhh..nnnhh…..
Also da kann ja iwie nichts falsch sein…
Gucken wir uns mal den Rest der Schleife an…
AHHH! Da liegt also der Fehler!!!!! Es ist eine zu gr0ße sleep-pause in der Schleife!!! So kann er die msg praktisch nie kriegen weil es zu selten (1-mal pro sek) überprüft, ob der button geklickt wurde…
Verbessern wir den Quelltext mal…
#include<GUIConstantsEx.au3>;funktionen warden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)$ID_Button=GUIctrlcreatebutton("lol",30,30)While1;----------------------------------------------------------------------$msg=GUIgetmsg();es ist do ähnlich wie “tradition“ dass man $msg als Variable verwendet. ;Dadurch lässt sich der Code am Ende auch für andere Programmierer gut lesen.Switch$msgCase$ID_Button;hier kommen die Befehle rein in disem Beispiel eine msgboxMsgbox(0,"lol","Es funktioniert!!!")Endswitch;WIR SCHIEBEN DEN CODE EINFACH IN DIE SCHLEIFEE;------------------------------------------------------------------------------------Sleep(20)Wend
Jetzt müsste es eigentlich gehen.
Es geht auch WOOHOO!!!
Jetzt haben wir das schon mal!!!
Gehen wir den Quelltext noch einmal durch:
3.Die GUI wird sichbar gemacht (kann man auch man auch am ende der Erstellung machen damit der Benutzer nicht die Erstellung der Steuerelemente der GUI usw sieht
5.ier beenden wir die schleife und das ist der letzte befehl des jetzigen programm
Natürlich gibt es auch noch Kommentare dazwischen aber die spielen kein Rolle bei der Kompillierung
Auf diese Weise funktioniert Möglichkeit 1.
Noch mal zur Erinnerung:
Wenn ein Button geklickt wurde (oder auch andere Controls, aber nicht alle)
Ist in der msg die ID des Controls abgespeichert.
Diese ist ja auch in einer Variablen abgespeichert, womit wir auch vergleichen können
Das wars mit Möglichkeit1…
Moment mal…
Da fehlt doch noch was…
Wenn wir die GUI mit dem Roten x Knopf ausmachen wollen passiert gar nichts…
Aber das ist kein Problem.
Denn dieses Ereignis ist schon vorprogrammiert und man nennt sie „system-ereignisse“
Hier ist eine Liste von ihnen:
Jetzt denken wir mal nach welche wir davon gebrauchen könnten
Also ich weis nicht wie ihr es seht aber ich würde $GUI_EVENT_CLOSE benutzen…
Also wie integrieren wir sie jetzt (das sollte man jetzt eigentlich können)
Genau!
Wir vergleichen einfach mit der msg(rückgabewert der Funktion „GUIgetMsg“)!!!
#include<GUIConstantsEx.au3>;funktionen warden eingebunden;----------------------------------------GUIcreate("Das ist eine GUI und ich bin kreativ!",600,600)GUIsetstate(@sw_show)$ID_Button=GUIctrlcreatebutton("lol",30,30)While1$msg=GUIgetmsg();es ist do ähnlich wie “tradition“ dass;man $msg als Variable verwendet. ;Dadurch lässt sich der Code am Ende auch für;andere Programmierer gut lesen.Switch$msgCase$ID_Button;hier kommen die Befehle rein in disem Beispiel eine msgboxMsgbox(0,"lol","Es funktioniert!!!")Case$GUI_EVENT_CLOSEExitEndswitch;WIR SCHIEBEN DEN CODE EINFACH IN DIE SCHLEIFEESleep(20)Wend
Jetzt kann man das Programm sogar ausmachen!!!
Weiter geht’s mit Möglichkeit 2.
Möglichkeit 2:
Die 2. Möglichkeit ist basic-ähnlicher und meistens übersichtlicher.
Mit ihr kann man einstellen welche Funktion aufgerufen wird
wenn der Button geklickt wird.
ACHTUNG: Ab hier solltet ihr wissen wie man eine einfache
Funktion programmiert (ohne Parameter, ohne Rückgabewert). Diese Art von
Funktion findet man auch oft bei Hotkeysets.
Leider kann man nur einen „mode“ gleichzeitig benutzen.
Entweder den, den ich euch gerade gezeigt habe oder den „GUIOnEventMode“.
Das heisst, man kann nur einen von ihnen gleichzeitig
benutzen, aber man kann während des Programms umschalten.
Das Einschalten und Ausschalten macht man indem man die
Funktion opt($CaretCoordMode, $param)
Setzen wir unser Programm mal zurück zu den Punkt wo wir
gerade den Button erstellt haben.
Einschalten tut man den Mode mit…
opt("GUIOnEventMode",1)
Auschalten mit…
opt("GUIOnEventMode",0)
eigentlich logisch xD
Ergänzen wir unser Programm mal…
Die 2. Möglichkeit ist basic-ähnlicher und meistens übersichtlicher.
Mit ihr kann man einstellen welche Funktion aufgerufen wird
wenn der Button geklickt wird.
ACHTUNG: Ab hier solltet ihr wissen wie man eine einfache
Funktion programmiert (ohne Parameter, ohne Rückgabewert). Diese Art von
Funktion findet man auch oft bei Hotkeysets.
Leider kann man nur einen „mode“ gleichzeitig benutzen.
Entweder den, den ich euch gerade gezeigt habe oder den „GUIOnEventMode“.
Das heisst, man kann nur einen von ihnen gleichzeitig
benutzen, aber man kann während des Programms umschalten.
Das Einschalten und Ausschalten macht man indem man die
Funktion opt($CaretCoordMode, $param)
Setzen wir unser Programm mal zurück zu den Punkt wo wir
Gerade den Button erstellt haben.
Folgendes Programm wollte ich zu Anfang (mit euch) schreiben.
1. soll ein GUI-Fenster entstehen
2.drauf ist ein Button
3.d wenn man den Button klickt kommt eine Msgbox
Nicht weiter schwer, oder???
Schreiben wir erstmal bei unserem Programm die Id dazu…
Wichtig: Ihr
müsst den Funktionsnamen in Anführungszeichen schreiben („“)!!!
UND ihr dürft
keine Parameter mitgeben und unter gar keinen Umständen eine Klammer öffnen und
schließen (in unserem Fall ist dies verboten: _msg())
Sonst erkennt der Compiler nicht die Funktion.
Und wie schon gesagt in „“ schreiben…
Das sieht ja schon mal gut aus…
gehen ir den Quelltext nochmal durch:
AutoIt-QuellCode
1
#include<GUIConstantsEx.au3>;funktionen werden eingebunden
Es wird in den GUIOnEventMode gewechselt, was heisst das man jetzt die nötigen Funktionen wie GUIctrlsetonEvent benutzen kann. Allerdings kann man jetzt nicht mehr Möglichkeit 1 verwenden. Um inßhn auszuschalten nimmt man anstatt des 2.Parameters eine 0.
Das habe ich ja glaube ich schon ziemlich oft erklärt. Aber nochmal schnell und kurz. Es wird eine GUI mit dem Titel „Das ist eine GUI und ich bin kreativ“ erstellt, die die Maße 600 x und 600 y hat.
Anschließend wird es sichtbar gemacht.
Funktion wird erstellt in der eine MsgBox erzeugt wird.
->das wars
So… Dann haben wir ja schon mal was. Aber eigentlich isses ja nervig die GUI entweder bei dem Icon auszumachen oder in dem Taskmanager.
Dass wollen wir doch glichen mal ändern, wo wir jetzt ja neue Kenntnisse haben.
Wir schreiben einfach noch eine SetOnEvent-Funktion rein die das Ereigniss $GUI_EVENT_CLOSE
Behandelt.
Los geht’s…
Aber davor schreiben wir noch mal die Funktion close, die aufgerufen wird, sobald das ereignis $GUI_EVENT_CLOSE aufgerufen wird.
Gleich mal testen… und… WHAT?!? Das geht ja gar nicht!!! Mal
überlegen…
…ich glaube da war vorhin sone dicke schrift(oder auch nicht, dank der Kopiererei) in der
Stand…mal überlegen…
Das ist wichtig!!! Es ist (glaube ich) ein häufiger Anfängerfehler, dass man versucht GUIEvents(System-Events) mit GUIctrletonEvent() zu setzen.
Richtg setzt man sie mit GUIsetonEvent!!!!!!!
Woah...
Da haben wir wohl was falsch gemacht.
Ändern wir das gleich mal.
Jetzt geht’s weiter zu den etwas komplizierteren Controls…
Der Input
Einen Input erstellt man mit „GUIctrlcreateinput“.
Seine Parameter sind:
$text = Der Text der in dem Input stehen soll, aber normalerweise soll der angeber ja etwas eingeben und nicht etwas in dem Input lesen. Also nehmen wir normalerweise als Parameter "".
$left = Die x Koordinate auf der GUI.
$top = Die y Koordinate auf der GUI.
Weiter mit den optionalen Parameter…
[$width] = Die Breite des Inputs.
[$height] = Die Höhe des Inputs.
Mit dem Rest beschäftigen wir uns später…
a gut… Das sind ja schon mal die wichtigsten Parameter.
Programmieren wir uns mal so einen Input und fangen seine Id gleich auf.
Starten wir das Skript einfach mal und gucken was passiert…
Und es funktioniert sogar!
Ich glaube dass ich an dieser Stelle den Queltext nicht nochmal durchgehen muss…
(ich mag … ;-))
Aber wie gucke ich was in dem Input drinsteht??? Eigentlich könnte man da gleich schreiben „Wie lese ich den Input aus???“.
Probieren wir das einfach mal aus. In diesem Beispiel benutze ich Möglichkeit 1, weil es schenller geht (bei so kleinen beispielen. Aber ich werde auch noch die 2. Möglichkeit verwenden).
Denken wir mal nach…
Und nicht vergessen aus den GUIOnEventMode zurückzuschalten,falls ihr ihn an habt!!!
(bitte erst ausprobieren, dann weiter lesen)
WHAT?!? Was soll das denn???
Warum steht da denn immer nur ne 3 in der Msgbox obwohl ich da was anderes eingegeben habe??? >>Bild<<
Langsam hab ich ja echt kein Bock mehr auf Autoit bei so vielen Fehlern!!!!!!
Aber bevor ich aufgebe gucke ich mal in die Hilfe :-D
Hmm..mmm
Da steht sowas wie „GUIctrlread“ oder sowas…
Was machen wir denn da???
Also ich probier’s aus!
Gucken wir uns mal die Parameter an:
$ID = Die ID des Steuerelements.
Nach autoitsoll es noch ein Parameter namens „advanced“ geben aber es steht nichts darüber in der Dokumentation, arum lasse ich diesen Parameter weg.
Und weil ich keine Ahnung hab, was er bringt ;-)
Klingt ja schon mal recht einfach.
Probieren wir es doch gelich mal aus. >>Bild<<
Funktioniert doch!!!
Eigentlich sind wir jetzt ja fertig Moment mal… Aber wie kann ich den Text während des Programmlaufs einstellen???
Was!?! Das interessiert dich gar nicht??? Das mir iwie egal…
Das is doch schon ml net schlecht. Jetzt müssen wir es nur noch integrieren!!!
Machen wir das doch auch mal:
Schreiben wir ein Programm in dem eine GUIerstellt wird.
Als Controls brauchen wir einen input und einen Knopf.
Wenn der Knopf gedrückt wird steht in dem input „lol“.
Ich habe jetzt schon so viel geschrieben, jetzt könnt ihr auch mal was schreiben! Macht ihr das mal für mich!
So! Das war’s dann auch!
Wenn nen Mod Lust hat kann er ja ergänzen wozu default gut is
Der Slider
Ein Slider ist DAS hier. Wozu man ihn brauch ist wohl klar
Eigentlich kannmna ihn fast so behandeln wie einen Input… Man kann seinen Wert mit GUIctrlsetdata() einstellen und ihn auch mit GUIctrlread() auslesen. Und mit GUIctrlcreateslider() erzeuge is son Teil. Aber warum habe ich ihn jetzt in dieses TuT reingenommen??? Eigentlich kennen wir ja schon alle Befehle…
Außer eben einen… Wie stellen wir den ein von welchem Wert bis welchen wir ihn bewegen können???
Vielleicht mit GUIctrlsetstate()…
$control ID = Die Control id eben
State = Die Eigenschaft.
So vielversprechend sieht dass ja nicht aus… Aber Moment mal… Warum gucke ich nicht einfach in die deutsche Hilfe datei die ich mir sogar heruntergeladen habe um immer mal einen Blick drauf zuwerfen…
Tun wir das doch mal…
Zitat
Zum Setzen des Minimal- und Maximalwerts benutze GUICtrlSetLimit.
Da haben wir doch was… Gucken wir uns doch gleich mal die Parameter an, indem wir auf das Wort GUIctrlsetlimit() klicken. (Ich erkär das deswegen weil es bestimmt genug Idioten auf der Welt gibt, die dazu zu dämlich sind!)
Und da sehen wir (ich schreibe es hier noch mal in eigenen Worten):
$control id = die Id des sliders
$max = der Maximalwert den man mit dem Slider einstellen sollen können
$min = den Minimalwert den wir mit ihm einstellen sollen kann
Das sollte ja eig jeder verstehen.
Schreiben wir gleich mal ein Skript, in dem man auf einer Slider ein Wert zwischen 0 und 100 einstellen kann und den Wert dann anzeigen kann wenn man auf einen button klickt.
Die Liste und die Combo-Box sind schon etwas komplizierter wenn es um die Initalisierung geht. Denn es gibt ja nicht nur einen Wert in die Liste zufüllen sondern (fast) undendlich
Es gibt zwar keine neuen Befehle für die Liste (wie schon gesagt, bei der Combo-Box verhält es sich eig genauso), trotzdem ist es komplizierter als ein Input weil es wie schon gesagt neue Methoden gibt…
Zuerst die Befehle die wir schon kennen:
-->GUIctrlcreatelist()
-->GUIctrlsetdata()
-->GUIctrlread()
Ich habe hier schon mal ein Skript geschrieben dass eine GUI mit einer Liste erzeugt.
Hier können wir auch gut sehen, dass neue Daten die „alten Daten“ verdrängen. Dass heist die älteren Daten rutschen in der Liste eine Spalte weiter nach unten. Und es können mehrere Daten in ein Steuerelement aufgenommen werden, wodurch sich ein Problem ergibt:
Wie lösche ich die Daten wenn alle Daten einfach ein nach unten rücke wenn neue Einträge erstellt werden???
-->Wir initalisieren die Liste einfach mit gar nichts.
-->GUIctrlsetdata($list, "")
Leider gibt es bis jetzt noch keinen Weg, den ich kenne, mit dem man nur einen Eintrag löschen kann. Man muss also alle Einträge löschen und dann alle gewünschten Einträge neu initalisieren…
Eine häufige Verwendung der Liste ist es ein Array, was mit Winlist() gefüllt wurde, in die Liste einzufügen.
Dazu müssen wir wissen, dass man arrays am besten mit einer for next schleife einsortiert.
Für ein 1D-Array brauchen wir nur eine Schleife, für ein 2D 2, usw…(bis 64 ;-))
Gucken wir uns doch mal an, wo die Titel der Fenster abgespeichert sind, denn wir wollen ja nur die Titel in der Liste haben…
Wird kein Titel und Text angegeben werden alle top-level Fenster zurückgegeben.
Das zurückgegebene Datenfeld ist 2-dimensional und wie folgt aufgebaut:
$array[0][0] = Anzahl der gefundenen Fenster.
$array[1][0] = erster Fenstertitel.
$array[1][1] = erste Fenster-ID (handle=HWND)
$array[2][0] = zweiter Fenstertitel
$array[2][1] = zweite Fenster-ID (handle=HWND)
...
$array[n][0] = n-ter Fenstertitel
$array[n][1] = n-te Fenster-ID (handle=HWND)
Wir sehen, dass wir eigentlich nur die erste Dimension durchlaufen müssen um an die Titel zu kommen… Denn im Prinzip sind die Titel der Fenster ja einfach durchnummeriert.
Bsp:
$array[1][0] = Titel 1.Fenster
$array[2][0]=Titel 2.Fenster
$array[3][0]=Titel 3.Fenster
Wir sehen dass wir im Programm nur einen Wert verändern müssen und die 0 in der 2.Dimension bleibt konstant.
$array[$i][0] ;i ist die variable die sich verändert, während 0 bleibt.
Hier lohnt es sich sich mal nen bissen die Schleifen angeguckt zu haben ;P
Fangen wir doch mal an die Schleife zu programmieren die wir nachher in das Programm integrieren.
For $i 0 1 To …
Aber was sollen wir denn jetzt da hin schreiben??? Wir wissen doch gar nich wie viele Fenster wir durchlaufen wollen!?! Oder vielleicht doch…
1.Möglichkeit
Wir benutzen Ubound(). Ubound ist eine Funktion die uns die Anzahl der Elemente in einer Dimension ausgibt.
Bsp:
Wir benutzen einfach den Wert der schon im array abgespeichert ist…
Das ist eig der einfachere Weg aber den anderen kann man auch gut bei anderen Konstruktionen gebrauchen
So! Fertig… Glaich mal testen… mhhh… WHAT?!? Warum funkt das net???
Guchekn wir mal in die Hilfe bei Winlist()…
Ahhh… Wir müssen eine extra Funktion integrieren mit der wir nachgucken, ob das Fenter sichtbar ist (ich denke mal dass es noch Fenster mit dem Titel „“ gibt. Dadurch werden ja andere Daten auch automatisch gelöscht)…
Am geilsten wäre es j auch noch wenn wir jetzt son Knopf hätten,mit dem wir die Transparenz des Fensters einstellen könnten…
Kein Problem! Schreiben wir auch mal schnell rein!!!
Tabs kennen wir von unserem Browser (ich hoffe ihr nehmt FireFox). Wenn wir uns die Dinger angucken dann is das ja iwie voll die verlockung die in sein Prog zu nehmen…
Und so schwer is das iwie auch gar nicht!!!
Erzeugen tun wi eine Tab mit GUICtrlcreateTab()
Ein TabItem erzeugen wir mit GUIctrlcreateTabItem()
Bis jetzt kennen wir dass ja noch gar nicht dass man ein Item erzeugen kann,aber das is ja egal
Dann fangen wir mal an….
Schreiben wir erstmal nen Prog was nur nen Tab erzeugt…
Wir sehen da ja im Moment nicht viel aber das wird sich ja noch ändern…
Jetzt integrieren wir mal 2 Items. Damit sie in den Tab integriert werden schreiben wir sie einfach direkt unter GUICtrlcreateTAB(). Damit sind ise das Item dieses Tabs…
Sieht ja schon mal net schlecht aus…
Um in die einzelnen TabItems etwasreinzuschreiben,
schreiben wir es einfach direkt unter die GUIctrlcreateTabItem().
DiesesPrinzip besteht eig wie aus Klammern. Wir klammern die einzelnen TabItem in einen Tab ein, indem wir sie darunter schreiben. Wie klammern den Text derItems ein indem wir ihn zwischen die einzelnen Items schreiben. Usw….
Auslesen können wir den Tab eben wie alle anderen Controls auch. Per GUIctrlread(). Beim auslesen zeigt er uns in numerierter Reihenfolge das gerade geöffnete TabItem an. 0 ist das erste. 1 ist das 2.Tabitem,etc.
Dass heisst, wir können nichts in den Input schreiben, dafür aber etwas aus dem Input rauskopieren (klingt extrem dumm bei nem input, hat aber ab und zu schon sinn ;-) ).
Um einen Style bei einem Control zu verwenden includen wir erst mal die datei „EditConstants.au3“. Danach müssen wir einfach nur noch die nötige Konstante der Create-Funktion als Parameter mitgeben (leict unverständlich).
Auf dieser Seite sind alle Styles für (ich glaube ;-)) alle Steuerelemente aufgelistet.
Das wars dann eig auch schon Ich werde auf jeden Fall noch etwas über Exstyle schreiben, vielleicht noch nen paar Steuerelemente und möglicherweise noch über das Einfärben von GUI’s bzw. Steuerelementen…
Ihr dürft das TuT in andere Foren kopieren, solange ihr immer deutlich hinschreibt dass es von mir ist(@night@). Am besten schön fett . Und ihr müsst per Link auf diesen Thread verweisen...
Mit freundlichen Grüßen (Woohooo! Word schreibt das automatisch hin )
@night@
Downloads: Word-TuT
€dit: Alternativer Download-Link ist im Anhang...
Ich freue mich über jegliches Kommentar...
Dieser Beitrag wurde bereits 35 mal editiert, zuletzt von »@night@« (16. Juni 2010, 20:35)
Sieht ganz gut aus, werde es mir später mal genauer durchlesen.
Beim Überfliegen ist mir aufgefallen, dass du nen img-Tag nicht korrekt geschlossen hast und dadurch die Formatierung verhunzt wird. (Im 2. Beitrag)
Ansonsten sind mir nur Kleinigkeiten bei der Formatierung aufgefallen, aber das ist ja erstmal nicht so tragisch - sieht ja noch nach WIP aus :-)
hat gute 2 Monate gedauert Immer mal zwischendurch inner Woche weiter geschrieben... Werd mich jetzt erstmal um die Formatierungs-Fehler kümmern
Eig war noch viel mehr geplant, aber iwie wars mir langsam zu viel
mfg
@night@
PS: Werd auf jeden Fall noch ergänzen was Exstyles sind (hab lange gegooget und nichts gefunden) und vielleicht wie man buttons einfärbt und noch nen paar kleinigkeiten
1 = Normale Maus. Mit ihr könnt ihr Objekte in der GUI anklicken.
2 = Main-Menü.
3 = Labels. Mit diesem Werkzeug könnt ihr Texte erstellen.
4 = InputBox. Hiermit könnt ihr Inputboxen erstellen.
5 = EditBot. In ihr können mehrzeilige Texte angezeigt und eingetippt werden.
6 = Button. Hiermit können Buttons zum anklicken erstellt werden.
7 = Checkbox. Einzeln anwählbare Checkbox. Im Gegensatz zum Radiobutton können bei auch mehrere Checkboxen angeklickt werden.
8 = Radiobutton. Optionsauswahl. Man kann immer nur einen Radiobutton anwählen.
9 = Listbox.
10 = Combobox. Eine Art Dropdown Menü bei der man einen Eintrag auswählt.
11 = AnzeigeMenü (PopUp). Kann man einzelnen Steuerelementen (Controls) zuordnen. Wenn man auf das jeweilige Steuerelement Rechtsklick macht erscheint das zugewiesen Anzeigemenü.
12 = Gruppe. Innerhalb einer Gruppe werden z.B. Radiobuttons einzeln behandelt.
13 = Bild. Hiermit kann man ein Bild in die GUI einfügen.
14 = Icon. Hiermit wird ein Icon (z.B. von einer .exe Datein in die GUI eingefügt,)
15 = Graphic.
16 = Bildlaufleiste.
17 = Animation. Fügt eine Avi Videodatei in die GUI ein.
18 = TrayMenü. Hiermiet kann man ein TrayMenü erstellen.
19 = DummyControl.
20 = Slider. Erstellt einen verschiebaren Regler im GUI.
21 = Prozessbar. Erstellt eine Statusanzeige wie z.B. in einer Installation in der GUI.
22 = Date Picker. Erstellt einen Moantskalender im Stil einer ComboBox.
23 = Monatskalender. Erstellt einen Monatskalender (komplett sichtbar)
24 = Strukturansicht/TreeView
25 = ListView. Eine Art Tabelle.
26 = TabMenü. Erstellt eine Art Karteiregister.
27 = Objekt. Erstellt ein ComObject. (Hiermit kann man z.B. Windows Media Player integrieren oder ein IExplorer Fenster.
28 = StatusBar. Erstellt eine Statusbar am unteren Rand der GUI.
29 = IP-Inputbox. Ähnlich einer Inputbox allerdings im Stil einer IP-Adressen Eingabe mit 4 Teilen.
Wirklich gut gemacht =) aber für alle faulen unter uns : Koda damit erstellt man Guis im Handumdrehen ohne großes rechnen und anpassen
Dl link : Klick Mich =)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »hamburger« (18. Juni 2009, 19:54)
wenn ihr mir dankt, find ich das zwar gut, aber noch viel besser wäre es wenn ihr auf den bedanken-button klickt
Trotzdem freuts mich das alle so gut klar kommen
mfg
@night@