Farbig beschriftete Buttons

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Farbig beschriftete Buttons

17 Apr 2018, 10:47

Hallo zusammen,
ich bin eigentlich hier ein Foren-Veteran, musste mich nun aber wegen der Änderung der Forensoftware neu registrieren. Ich nutze auch noch AHK 1.0 (genauer V 1.0.48.05), konnte aber nicht feststellen, dass ich mit einer neueren Version irgendwelche Vorteile für mein Windows 7 System erziele. Von daher hoffe ich, dass ich auch mit meiner älteren Version hier mitreden kann und Hilfe bekomme.

Hier also meine Frage:
Ich möchte in einer GUI zwei Buttons farbig beschriften. Genauer gesagt will ich, dass sie, wenn sie den Fokus haben, grün statt schwarz beschriftet sind.
Bei Textzeilen geht dieses Umfärben über

Code: Select all

GUI, FONT CLIME
GUICONTROL, FONT, CONTROL3
Bei Buttons komme ich so nicht weiter.

Vielleicht kann man als Workaround einen farbigen Text direkt über einen Button schreiben? Oder sieht jemand eine elegantere Variante?

Viele Grüße, Halweg
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Farbig beschriftete Buttons

17 Apr 2018, 11:42

Es gibt standard Lösungen aber die sind nicht kompatibel mit deiner Version - ich habe aber auch ehrlich gesagt keine Lust etwas für eine veraltete Version zu schreiben, da ich nicht mehr genau weiß was ich machen darf und was nicht.
Ich würde dir empfehlen upzudaten.
Recommends AHK Studio
just me
Posts: 9419
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Farbig beschriftete Buttons

18 Apr 2018, 02:05

Moin halweg,

schön, dass Du wieder da bist. Die Schriftfarbe von Buttons ist ein echtes Problem, besonders dann, wenn Du nicht das 'klassische' Windows NT Design benutzt. Und es ist tatsächlich schwer, sich wieder in der 'eingeschränkten' Welt von AHK 1.0 zurechtzufinden, wenn man längere Zeit die Vorteile von AHK 1.1 genossen und verinnerlicht hat.

Die Lösung mit dem Textcontrol über dem Button ist auch nicht ganz einfach, weil die Buttons auf die Maus reagieren und sich neu zeichnen. Dabei 'verschlucken' sie das Textcontrol und man muss sehen, dass man es schnellstmöglich wieder nach oben holt. Soweit ich mich erinnere, sieht das dann oft recht 'unprofessionell' aus.

Ich könnte versuchen, eines meiner Skripte zum 'Ändern' der Textfarbe von Buttons zurückzudrehen. Wegen der Einschränkungen von AHK 1.0 wäre das dann aber eine rein 'hartcodierte' Lösung und Du verlierst die 'wundershöne' Animation beim Wechsel des Buttonstatus.

Generell würde ich wie auch nnnik empfehlen, mal (zumindest) probehalber auf AHK 1.1 32 Bit (zur Not ANSI) zu wechseln. Die Auswahl an möglichen Lösungen und aktiven Supportern wäre dann deutlich größer. Solltest Du Probleme mit Deinen Skripten bekommen, können wir Dir wahrscheinlich helfen.

Grüße,
just me (denick)
halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Re: Farbig beschriftete Buttons

18 Apr 2018, 09:31

Danke für die schnelle Hilfe.
Ja ich verstehe, das ich mit meiner alten Version hier ein bisschen ein Außenseiter bin, vielleicht sollte ich das kurz erläutern:
1. Immer wenn ich irgendwo an die Grenzen von AHK 1.0 stoße, schaue ich in die 1.1 Hilfe, ob sich da irgendwas an dieser Stelle verbessert hat. Bisher konnte ich solche Änderungen nicht feststellen. Von daher bin ich etwas verwundert, wenn ihr hier schreibt "in die alte Version zurückdenken", das klingt so, als ob irgendwelche grundlegenden Änderungen an mir vorübergegangen sind. Gibt es irgendwo eine Übersicht über die Verbesserungen von 1.1 gegenüber 1.0? Der Punkt "Skript-Kompatibilität" in der Hilfe nennt ja nur potentielle Umstiegsprobleme, nicht die Neuerungen.
2. Ich kitzle an einigen Stellen AHK recht tief aus. Neben dll-Calls sind das auch komplexe Multithread-Input Zusammenhänge und kritische getimte Abläufe. Auch wenn ich also Syntax-formal kaum Umstellungsprobleme haben sollte, könnte der Teufel im Detail stecken. Aber richtig, das könnte man testen.
3. Ich nutze als Editor PSPad mit individuell angepassten Syntax-Highlighter Dateien, so dass ich z. B. scriptspezifisch Variablen registrieren und hervorheben kann, kontextsensitive Hilfe usw. Momentan bin ich mir nicht sicher, welchen Aufwand hier eine Umstellung bringen würde.

Es funktioniert eigentlich alles perfekt mit AHK 1.0, aber vielleicht gibt es ja doch Gründe für einen Umstieg. Deshalb ist mir auch jede Hilfe aus der 1.1 Sicht willkommen.

Hinsichtlich der Button Beschriftung: Ich habe verstanden, dass Buttons nicht transparent sind und sich bei Fokus neu zeichnen, was zu Problemen mit einer überlagernden farbigen Schrift führen könnte. Danke just me, du sparst mir hier ein wahrscheinlich wenig erfolgreiches Testscript. Die Alternative wäre dann wohl, über ein auswechselbares Picture als Control zu gehen oder eben einfach (per Groupbox?) einen Rahmen um die farbige Schrift zu ziehen.
Die Buttons dienen ja vor allem der Optik, werden fast nie per Maus bedient, nur per Taste.



Grüße, Halweg
just me
Posts: 9419
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Farbig beschriftete Buttons

19 Apr 2018, 07:21

Moin,

es ist richtig, dass man ein gut bekanntes und laufendes System nicht unbedingt updaten muss, solange man nicht an Grenzen stößt, die nur eine neuere Version überwinden kann. Im Gegensatz zu Dir ist dieses 'gut bekannte und laufende System' für fast alle hier aber AHK 1.1. Man kann trefflich darüber streiten, ob AHK 1.1 für alle Aufgaben 'besser' geeignet ist, als AHK 1.0. Es gibt aber bestimmte 'Features', auf die man - wenn man sich einmal daran gewöhnt hat, sie zu nutzen - nicht mehr verzichten will.

Ein 'Schlüsselfeature' für mich sind die assoziativen Arrays, die die Basis aller benutzerdefinierten Arrays, Objekte und Klassen bilden. Einmal 'verinnerlicht', kann man darin unter einem Variablennamen Werte und auch Funktionen ablegen, die 'einfach' auswertbar bzw. aufrufbar sind. Man kann das in AHK 1.0 zum Teil mit länglichen Strings mit Feld- und Zeilentrennern und/oder den berühmten Pseudoarrays nachbilden. Das ist aber längst nicht so 'griffig und elegant'. Das Fehlen dieser Objekte ist wahrscheinlich ein Hauptgrund dafür, dass man sich schwer tut, ein AHK 1.1 SKript nach AHK 1.0 zurück zu übersetzen. Es gibt aber noch weitere.

Ich werde trotzdem mal versuchen, ein AHK 1.0 Script für farbigen Buttontext zu schreiben. Es wird aber weniger flexibel ausfallen als mein AHK 1.1 Original. Für ein paar Buttons mit einheitlichen Textfarben sollte es trotzdem reichen.

Bis dann!

just me
halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Re: Farbig beschriftete Buttons

19 Apr 2018, 08:23

Danke just me für die Rückmeldung. Ja, das Array-Handling mit diesen komplexen Variablennamen war unter 1.0 gewöhnungsbedürftig, andererseits bin ich froh, dass das bei 1.1 noch unterstützt wird, denn so was in einem großen Skript (bei mir "Fensterpflege") umzuschreiben ist schon heftig.
Hab mir das Array-Konzept unter 1.1 gerade mal angeschaut, schön, dass du mich darauf gestoßen hast. Da stecken tatsächlich mehr Möglichkeiten drin, hübsch finde ich auch, dass Arrayelemente über eckige und nicht runde Klammern (wie Funktionen) adressiert werden. Kennst du weitere solche grundlegende Neuerungen?
Es scheint ja inzwischen eine gute deutsche Hilfe zu geben, ich bin mir nur nicht sicher, ob die auch künftig mitgepflegt wird.

Was das mit den Buttons angeht:
Ich habe hier ein Tastatur-Skript, welches, wenn ich eine meiner Sondertasten drücke, ein Menü aufklappen lässt. Mit jeden erneuten Tastendruck wird ein anderer Befehl ausgewählt und Nr. 5 ist immer "Programmieren", Nr. 6 immer "Abbrechen". Anbei ein Bildbeispiel.
menue.PNG
menue.PNG (9.59 KiB) Viewed 3417 times
Da sehen Buttons hübscher aus als als Textzeilen. Momentan wird der jeweils aktuelle Befehl unterstrichen (das geht auch bei Buttons), ich weiß aber aus meinen anderen Menüs, dass eine farbliche Hervorhebung deutlich besser aussieht. Deshalb die Frage.

Allerdings soll das Menü auch schnell da sein, der Code übersichtlich; im Zweifelsfall verzichte ich lieber auf Buttons. Von daher besteht die Gefahr, dass dein Code mir nur begrenzt hilft, die Idee wäre allerdings interessant, gern auch als AHK 1.1 Version.


Grüße, Halweg

PS: Ist das Freischalten der Beiträge hier jetzt Standard oder nur, weil ich "neu" bin.

PS2: Ich habe inzwischen den Hilfepunkt "Neue Features von AutoHotkey_L" gefunden, das dürfte mein Frage oben beantworten.
User avatar
jNizM
Posts: 3183
Joined: 30 Sep 2013, 01:33
Contact:

Re: Farbig beschriftete Buttons

19 Apr 2018, 08:36

[AHK] v2.0.5 | [WIN] 11 Pro (Version 22H2) | [GitHub] Profile
just me
Posts: 9419
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Farbig beschriftete Buttons

20 Apr 2018, 04:44

Moin halweg,

wie gefällt Dir das als 'preiswerte' Alternative?

Code: Select all

#NoEnv
SetBatchLines, -1

CtlColorStatic_HWND := 0
Gui, Add, Text, xm w200 h20 vTX1 +hwndHTX1 gSetColor +0x200, % "  Aktion 1"
Gui, Add, Text, xm w200 h20 vTX2 +hwndHTX2 gSetColor +0x200, % "  Aktion 2"
Gui, Add, Text, xm w200 h20 vTX3 +hwndHTX3 gSetColor +0x200, % "  Aktion 3"
Gui, Add, Text, xm w200 h20 vTX4 +hwndHTX4 gSetColor +0x200, % "  Aktion 4"
Gui, Add, Text, xm w200 h20 vTX5 +hwndHTX5 gSetColor +0x200, % "  Aktion 5"
Gui, Add, Text, xm w200 h20 vTX6 +hwndHTX6 gSetColor +0x200, % "  Aktion 6"
Gui, Show, , Menu
OnMessage(0x0138, "CtlColorStatic")
CtlColorStatic_HWND := HTX1
WinSet, Redraw, , ahk_id %HTX1%
Return

GuiClose:
ExitApp

SetColor:
If (CtlColorStatic_HWND) {
   Prev_HWND := CtlColorStatic_HWND
   CtlColorStatic_HWND := 0
   WinSet, Redraw, , ahk_id %Prev_HWND%
}
IX := SubStr(A_GuiControl, 3)
CtlColorStatic_HWND := HTX%IX%
WinSet, Redraw, , ahk_id %CtlColorStatic_HWND%
Return

CtlColorStatic(wParam, lParam) {
   Static TxtColor := 0xFFFFFF ; BGR - weiß
   Static BkgColor := 0x404040 ; BGR - dunkelgrau
   Static BkgBrush := 0
   Global CtlColorStatic_HWND
   If (BkgBrush = 0)
      BkgBrush := DllCall("Gdi32.dll\CreateSolidBrush", "UInt", BkgColor, "UInt")
   If (lParam = CtlColorStatic_HWND) {
      DllCall("Gdi32.dll\SetTextColor", "UInt", wParam, "UInt", TxtColor)
      DllCall("Gdi32.dll\SetBkColor", "UInt", wParam, "UInt", BkgColor)
      Return BkgBrush
   }
}
Ich habe das mit AHK 1.0 getestet. Du musst im Beispiel die Texte anklicken.
halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Re: Farbig beschriftete Buttons

20 Apr 2018, 06:10

Also wenn ich es richtig verstehe, erzeugt dein Script die Texte und über das Label SetColor kann ich deren Farbe beim Anklicken einstellen.
Danke für deine Mühe, aber ich glaube, das ist nicht ganz, was ich wollte.

Zum einen : Texte farbig machen ist für mich kein Problem, mir ging es um Buttons.

Zum anderen: Die Menüpunkte (inklusive der beiden Buttons darunter) werden bei mir in der Regel nicht angeklickt, sie werden durch mehrmaliges Tippen des Hotkeys nacheinander hervorgehoben (momentan unterstreichen, künftig vielleicht farbig). Ich sollte die Bedienung vielleicht anhand des obigen Beispiels erläutern:
1x Scantaste und 1s warten: Scannen Modus "schwarzweis_300_d_ocr" startet
1x Scantaste und Taste p: Paperport startet
2x Scantaste und 1s warten: Scannen Modus "grau_300_d_ocr" startet
5x Scantaste und 1s warten: Scripteditor wird geöffnet und Sprung zur Belegung der Scantaste.
usw.
Diese Menü-GUI dient also nicht der Interaktion sondern der Visualisierung, welche Befehle es gibt und welche ich gerade auswähle. Eine Bedienung mit Maus, ENTER-, TAB- oder Pfeiltaste ist momentan nicht implementiert und würde der Idee einer schnellen Bedienung im Wege stehen.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Farbig beschriftete Buttons

20 Apr 2018, 15:00

Moin,
zur echtzeitänderung von buttons habe ich diese in der vergangenheit durch per klick wechselnde grafiken ersetzt.
just me
Posts: 9419
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Farbig beschriftete Buttons

21 Apr 2018, 04:00

Moin halweg,

es ist nicht böse gemeint, aber ich bin der Ansischt, dass das in menue.png dargestellte 'Menü' keinen 'Design Award' bekommen wird. Eigentlich willst Du das doch möglichst 'blind' mit der Tastatur steuern. Die optische Rückmeldung für die aktuell gewählte Aktion ist dabei hilfreich. Warum sollen es aber für die letzten beiden Aktionen unbedingt Buttons sein? Ich kann da keinen optischen und bisher auch keinen funktionalen Vorteil erkennen.
halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Re: Farbig beschriftete Buttons

21 Apr 2018, 04:52

Hallo auch an BoBo, schön mal wieder von dir zu hören und danke für den Tipp.

Was das Menü angeht - bis vor kurzem waren das noch Tooltips, die waren eben klein und bei den langen Texten kaum übersichtlich. Es geht hier nicht um eine Taste und ein spezielles Menü sondern um ca. 20 verschiedene derartige Menüs, die auf je einer Taste liegen und automatisch aufgebaut werden. Aufgerufen werden sie ca. 2mal je Minute, sichtbar sind sie meist unter 1 s. Ich wurde älter, die Augen schwächer und die Merkfähigkeit für die "seltenen" Befehle schlechter, und so musste eine GUI mit großen Texten und besserer Hervorhebung her. Die GUI passt ja jetzt schon die Schriftgröße der Textmenge an.

Kurzum, für dieses Menü ist mir das beste gerade gut genug.

Aus anderen GUIs weiß ich, dass Farbe zur Hervorhebung der Auswahl sehr intuitiv ist, auch besser als inverse oder fett hervorgehobene Darstellung. Und ich weiß, das ich mit Buttons statt Textzeilen diese beiden "besonderen" Menüpunkte gut vom restlichen Text abheben kann. Eine weitere Überlegung ist übrigens, die Unterbefehle als eigenständige, aufklappende Menüs zu basteln, ich weiß aber nicht, ob das wirklich übersichtlicher wird. Aber ja, es gibt noch Reserven.

Insofern nochmal danke fürs Eindenken, ich werde die mit Eurer Hilfe gefundenen Varianten in nächster Zeit testen.
halweg
Posts: 93
Joined: 17 Apr 2018, 10:34
Location: Dresden

Re: Farbig beschriftete Buttons

23 Apr 2018, 10:00

So, ich bin jetzt also doch dem Tipp von just me gefolgt, habe alles als Textzeile gestaltet. Habe aber +BORDER als Option gefunden, zusammen mit +0x1, was einen Rahmen um den Text zeichnet und ihn ein bisschen wie einen Button aussehen lässt.
Das Menü sieht dann so wie hier im Bild aus, alles lässt sich grün markieren und das sollte vorerst genügen.
menue_gruen.PNG
menue_gruen.PNG (24.2 KiB) Viewed 3858 times
Hier noch der Code dazu:

Code: Select all

...
  ; 4.1 Menüüberschrift
  GUI, 10:+ALWAYSONTOP -CAPTION +0x400000                ; "0x400000" - Dialogfenster mit Schattierung usw.
  GUI, 10:FONT,S14 WBOLD                                 ; große Schrift, fett für Überschrift einstellen
  GUI, 10:ADD, Text, X3 Y0,%Hotkeys_friendly_name%       ; Menüüberschrift
  
  ; 4.2 Menügröße ermitteln
  max_tasklaenge := MAX(STRLEN(task_1),STRLEN(task_2),STRLEN(task_3),STRLEN(task_4))
  font_menuezeile = 12
  IFGREATER, max_tasklaenge,150,SETENV, font_menuezeile, 11
  IFGREATER, max_tasklaenge,210,SETENV, font_menuezeile, 10
  IFGREATER, max_tasklaenge,280,SETENV, font_menuezeile, 9
  GUI, 10:FONT,S%font_menuezeile% NORM       
  
  ; 4.3 Menüzeilen schreiben
  LOOP,4
    {
    STRINGREPLACE, menuezeilentext,task_%A_INDEX%,|,% "  |  ",ALL
    GUI, 10:ADD, TEXT, X3 Y+0 Vzeile%A_INDEX%,%menuezeilentext%                 ; Menüpunkt eintragen
    }
  
  ; 4.4 Buttons zeichnen  
  ;GUI, 10:ADD, BUTTON, X3 Y+0 W200
  GUI, 10:ADD, TEXT, XP   Y+10 W130 H24 +BORDER +0x1 Vzeile5,Programmieren      ; +BORDER - Rahmen um Text ; 0x1 - Text in Rahmen zentrieren 
  GUI, 10:ADD, TEXT, X+20 YP   W80  H24 +BORDER +0x1 Vzeile6,Abbruch

  ; 4.5 Menü anzeigen
  GUI, 10:SHOW, X50 Y50,Befehlsmenü
...

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 1 guest