Push Buttons in der Symbolleiste

Das escape GUI bietet die Möglichkeit beliebig viele Symbolleisten in einem Fenster zu nutzen. Sie eignen sich daher bestens um z.B. ein Toolfenster mit Symbolen zu erzeugen. Jedoch hat man ein Problem sobald das gewählte Tool auch noch auf anderem Wege aktiviert werden kann, z.B. durch einen Eintrag im Hauptmenü. Als Beispiel zeige ich hier einmal ein mögliches Toolfenster.


Wichtig ist der untere linke Button. Wie man vielleicht erahnen kann funktioniert er als Push Button. Das heißt man klickt ihn mit der Maus an und der Status bleibt so lange erhalten bis erneut mit der Maus auf den Button geklickt wird.

Soweit so ungewöhnlich. Was aber wenn die Funktion die der jeweilige Button auslöst auch auf anderem Wege zu erreichen ist, beispielsweise durch einen Menüpunkt. Dann sollte man den Button aktivieren bzw. deaktivieren können. Ganz so einfach ist dies jedoch nicht, weil es keinen entsprechenden Befehl dafür gibt. Trotzdem ist es möglich und auch nicht sehr schwer, daher möchte hier einmal erklären wie das ganze funktioniert.

Das wichtigste bei der ganzen Sache ist, das man die Reihenfolge kennt in der die Buttons der jeweilgen Iconleiste erstellt wurden. Genauer gesagt ist die Nummer entscheidend. Im obigen Beispiel handelt es sich um den ersten Button der Iconleiste. Er hat also die Nummer 1. Diese Nummer bekäme man auch bei einem Mausklick durch das Event eg_event_number zurück.

Mit diesem Wissen kann man nun den Status des Buttons verändern und ebenfalls dessen Bild-Frame umstellen.

Nehmen wir einmal an das die Iconleiste den Handle variable.EG_IconLine hat. Intern ist jeder Button auf der Iconleiste nichts weiter wie ein ImageButton() der über ein BlitzArray an das Handle der IconLine angefügt wurde.

Um also den Button Nummer 1 dieser IconLine anzusprechen müssen wir folgenden Syntax verwenden:

variable\ibut[1]\

Nun folgt noch der Parameter den wir ändern möchten und dessen Wert. Also zum Einen der Status (state) und zum Anderen der Bild-Frame (frame). Zum Aktivieren eines solchen Buttons müsste unser Code also so aussehen:

variable\ibut[1]\state = True
variable\ibut[1]\frame = 1

Dies hätte den gleichen Effekt wie ein Klick mit der Maus. Zum Deaktiveren müsste der Code wie folgt lauten:

variable\ibut[1]\state = False
variable\ibut[1]\frame = 0