ich wollte "unser Forum" mal wieder etwas ankurbeln.
Kurze Erläuterung, um was genau es hier geht:
Ich hab eine Funktion programmiert, die eine GUI am unteren rechten Bildschirmrand einblendet.
Die GUI zeigt die folgenden 3 Textzeilen an:
- Titel des Skripts (Parameter - variiert also)
- Anweisungen für den User (ebenfalls Parameter)
- Hinweis, wie das Skript wieder beendet wird (kein Parameter - fester Wert)
Das ist meine GUI-Funktion:
Code: Select all
Gui_mit_Effekt(modus, titel, anweisung) ; Gui ein bzw. ausblenden, Titel anzeigen, Anweisung anzeigen
{
if modus = 1 ; Wenn Gui angezeigt werden soll:
{
SoundPlay, %A_ScriptDir%\Guis\SoundAn.wav ; Akustisches Feedback beim Start
Gui +E0x20 -Caption +LastFound +ToolWindow +AlwaysOnTop ; Durchklickbar, rahmenlos, zuletzt gefunden, kein Taskleistensymbol, immer im Vordergrung
Gui, Add, Picture, x0 y0 w300 h200, %A_ScriptDir%\Guis\Hintergrund.jpg ; Hintergrund (Bild)
Gui, Font, s18, Arial ; Schriftgröße und Schriftart für Titel
Gui, Add, Text, BackgroundTrans x20 y10 w300 h30 cWhite, %titel% ; Titel des Skripts (Text)
Gui, Font, s14, Arial ; Schriftgröße und Schriftart für die weiteren Textzeilen
Gui, Add, Text, BackgroundTrans x20 y60 w300 h90 cWhite, %anweisung% ; Anweisungen an den User (Text)
Gui, Add, Text, BackgroundTrans x20 y180 w300 h30 cWhite, Zum Beenden ESC drücken ; Hinweis, wie das Skript beendet wird (Text)
Gui, Show, NoActivate x1600 y800 w300 h200, Gui-Information ; Gui anzeigen, Fokus nicht beeinflussen, Positionierung, Abmessung, Name (Gui ist noch unsichtbar)
fade := 1 ; Variable für Einblend-Effekt
Loop 25 ; 25x die Transparenz ändern
{
fade := fade + 9 ; Wert für Einblend-Effekt erhöhen
WinSet, Transparent, %fade% ; Transparenz des Fensters einstellen
if fade = 10 ; Beim ersten Durchgang:
{
WinShow, NoActivate, Gui-Info ; Gui namens Gui-Info anzeigen, Fokus nicht beeinflussen
}
Sleep, 10 ; Alle 10 ms etwas mehr einblenden
}
Sleep, 800 ; Pufferzeit (kann später entfernt werden)
}
if modus = 0 ; Wenn Gui ausgeblendet werden soll:
{
fade := 226 ; Variable für Ausblend-Effekt
Loop 25 ; 25x die Transparenz ändern
{
fade := fade - 9 ; Wert für Ausblend-Effekt erhöhen
WinSet, Transparent, %fade% ; Transparenz des Fensters einstellen
if fade = 217 ; Beim ersten Durchgang:
{
WinShow, NoActivate, Gui-Info ; Gui namens Gui-Info anzeigen, Fokus nicht beeinflussen
}
Sleep, 10 ; Alle 10 ms etwas mehr ausblenden
}
Gui, Destroy ; Gui zerstören
}
}
Code: Select all
^Numpad1::
Gui_mit_Effekt(1, "Das ist ein Test", "1)`nKlick auf die Endposition und fahre mit diesem Test fort") ; Gui einblenden, Titel, Beschreibung
Sleep, 2000
Gui_mit_Effekt(0, "", "") ; Gui ausblenden
return
Allerdings gibt es 3 Probleme, die ich derzeit nicht lösen kann:
1) Ausblenden über separaten Hotkey
Code: Select all
^Numpad2::
Gui_mit_Effekt(0, "", "") ; Gui ausblenden
return
Auch wenn es funktionell gesehen in Ordnung ist, verstehe ich nicht, warum der Ausblend-Effekt plötzlich nicht mehr umgesetzt wird.
Eigentlich ist es praktisch genau das gleiche wie oben, nur das es nach Sleep 800 erst weitergeht, wenn ich Strg+Num2 drücke (theoretisch).
2) Zentrieren des Textes
Ich habe es nicht hinbekommen, alle 3 Textzeilen zu zentrieren
Versuche ich es nur mit dem Titel, wird dieser nicht mehr angezeigt
Gui, Add, Text, BackgroundTrans Center w300 h30 cWhite, %titel% ; Titel des Skripts (Text) - NICHT SICHTBAR
Wenn ich es nur mit der 2. probiere (der Anweisung), klappt es halbwegs:
Gui, Add, Text, BackgroundTrans Center w300 h90 cWhite, %anweisung% ; Anweisung an User (Text) - KLAPPT
(Halbwegs, weil etwas vom Rand abgeschnitten wird)
Bei Nr 2 und 3 klappt es auch, aber hier wieder am Ende was abgeschnitten:
Gui, Add, Text, BackgroundTrans Center w300 h30 cWhite, Zum Beenden ESC drücken ; Fußbereich des Skripts (Text)
3) Ändern von Text (Anweisung)
Mit diesem Test-Skript habe ich es hinbekommen, sowohl den Text mit Hotkeys zu ändern
als ihn auch eintippen zu lassen (so als Effekt).
Es funktioniert gut:
Code: Select all
!Numpad3::
gui, add, text, w200 vText
gui, add, text,, Text mittels Numpad ändern!
gui, show, w220 h100
return
!Numpad4::
Gui_Text_Ändern("das ist ein text!", "text") ; Zeichenkette, Textfeld
return
!Numpad5::
Gui_Text_Ändern("jetzt kommt die nummer 2!", "text") ; Zeichenkette, Textfeld
return
Gui_Text_Ändern(zeichenkette, feld) ; Zeichenkette, Textfeld
{
zeichenkette = %zeichenkette% ; Diesen Text in der Gui anzeigen
länge := StrLen(zeichenkette) ; länge = Anzahl der Zeichen, die sich in zeichenkette befinden
Loop, %länge% ; Anzahl der Vorgänge = Anzahl der Zeichen
{
trimmen := länge - A_Index ; trimmen = länge - Nr. des Durchgangs (z.B. 15, 14, 13 etc.)
StringTrimRight, zeichenketteEinzeln, zeichenkette, trimmen ; In jedem Durchgang ein Zeichen weniger abschneiden
guiControl, text, %feld%, %zeichenketteEinzeln% ; Text in der Gui aktualisieren
Sleep, 20 ; Kurze Verzögerung
}
}
"Error: A control's variable must be global or static.
global Anweisung
oder
global vAnweisung
hat schon mal nicht funktioniert.
Gui, Add, Text, BackgroundTrans Center w300 h90 cWhite vAnweisung, %anweisung% ; Anweisung an User (Text)
Im Moment sieht es so hier aus:
(Natürlich ohne die vAnweisung-Variante, die ja bisher noch nicht funktioniert.)
Danke für jede Hilfe!
Grüße