aufgeblähtem v2.0 Gui-Skript die Luft ablassen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

355 113
Posts: 8
Joined: 15 Jun 2019, 04:12

aufgeblähtem v2.0 Gui-Skript die Luft ablassen

18 May 2024, 02:49

Hallo,
bei jedem Q-Tastendruck werden drei Guis erzeugt, etwaige alte vorher zerstört.
Ich habe zu diesem v1.1 Skript:

Code: Select all

#Requires AutoHotkey v1.1.33
q::RGB_Guis()
RGB_Guis() {
	Loop 3 {
		Gui %A_Index%: +AlwaysOnTop -DPIScale -Caption -SysMenu +ToolWindow	
		Gui %A_Index%: Color, % ["Red", "Green", "Blue"][A_Index]
		Random, Pos, 100, 500
		Gui %A_Index%: Show, x%Pos% y%Pos% w50 h50
}}
ein möglichst analoges v2.0 Skript geschrieben:

Code: Select all

#Requires AutoHotkey v2.0
q::RGB_Guis()
RGB_Guis() {
	Static RGB := Map()
	Loop RGB.Count
		RGB[A_Index].Destroy()
	Loop 3 {
		RGB[A_Index] := Gui("+AlwaysOnTop -DPIScale -Caption -SysMenu +ToolWindow")
		RGB[A_Index].BackColor := ["Red", "Green", "Blue"][A_Index]
		Pos := Random(100, 500)
		RGB[A_Index].Show("x" Pos " y" Pos " w50 h50") 
}}
In v2.0 benötigen die Guis nun anscheinend ein extra Map() und etwaige alte Guis müssen explizit zerstört werden.
Guis können also nicht mehr einfach überschrieben werden!
Geht das irgendwie weniger umständlich?
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: aufgeblähtem v2.0 Gui-Skript die Luft ablassen  Topic is solved

18 May 2024, 12:57

Moin,

dass das "Überschreiben" im Sinne von "Zerstören und neu Erstellen" auch in v1 so nicht funktioniert, kannst Du einfach testen:

Code: Select all

#Requires AutoHotkey v1.1.33
q::RGB_Guis()
RGB_Guis() {
	Loop 3 {
		Gui %A_Index%: +AlwaysOnTop -DPIScale -Caption -SysMenu +ToolWindow
		Gui %A_Index%: Add, Text, cWhite, MeinText!
		Gui %A_Index%: Color, % ["Red", "Green", "Blue"][A_Index]
		Random, Pos, 100, 500
		Gui %A_Index%: Show, x%Pos% y%Pos% w500 h500
}}
Für v2 eignet sich aber u.a. Folgendes:

Code: Select all

#Requires AutoHotkey v2.0
q::RGB_Guis()

RGB_Guis() {
   Static Guis := [Gui(), Gui(), Gui()]
   Loop 3 {
      Guis[A_Index].Opt("+AlwaysOnTop -DPIScale -Caption -SysMenu +ToolWindow")
      Guis[A_Index].BackColor := ["Red", "Green", "Blue"][A_Index]
      Pos := Random(100, 500)
      Guis[A_Index].Show("x" . Pos . " y" . Pos . " w50 h50")
   }
}
Edit1: Fehlende Klammer in Zeile 10 ergänzt!
Edit2: Unnützen Funktionsaufruf Format() in Zeile 10 entfernt! Damit ist auch die mit Edit1 zugefügte Klammer überflüssig!
Last edited by just me on 20 May 2024, 03:07, edited 2 times in total.
355 113
Posts: 8
Joined: 15 Jun 2019, 04:12

Re: aufgeblähtem v2.0 Gui-Skript die Luft ablassen

19 May 2024, 04:07

Verstehe!
In meinem v1 Skript wurden die drei Guis nur beim 1. Aufruf von RGB_Guis() erstellt.
Bei allen weiteren Aufrufen wurden nur ihre Optionen aktualisiert.
In deinem v2 Skript (in Zeile 10 fehlt eine Klammer!) passiert nun das gleiche.
Vielen Dank!
355 113
Posts: 8
Joined: 15 Jun 2019, 04:12

Re: aufgeblähtem v2.0 Gui-Skript die Luft ablassen

19 May 2024, 10:35

@justme
Welchen Nährwert hat eigentlich die Formatfunktion in der nachträglich editierten Zeile?

Code: Select all

Guis[A_Index].Show(Format("x" . Pos . " y" . Pos . " w50 h50"))
Ohne diese {Index:Format} formatiert die doch nicht.
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: aufgeblähtem v2.0 Gui-Skript die Luft ablassen

20 May 2024, 03:04

Moin,
355 113 wrote: Welchen Nährwert hat eigentlich die Formatfunktion in der nachträglich editierten Zeile?
Keinen! Ich hatte da rumgespielt und mich dann entschieden, Format doch nicht zu benutzen. Dabei habe ich aber anscheinend nur die Platzhalter ({}) und die letzte Klammer entfernt, den Funktionsnamen aber stehen lassen. Das ist mir bei der ersten Korrektur nicht aufgefallen. Deshalb habe ich jetzt nochmal korrigiert.

Wie man sieht, funktioniert die Funktion auch ohne Platzhalter, macht dann aber absolut keinen Sinn.

Danke für's Drüberschauen!

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: effel and 51 guests