GUI in Funktion

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

GUI in Funktion

11 Feb 2020, 03:29

Hallo,

ich möchte ein GUI in einer Funktion verwenden. DAbei habe ich jetzt aber das Problem, dass der return-Befehl, der häufig nach dem Erstellen des GUI verwendet wird, um die Benutzereingabe abzuwarten, ja die funktion verlässt.

Gibt es eine Möglichkeit diesen Halbwegs elegant zu ersetzen?
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: GUI in Funktion

11 Feb 2020, 04:43

Moin,

eine 'Standardmethode' ist z.B.

Code: Select all

MyFunc(...) {
   ...
   Gui, Add, ...
   Gui, Show, ...
   Gui, +LastFound
   WinWaitActive
   WinWaitClose
   Return Result
   ...
}
Dafür muss das GUI allerdings in einer zugehörigen Subroutine mit Gui, Destroy zerstört werden.

Je nachdem, wie der reale Ablauf sein soll, sind auch (etwas) andere Lösungen denkbar.
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: GUI in Funktion

11 Feb 2020, 08:48

Hallo,

das Gui wird erstellt, mit ein bissl text und ein paar Radioboxen und einem OK-Button, und nachdem es angezeigt wird soll es warten bis man ok drückt (und natürlich melden welche Radiobox aktiv war).
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: GUI in Funktion

12 Feb 2020, 04:13

Moin,

gibt es einen besonderen Grund dafür, dass Du das in einer Funktion verpacken willst? Das 'Gui-in-a-function' Konzept hat einige unangenehme Nebenwirkungen, die ich mir gern erspare.

Wenn Du das brauchst, stell doch mal ein 'konventionelles' Beispiel dafür ein, was Dein Gui-Code konkret tun soll.
toralf
Posts: 868
Joined: 27 Apr 2014, 21:08
Location: Germany

Re: GUI in Funktion

12 Feb 2020, 05:18

https://www.autohotkey.com/boards/viewtopic.php?f=76&t=68912

In dem o.g. Thema haben wir eine GUI in eine Klasse verpackt. Evtl. Hilft Dir das ja weiter.
ciao
toralf
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: GUI in Funktion

13 Feb 2020, 01:03

just me wrote:
12 Feb 2020, 04:13
Moin,

gibt es einen besonderen Grund dafür, dass Du das in einer Funktion verpacken willst? Das 'Gui-in-a-function' Konzept hat einige unangenehme Nebenwirkungen, die ich mir gern erspare.

Wenn Du das brauchst, stell doch mal ein 'konventionelles' Beispiel dafür ein, was Dein Gui-Code konkret tun soll.

Hallo, der Grund ist einfach der, dass ich sehr gern versuche alles in eine Funktion zu packen, damit man es relativ einfach kopieren und woanders einfügen kann.
Ich arbeite viel mit Datenbankabfragen, auslesen von Excel-Dateien, vergleichen bzw. Verrechnen von werten und so weiter. Bei mir ist alles in Funktionen.
Ich hab zum Beispiel die Funktion excelincsv(...) in der eine Excel-Datei geöffnet werden und jede Seite in einer eigenen .csv mit einem bestimmten Namensschema an einen bestimmten Ort gespeichert wird. Diese funktion ist in Bibliothek, sodass ich sie mit jedem Script laden und ausführen kann, und wenn ich einen Bug finde dann muss ich ihn nur in der Bibliothek fixen.

So sieht mein Code bis jetzt aus:

Code: Select all

guierstellen(auftragsnummer,ab,links)
{
Gui, New , Border, Auftrag %auftragsnummer%
Loop, Parse, links, "`n"
{
If A_Index = 1
	Gui, Add, Radio, vMeinRadio, %A_LoopField%
If A_Index > 1
	Gui, Add, Radio,, %A_LoopField%
}
Gui, Add, Button, Default, OK
Gui, Show

return


ButtonOK:
MsgBox, %links%
Gui, Submit
return MeinRadio
}
GuiClose:
GuiEscape:
ExitApp

die Variable links ist eine Dateiliste, aus der ich eine Datei zur Weiterverarbeitung auswählen will (Position der Datei wird dann per return zurückgegeben.)
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: GUI in Funktion

13 Feb 2020, 06:23

Moin,

probier das mal:

Code: Select all

#NoEnv
Auftragsnummer := "123456789"
Links := "123`n456`n789`nABC`nDEF"
Link := AuswahlGui(Auftragsnummer, 0, Links)
MsgBox, Auswahl = %Link%
ExitApp

AuswahlGui(Auftragsnummer, ab, Links)
{
   Static MeinRadio ; Gui Variablen müssen statisch oder global sein!
   MeinRadio := 0
   Gui, AuswahlGui: +Border +LabelAuswahlGui +LastFound
   Loop, Parse, links, "`n"
   {
      Options := (A_Index = 1) ? "vMeinRadio" : ""
      Gui, AuswahlGui:Add, Radio, %Options%, %A_LoopField%
   }
   Gui, AuswahlGui:Add, Button, Default gAuswahlGuiOK, OK
   Gui, AuswahlGui:Show, w300, Auftrag %Auftragsnummer%
   WinWaitActive
   WinWaitCLose
   Return MeinRadio
   AuswahlGuiOK:
      Gui, Submit
      ; hier könnte man noch prüfen, ob eine Auswahl getroffen wurde
   AuswahlGuiClose:
   AuswahlGuiEscape:
      Gui, Destroy
   Return
}

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 39 guests