Ich versuche ein Menü mit TGtkItemFactoryEntry aufzubauen, was optisch auch klappt.
Als Muster für die Deklaration habe ich folgende Beispiel genommen:
https://stuff.mit.edu/afs/sipb/project/ ... x1602.html
Zum Beenden, wir folgendes aufgerufen:
Code: Alles auswählen
{ "/File/Quit", "<control>Q", gtk_main_quit, 0, NULL },
Für eine eigene Funktion so:
Code: Alles auswählen
{ "/File/_Save", "<control>S", print_hello, 0, NULL },
Somit ist gtk_main_quit und print_hello das selbe in der deklaration.
In Pascal sieht es so aus:
Code: Alles auswählen
procedure menu_click_msg(widget: PGtkWidget; Data: gpointer);
begin
WriteLn('menu click');
end;
...
(path: '/Datei/Beenden'; accelerator: '<control>q'; callback: @gtk_main_quit; callback_action: 0; item_type: nil; extra_data: nil),
...
(path: '/Hilfe/About...'; accelerator: 'F1'; callback: @menu_click_msg; callback_action: 0; item_type: nil; extra_data: nil)
Nur motz er da mit folgender Meldung:
Code: Alles auswählen
project1.lpr(35,58) Error: Incompatible types: got "<address of procedure(PGtkWidget;Pointer);Register>" expected "<procedure variable type of procedure;CDecl>"
Mache ich eine kurlige Typenumwandlung, geht es:
Code: Alles auswählen
(path: '/Hilfe/About...'; accelerator: 'F1'; callback: TGtkItemFactoryCallback(@menu_click_msg); callback_action: 0; item_type: nil; extra_data: nil)
Ich vermute mal, das dies nicht die richtige Lösung ist.
Jemand ein besserer Vorschlag ?
Meine Versuchs-Source:
https://github.com/sechshelme/Lazarus-G ... temFactory