Probleme mit : Text aus Func im Formstudio 2

Hilfe & Unterstützung für das ISN AutoIt Studio
Antworten
Fragender
Beiträge: 5
Registriert: Do 23. Mär 2023, 08:09
Kontaktdaten:

Probleme mit : Text aus Func im Formstudio 2

Beitrag von Fragender »

Hallo,

ich nutze das aktuelle ISN Autoit Studio 1.14, danke für die geile Software.
Mit dem FormStudio2 habe ich aber so mein Problem mit der Funktion "Text aus Func"

Ich möchte zum Beispiel einen Start/Stop Button machen. Also Anfangs steht Start drauf
wenn man klickt soll Stop drauf stehen und wenn man Stop klickt eben wieder Start.

Also Button erstellt und "Text aus Func" ausgewählt. Und dann unter "Click Func"
meine erstellte Func ausgewählt _ButtonText.

Die Func habe ich abgespeckt, weil ich erstmal sehen wollte steht nun der Variablentext
im Button:

Code: Alles auswählen

Func _ButtonText ($Buttontext)
	$ButtonText =  "Start"
EndFunc
Starten der Anwendung und es steht "Mein Text" auf dem Button. Ok dann noch mal neu erstellt,
vorher die Standard Text "Mein Text" gelöscht, wieder "Text aus Func" dann unter "Click Func"
wieder _ButtonText ausgewählt. Starte ich nun kommt ein Error:

Code: Alles auswählen

".isf" (137) : ==> Error in expression.:
GUICtrlCreateButton(,740,140,100,30,-1,-1)
GUICtrlCreateButton(^ ERROR
"
Lasse ich mir den Code im FormStudio2 anzeigen zu dem Button steht da:

Code: Alles auswählen

GUICtrlCreateButton(,740,140,100,30,-1,-1)
GUICtrlSetOnEvent(-1,"_ButtonText")
Was mache ich hier falsch ? Oder geht mein Vorhaben mit dem FormStudio2 nicht?

Grüße vom Fragenden
Zuletzt geändert von Fragender am Fr 24. Mär 2023, 07:19, insgesamt 1-mal geändert.
Benutzeravatar
ISI360
Administrator
Beiträge: 322
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von ISI360 »

Hallo

Ich denke du hast hier eine kleinigkeit falsch verstanden.
"Text aus Func" bedeutet, dass der Rückgabewert (via return) aus einer Funktion als Text für das Control hergenommen wird.

Zum Beispiel, folgende Funktion gibt an das Control den Text "Beispiel" zurück: (Sofern bei Text die folgende Funktion eingetragen wird)

Code: Alles auswählen

Func _Text()
	return "Beispiel"
Endfunc
Tipp: "Text aus Func" ist eigentlich nur roher AutoIt Code. Du kannst im Textfeld also zb. auch einen String eingeben. (Zb. "Beispiel" (inkl. der ANführungszeichen)

Bei der Click Func verhält sich das ganze etwas anders. Hier wird einfach nur die angegebene Funktion nach dem Klicken auf den Button ausgeführt.
In dieser Funktion kannst du dann den Text des Buttons beim Klicken verändern lassen.



Zusammengefasst kannst du dein Vorhaben so lösen:
  • Im Control auf "Text aus Func" auswählen.
  • Im Text des Controls "Start" (Inkl. anführungszeichen) eingeben
  • Folgende Funktion im Code anlegen, und unter "Click Func" verlinken. (zb. _MeineFunktion() )

Code: Alles auswählen

Func _MeineFunktion() 
	Local $ButtonHandle = @GUI_CtrlId ;Get last clicked control handle
	if Guictrlread($ButtonHandle) = "Start" Then
 		 GUICtrlSetData($ButtonHandle, "Stop")
	Else
  		 GUICtrlSetData($ButtonHandle, "Start")
	Endif
Endfunc
Fragender
Beiträge: 5
Registriert: Do 23. Mär 2023, 08:09
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von Fragender »

Danke für die Antwort.

Habe das untere Beispiel mal 1zu1 umgesetzt:

Handle: $ButtonHandle
Textmodus ist ausgewählt : Text aus Func
Text/Data: 'Start' (habe "Start" eingegeben wird aber 'Start' draus)
Tooltip : nichts eingetragen
Click Func: _MeineFunktion (ausgewählt über den Button "...")

In meiner haupt.au3 dann entsprechend am Ende

Code: Alles auswählen

Func _MeineFunktion() 
	Local $ButtonHandle = @GUI_CtrlId ;Get last clicked control handle
	if Guictrlread($ButtonHandle) = "Start" Then
 		 GUICtrlSetData($ButtonHandle, "Stop")
	Else
  		 GUICtrlSetData($ButtonHandle, "Start")
	Endif
Endfunc
Starte ich dann mein Projekt steht Start auch ohne die Hochkommas im Button. Drücke ich Start,
bleibt Start im Button stehen.

Der Code aus dem Formstudio sieht so aus:

Code: Alles auswählen

Global $ButtonHandle = GUICtrlCreateButton('Start',740,160,100,30,-1,-1)
GUICtrlSetOnEvent(-1,"_MeineFunktion")
Sorry, das ich so aushole. Ich stehe scheinbar immer noch auf dem Schlauch.
Fragender
Beiträge: 5
Registriert: Do 23. Mär 2023, 08:09
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von Fragender »

Ich habe gerade folgendes getan:

In meinem "Menü" der Haupt.au3 für den neuen Button ergänzt.
Dort dann die Funktion hinterlegt.

Case $ButtonHandle
_MeineFunktion()

In der Funktion muss ich dann folgendes rausnehmen auskommentieren:

Code: Alles auswählen

Local $ButtonHandle = @GUI_CtrlId ;Get last clicked control handle
Ohne diese läuft das dann. Drückt man Start, steht Stop und umgekehrt.

Lasse ich die Zeile drin, startet die Anwendung, drückt man dann den Button folgt dieser Error:

Code: Alles auswählen

 : ==> Unknown macro.:
Local $ButtonHandle = @GUI_CtrlId
Local $ButtonHandle = ^ ERROR
Benutzeravatar
ISI360
Administrator
Beiträge: 322
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von ISI360 »

@GUI_CtrlId funktioniert nur wenn dein Projekt den "GUIOnEventMode" verwendet.
Ohne diesen funktionieren die Events (Wie on Click) im Formstudio nicht. Zum aktivieren reicht schon folgend Zeile am anfang deines Hauptskriptes:

Code: Alles auswählen

Opt("GUIOnEventMode", 1)
Ansonsten poste mal dein Hauptscript, macht das ganze etwas leichter.
Fragender
Beiträge: 5
Registriert: Do 23. Mär 2023, 08:09
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von Fragender »

In dem Projekt arbeite ich damit nicht. Im groben sieht das so aus:

Code: Alles auswählen

#include "Forms\Hauptseite.isf"
GUISetState(@SW_SHOW,$MeineGUI)
Die Buttons laufen über Schalter:

Code: Alles auswählen

While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
case $MenuItem1194
...
case ....
case ....
EndSwitch
WEnd
Wenn ich Opt("GUIOnEventMode", 1) setze dann reagiert die GUI "seltsam".

Danke für die viele Erleuchtung :-), was die GUI angeht habe ich da doch noch
ein paar Lücken.
Benutzeravatar
ISI360
Administrator
Beiträge: 322
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von ISI360 »

Ok wenn du nicht im GuiEventMode arbeitest, sondern mit GUIGetMsg, kannst du im Formstudio den Punkt "On Event Func" ignorieren. Der hat so keine Funktion.

Aber kein Problem, das ganze ist auch im GUIGetMsg-Mode lauffähig. Du musst die ganzen Button Events nur in die While schleife packen und @GUI_CtrlId in der von mir angeführten Funktion durch die "echten" handles des Controls ersetzen.
Fragender
Beiträge: 5
Registriert: Do 23. Mär 2023, 08:09
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von Fragender »

GuiEventMode vs. GUIGetMsg

Da habe ich bei meiner GUI wohl auf das falsche Pferd gesetzt und werde bei Gelegenheit auf den GuiEventMode wechseln. Ich sehe da beim GuiEventMode mehr Möglichkeiten, alleine wenn ich mehrere Sprachen möglich machen möchte, man braucht keinen Case mehr und somit keine Schleife, wird den Code übersichtlicher machen.

Danke für deine Hilfe und Erklärungen. Ich bin immer wieder erstaunt wie gut man mit AutoIT mit relativ geringem Aufwand auch heute noch unter Win11 echt gute Ergebnisse erzielt. Auch wenn die GUI etwas angestaubt ist, hier wäre es schön wenn der Entwickler von AutoIT etwas nachbessern würde. Die MetroGUI im ISN Studio habe ich zwar mal importiert und angesehen, ist dann aber auch eher dafür wenn man auf GuiEventMode setzt. Schade das das Formstudio2 nicht auch optisch die MetroGUI darstellt.
Benutzeravatar
ISI360
Administrator
Beiträge: 322
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: Probleme mit : Text aus Func im Formstudio 2

Beitrag von ISI360 »

Ich persönlich bevorzuge auch den GuiEventMode. Auch das ISN Studio selbst läuft in diesem Modus.
Ich bin einfach nicht der fan alles in eine rießige While Schleife zu packen. Aber es führen ja bekanntlich immer mehrere Wege zum Ziel.

Nichts zu danken, immer wieder gerne ;)
Antworten