Button: 1. -ändern der Farbe- und 2. -Name des Button per Tastatur (Hotkey) erreichen-.

  • Hallo,

    ich möchte mein kleines Programm für stark sehbehinderte und blinde Menschen optimieren. Dazu sind Veränderungen am Button notwendig.

    Wenn ich standardmäßig mit Koda einen Button erstelle, sieht dieser mit nachstehendem Code, horizontal zweigeteilt (heller und dunkler) aus. Ferner wird beim andocken mit der Maus der Button farblich blau abgehoben.

    Code
    ;Button von Koda mit Beispiel von Bazii
    $taskschd = GUICtrlCreateButton("Aufgabenplanung", 24, 40, 129, 49) ;erstellt den Button
    GUICtrlSetTip(-1, "Zeitgesteuerte Aufgaben prüfen oder planen") ;erstellt den Tip bei andocken auf den Button
    GUICtrlSetCursor (-1, 0) ;zeigt eine Hand beim andocken oder darüberfahren


    Dasselbe möchte ich auch, allerdings mit einer helleren Buttonfarbe.Darum fügte ich Zeile 5. ein

    Code
    ;Button von Koda Farbe verändert mit Beispiel von Bazii
    $taskschd = GUICtrlCreateButton("Aufgabenplanung", 24, 40, 129, 49) ;erstellt den Button
    GUICtrlSetTip(-1, "Zeitgesteuerte Aufgaben prüfen oder planen") ;erstellt den Tip bei andocken auf den Button
    GUICtrlSetCursor (-1, 0) ;zeigt eine Hand beim andocken oder darüberfahren
    GUICtrlSetBkColor(-1, 0xF2F2E5); zeigt den Button in der Beispiel-Farbe, die ich möchte


    Jetzt passiert es aber. Nachdem "GUICtrlSetBkColor(-1, 0xF2F2E5)" eingefügt ist, wird der Button nicht mehr horizontal zweigeteilt, sondern nur noch einfarbig (damit könnte ich gut leben) angezeigt.
    Beim andocken mit der Maus, wird der Button farblich nicht mehr blau abgehoben und das ist schade. Das würde ich gerne beibehalten.

    Meine erste Frage:
    Wie schaffe ich es, den Button mit einer anderen Farbe einzufärben und bei andocken (oder überfahren) mit der Maus, trotzdem farblich abzuheben (und ggf. horizontal im Button farblich zu unterscheiden)?


    Frage 2:
    Meine Buttons sind in der GUI mit TAB nacheinander alle erreichbar. Wie schaffe ich es, dass z. B. mit Drücken der Taste "T" (oder mit Tastenkombination) Alt+T z. B. der Tab "Taskmanager" erreichbar ist?

    • Offizieller Beitrag

    Hallo,

    ist das wirklich sinnvoll?
    Die Leute mit Sehbehinderung passen sich ihr Windows-Design so an wie Sie es brauchen. Da wäre es eher kontraproduktiv wenn ich in meinen Programmen ein Design verwende welches das Windows-Design wieder aushebelt!

  • Hallo bernd670,

    es ist möglich, dass es sinnvoll wäre. Es kommt auf die Art, der Seh-Behinderung an. Bin jetzt aber schon etwas schlauer, nachdem ich ein Posting von BugFix gelesen habe.
    Schade, dass die vielen Beiträge in diesem Thread untergehen. FAQ - Häufig gestellte Fragen . Darin steht:

    Code
    Was nicht geht: Verändern der Buttoneigenschaften (Beschriftung, Farbe, Style) zur Laufzeit.

    Jedoch verstehe ich das nicht ganz. Ist jetzt aber auch nicht soooooo wichtig. Wenn es mit wenig Aufwand machbar wäre, würde ich zumindest mal wissen wie das geht wenn ich es mal brauchen kann, sollte sich ein Benutzer dafür interessieren.

    Bräuchte noch Hilfe zu Frage 2. Da Blinde wohl (fast) ausschließlich die Tastatur nutzen, wäre es mir wichtig zu wissen, wie man nach dem Start des Programms es schafft, mit der Taste "t" auf den Tab "Taskmanager" zu springen. Mit der Hilfe komme ich alleine nicht weiter.

    • Offizieller Beitrag

    Wenn du einen Button mit eigenen Eigenschaften haben möchtest, kannst du diesen aus einem Label nachbilden. Da hast du dann recht große Spielmöglichkeiten.
    Ich poste hier mal ein altes Beispielskript mit lauter farbigen Button, die aus Labeln erstellt werden, sich aber auch optisch wie Button verhalten.
    Vielleicht gibt dir das einen Ansatz.

    Spoiler anzeigen

    Edit: Sehe gerade, dass du dich auf diesen Post bezogen hast. Übrigens ist die Aussage von 2007. Damals gab es noch kein GUICtrlSetColor für Button.
    Diese halbschattierte Farbdarstellung hat aber mit der Farbe selbst nichts zu tun, das ist ein reiner Windows-Effekt. Ich hab es noch nicht ausgetestet, aber vielleicht ist dieser Effekt für die Standard-Windows-Farbpalette verfügbar.
    Falls das nicht klappt, bleibt die Möglichkeit einen Button aus zwei Labeln abzubilden. das untere etwas dunkler als das obere. Da drüber ein transparentes Label als eigentlichen Button.

  • Hallo BugFix,

    vielen Dank für den erweiterten Code zu Deinem Thread im FAQ: https://autoit.de/index.php/Thre…13584#post13584
    Ein sehr guter Ansatz bis hin zur Vervollständigung ist dies auf jeden Fall. Es gibt in Autoit so viele Möglichkeiten, gewisse Dinge zu verwirklichen.

    [offtopic]Da zeigt sich eben doch, was einen Entwickler von einem Anwender unterscheidet. Und ich bin ein Anwender, der gerne Entwickler wäre ;( , es aber wahrscheinlich nie sein wird. Dazu fehlen mir mit meinen 47 Jahren als Gärtner einfach die Hintergründe und die Gehirnwindungen. Macht aber nichts :rolleyes: . Zum lernen ist es nie zu spät.[/offtopic]

    • Offizieller Beitrag

    Meine Buttons sind in der GUI mit TAB nacheinander alle erreichbar. Wie schaffe ich es, dass z. B. mit Drücken der Taste "T" (oder mit Tastenkombination) Alt+T z. B. der Tab "Taskmanager" erreichbar ist?

    Hallo,

    was meinst du mit dem Tab "Taskmanager" ist das ein Feld in deiner Anwendung, ein Tab in Tab-Control oder soll etwa gleich der Taskmanager starten?

    Vielleicht hast du ja schon ein kleines Demo in das man es integrieren kann!

  • Hallo bernd670,

    es ist mir schon fast peinlich, immer den selben Code zu posten, da ich in der GUI mehr als nur 2 Buttons verankert habe. Ich traue mich aber nicht, den kompletten Code hier zu posten, da ich nicht alles offen legen möchte. Ich habe in meinem Programm quasi nur Buttons mit dem Verweis auf @comspec funktionen drin. Das Programm ist quasi ein Toolstarter für windowseigene, administrative Werkzeuge, welche durch sehbehinderte oder blinde Menschen, als auch für faule Kerle wie mich auf einen Klick hin gut zu erreichen sind.

    Diesmal ist also nicht mehr die Animation im Code wichtig, denn die Animationen lasse ich bei der Version für Sehbehinderte weg, sondern wenn ich bei geöffneter Programmoberfläche z. B. ein "m" auf der Tastatur drücke, soll der Tab gleich zum Button "MAC-Adresse ermitteln" springen. Oder wenn ich ein "I" auf der Tastatur drücke, der Tab zum Button "IP-Config" springt. Am besten wäre eine Funktion einer einfachen inkrementellen Suchfunktion, wie z. B. in einem Browser, welche dann, wenn ich z. B. "Systemi" eintippe, auf dem Button "Systeminfo" landet. Aber ich weiß noch nicht einmal ob das geht oder nicht. Prima wäre es schon, wenn ein eingegebenes "m" auf der gleich zum Button "MAC-Adresse ermitteln" springen würde.

    • Offizieller Beitrag

    Für Tastenkombinationen kannst du doch z. B. das Ampersand-Zeichen benutzen, wenn du bei der Definition eines Buttons, geht natürlich auch mit anderen Ctrls, folgendes schreibst.

    [autoit]

    $mac = GUICtrlCreateButton("&MAC-Adresse ermitteln", 156, 354, 129, 49)

    [/autoit]

    Kannst du mit Alt+M den Button drücken, genau wie du das von Windows-Anwendungen gewohnt bist. Die Hotkey-Zeichen werden beim Drücken auf Alt unterstrichen dargestellt!

  • Ich werd' verrückt. :thumbup::D:thumbup:

    Vielen, vielen Dank. Somit ist mir jetzt von Dir und UEZ, BugFiX und all den anderen hier im Forum auf jeden Fall wieder aufs erste, zweite, dritte und vierte Mal geholfen.
    Ich weiß gar nicht wie mir geschieht. Klasse Forum mit kompetenten und hilfsbereiten Menschen.

  • Hallo bernd670,

    Sorry, ich muss noch mal nachfragen. Jetzt startet ja die Anwendung "&MAC-Adresse ermitteln" schon, wenn ich nur ein "m" eingebe. Ohne die "Alt-Taste". Soweit sicher kein Nachteil. Jetzt habe ich aber mehrere Buttons eingebaut, die mit dem Buchstaben "S" beginnen. Gibt es auch einen Befehl oder ein Zeichen, dass verwendet werden kann damit nur der Button angesteuert aber nicht aktiviert wird. Also wenn ein Button mit "S" beginnt oder noch besser, dass der Button nach unzweifelhafte Eingabe erst nach 3 oder mehr Buchstaben aktiv wird? Geht das denn?

    Also, ich meine das, "wenn ich "Systemi" eintippe, der Button "Systeminfo"aktiviert oder angesteuert wird" und nicht schon bei "S"

    • Offizieller Beitrag

    Hallo,

    kann es sein das du die Einrastfunktion aktiviert hast? Die Tastenkombinationen mit & müssen nämlich normal immer mit Alt+<Taste> aktiviert werden.

    Das was du möchtest ist schon möglich, aber erfordert etwas mehr Programmieraufwand und lässt sich nicht eben so aus dem Ärmel schütteln. Man könnte zum Beispiel ein verstecktes Inputfeld definieren das mit einer bestimmen Tastenkombination aktivert wird. Den Text den man dann in das Feld schreibt, auswerten und den Focus (oder den Mauszeiger) auf den entsprechenden Button setzen.

  • Hallo bernd670,

    Du, da muss ich zu Hause nochmal nachschauen, ob die Einrastfunktion bei mir aktiv ist. Das ist ja relativ leicht unter Win7 unter der erleichterten Bedienung einzustellen. Vielen Dank für den Tip.

    Das mit dem verstecketen Inputfeld lassen wir. Dieser Aufwand lohnt der Sache noch nicht. Ich kann versuchen, meine Button irgendwie nach ABC eindeutig zu beschriften. Dann klappt das auch mit der "&" Lösung sehr gut.

    Vielen Dank nochmal für Deine Hilfe.

    • Offizieller Beitrag

    Hallo,

    wie man es auch noch machen könnte.

    Auf die Ampersands komplett verzichten, funktionieren in dem Fall ja eh nicht richtig, dafür das ganze über HotKeySet definieren. Das hat den Vorteil, dass man auch Tastenkombinationen aus mehreren Tasten erstellen kann. Hier mal ein Beispiel für die ersten drei Befehle mit Alt+<Taste>

    Ist zwar etwa mehr Aufwand aber es sind dafür komplexere Kombinationen möglich. Der Nachteil ist das die Buchstaben dann nicht mehr hervorgehoben werden, dass kann man aber kompensieren wenn man die Kombination mit ins ToolTip-Fenster schreibt.

  • Hallo,

    @bernd670
    Vielen Dank für den erneuten Tip und die Hilfe

    Oscar :
    Vielen Dank für den Hinweis. Ich denke dass es sich auch für sehbehinderete auf die aktive GUI beschränken muss. Somit werde ich dann die Wörter "HotKeySet" mit "GUISetAccelerators" einfach austauschen? Klappt das so einfach oder ist noch was anderes dabei zu beachten?

  • Accellerators funktionieren anders.
    Du erstellst dummicontrols für jeden hotkey (der nicht einfach einen button auslösen soll)
    und diese packst du in ein 2D array. 1 Eintrag ist deine Taste, zweiter Eintrag das Control.
    Dem Control weißt du dann einfach die Funktion zu, die aufgerufen werden soll.
    (Accellerators simulieren im Prinzip den Klick auf einen Button, z.B.)
    dann benutzt du noch guictrlsetaccelerator mit dem array und es läuft :)

    AutoIt
    $Button=guictrlcreatebutton("button1")
    $dummy1=guictrlcreatedummy()
    local $ar=[["{A}",$Button],["{B}",$dummy1]]
    guictrlsetaccelerators($GUI,$ar)

    Konnte es grad nur nicht testen (nicht zuhause)

  • Hallo,

    Kanashius: Zunächst erst mal vielen Dank für den Hinweis. Somit komme ich hoffentlich weiter. Ich habe einfach große Probleme, mich in der Hilfe mit den vielen Klammern, $ und " und @ und all den für mich noch unbegreiflichen Zeichen und Dingen innerhalb einer Zeile zurecht zu finden. Vor allem "wann" ein Zeichen gesetzt werden muss und wie steht ja alles in der Hilfe und lese das ganze auch immer ganz brav, bevor ich Euch hier schreibe. Aber kapieren tu ich es trotzdem noch nicht richtig und meist klappt es in der Umsetzung noch weniger. Wird schon noch werden. Hoffe ich zumindest mal. Ich werde im Urlaub mal das Autoit Buch durchkauen. Vielleicht habe ich dann mehr Basics um das alles zu kapieren.

    @all: Nach Rücksprache mit einem (vollblinden) Benutzer bekam ich eben die Info, dass die Befehle ruhig Windows weit gelten dürfen. Ist sogar meistens erwünscht, da stark sehbehinderte oder vollblinde fast nur mit der Tastatur und nicht, oder so gut wie nie mit der Maus arbeiten.

    __________________________________________

    Daher habe ich nochmal eine Frage .... hört ja gar nicht auf .... bitte entschuldigt die Umstände mit mir.

    In meinem kleinen Programm kann ich mit der Tab-Taste und mit den Pfeiltasten nach links und rechts, von Button zu Button hüpfen. Das klappt sehr gut. Aber wie schaffe ich es, von oben nach unten und unten nach oben zu hüpfen. Hab' da nichts in der Hilfe zu gefunden oder nicht richtig genug gesucht. Mir fehlen oft die richtigen Begrifflichkeiten zur richtigen Suche.

    EDIT:
    Hab' im Forum einen Hinweis auf die Pfeiltastengefunden:

    Code
    Send("{UP}")
    Send("{LEFT}")
    Send("{RIGHT}")
    Send("{DOWN}")

    Aber wie und wo baue ich das am besten ein?

    2 Mal editiert, zuletzt von bazii (20. Mai 2015 um 17:27) aus folgendem Grund: Edit:

    • Offizieller Beitrag

    Kannst du so lösen:

    Spoiler anzeigen
  • Hallo,

    jetzt hast mich richtig neugierig gemacht. Also setzte ich mich hin und versuchte


    folgendes:

    Code
    Func _SetFocus($Spalte, $Zeile)
    	Local Static $aButton[6][3] = [[$taskschd,$uac,$CMD,$compmgmt,$diskmgmt,$dfrgui],[$cleanmgr,$control,$blind]]
    	Local Static $iCurrentLine = 0, $iCurrentRow = 0
    	$iCurrentLine += $Zeile
    	$iCurrentRow += $Spalte
    	ControlFocus($gui1, '', $aButton[$iCurrentLine][$iCurrentRow])
    EndFunc

    Also, ich versuche mich so gut es geht auszudrücken. Bitte nicht böse sein, wenn ich was falsch interpretiere:

    Ich habe diese Zeile ja maßgeblich verändert,

    Code
    Local Static $aButton[6][3] = [[$taskschd,$uac,$CMD,$compmgmt,$diskmgmt,$dfrgui],[$cleanmgr,$control,$blind]]


    in der Annahme dass ich 6 Buttons in der horizontalen habe, und anschließend von links nach rechts gesehen unmittelbar darunter die zweite Zeile, die in der vertikalen beginnt, 3 Buttons habe.

    Wenn ich jetzt aber die Pfeiltasten drücke, verschwindet meine Gui wie durch ein Lufthauch weggeblasen.
    Irgendetwas verstehe ich falsch, aber was ist es?

    • Offizieller Beitrag

    Wenn ich jetzt aber die Pfeiltasten drücke, verschwindet meine Gui wie durch ein Lufthauch weggeblasen.

    Ich hatte den Code nochmal editiert, mit einer Fehlerroutine. Wenn du versuchst einen nicht existierenden Arraybereich anzusprechen stürzt natürlich das Programm ab.
    Für deinen Fall muss dass denn so aussehen:

    Spoiler anzeigen