Icons von Menüpunkten ändern

Das escape GUI bietet die Möglichkeit Menüpunkten ein Icon zu verpassen. Man kann mit einem kleinen Trick das Symbol, also Icon, auch während der Laufzeit des Programms verändern. Damit bildet diese Möglichkeit das passende Gegenstück zum Tutorial "Push Buttons in der Symbolleiste".

Kommen wir zur Funktionsweise. Wichtig ist, das beim Anlegen des Menüpunktes ein Frame Image übergeben wird. Also ein Bild welches mindestens 2 Icons enthält. Das erste Bild soll hierbei leer sein und das Zweite zeigt den Haken des aktivierten Menüpunktes. Das Bild müsste also so aussehen:


Wie erklären wir nun dem GUI die Änderung des Icons. Nun, der Erste und einfache Teil ist das Eintragen der Frame Nummer im Parameter der Menü Variablen. Nehmen wir an unser Menüpunkt wurde mit dieser Variable erzeugt:

mnu_edit_glue.eg_menuitem

Dann muß unsere "Info an das GUI", wenn wir den Haken setzen wollen, so lauten:

mnu_edit_glue\frame = 1

Wenn wir den Haken wegnehmen möchten muß es ergo so lauten:

mnu_edit_glue\frame = 0

Damit das GUI diese Änderung aber auch akzeptiert muß das Menü neu erstellt werden und das ist der schwierigere Teil, da es keine "offizielle" EG_Draw_Menu() Routine gibt. Inoffiziell gibt es sie aber - als Systemroutine und das können wir ausnutzen. Etwas schwierig wird das ganze nur dadurch das die Routine keine EG_MenuItem Variable erwartet, sondern eine EG_Menu Variable, mit welcher man normalerweise gar keinen Kontakt hat und auf welche man auch keinen direkten Zugriff hat. Man muß diese Variable erst "ausfindig" machen. Um dies zu tun braucht es eine kleine Suchschleife. Sie kann einfach übernommen werden. Das ROT Gekennzeichnete ist die Variable des Menüpunktes, sie muß angepasst werden. Für unser Beispiel würde die Schleife so lauten:

For eg_mnu.EG_Menu = Each EG_Menu
   If eg_mnu\id = mnu_edit_glue\menu Then eg_draw_menu(eg_mnu): Exit
Next


Diese Schleife muß also nach dem Einstellen des Bild-Frames aufgerufen werden und schon hat man entweder den Haken im Menü gesetzt, oder man hat ihn weggenommen.