About-Menü unter Carbon

Antworten
jwdietrich
Beiträge: 167
Registriert: Mo 20. Okt 2008, 20:50
OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
CPU-Target: PowerPC, Intel, ARM
Wohnort: Hattingen, NRW
Kontaktdaten:

About-Menü unter Carbon

Beitrag von jwdietrich »

Wie kann ich unter dem Carbon-Widgetset den Menüpunkt "Über diese Anwendung" realisieren? Er sollte ja nach den Apple-Spezifikationen direkt unter dem Menü mit dem Applikationsnamen kommen, aber darauf kann man mit dem Menü-Editor der IDE (Lazarus 0.9.26) ja nicht direkt zugreifen.


jwdietrich
Beiträge: 167
Registriert: Mo 20. Okt 2008, 20:50
OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
CPU-Target: PowerPC, Intel, ARM
Wohnort: Hattingen, NRW
Kontaktdaten:

Re: About-Menü unter Carbon

Beitrag von jwdietrich »

theo hat geschrieben:http://wiki.lazarus.freepascal.org/Carbon_interface_internals/de#Carbon_IDE_Bugs


Schade eigentlich, ich dachte, es gäbe bereits jetzt einen Trick. Dennoch vielen Dank!

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: About-Menü unter Carbon

Beitrag von mischi »

Das geht doch, ist nur etwas fummelig.

man legt ein TMainMenu auf die Form und geht in den Menu Editor. Dort ein TMenuItem erzeugen und dessen Caption auf das Apfelsymbol ändern. Versuch es mit copy und paste rein zu bekommen oder mit dem unicode F8FF oder utf8 EF A3 BF. An dieses TMenuItem 3 weitere TMenuItems anhängen. Das erste für About, die Caption des zweiten mit "-" gibt einen waagrechten Strich und das dritte für die Preferences. Der Rest bleibt. Ich hab das noch nicht wirklich getestet, aber das Design sieht erstmal richtig aus.
MiSchi macht die fink-Pakete

jwdietrich
Beiträge: 167
Registriert: Mo 20. Okt 2008, 20:50
OS, Lazarus, FPC: macOS 10.4-13.4, Windows 2000-11, Raspbian (L 2.2.6, FPC 3.2.2)
CPU-Target: PowerPC, Intel, ARM
Wohnort: Hattingen, NRW
Kontaktdaten:

Re: About-Menü unter Carbon

Beitrag von jwdietrich »

mischi hat geschrieben:Das geht doch, ist nur etwas fummelig.

man legt ein TMainMenu auf die Form und geht in den Menu Editor. Dort ein TMenuItem erzeugen und dessen Caption auf das Apfelsymbol ändern. Versuch es mit copy und paste rein zu bekommen oder mit dem unicode F8FF oder utf8 EF A3 BF. An dieses TMenuItem 3 weitere TMenuItems anhängen. Das erste für About, die Caption des zweiten mit "-" gibt einen waagrechten Strich und das dritte für die Preferences. Der Rest bleibt. Ich hab das noch nicht wirklich getestet, aber das Design sieht erstmal richtig aus.


Vielen Dank, das ist ein wunderbarer Tip und eigentlich gar nicht fummelig. Jedenfalls viel weniger fummelig als der Workaround, den ich mir zwischenzeitlich mit umständlichen Betriebssystemfunktionen, die eigentlich für ObjectiveC gemacht sind und schlecht mit Pascal harmonieren, erarbeitet habe. Und es funktioniert wunderbar.

Ich habe bei mir nun die folgende Prozedur eingebaut, damit das Programm für verschiedene Plattformen compiliert werden kann:

Code: Alles auswählen

procedure AdaptMenus;
begin
     {$IFDEF LCLcarbon}
      Hauptschirm.NewMenuItem.ShortCut:=ShortCut(VK_N,[ssMeta]);
      Hauptschirm.CloseMenuItem.ShortCut:=ShortCut(VK_W,[ssMeta]);
      Hauptschirm.PrintMenuItem.ShortCut:=ShortCut(VK_P,[ssMeta]);
      Hauptschirm.QuitMenuItem.ShortCut:=ShortCut(VK_Q,[ssMeta]);
      Hauptschirm.UndoMenuItem.ShortCut:=ShortCut(VK_Z,[ssMeta]);
      Hauptschirm.CutMenuItem.ShortCut:=ShortCut(VK_X,[ssMeta]);
      Hauptschirm.CopyMenuItem.ShortCut:=ShortCut(VK_C,[ssMeta]);
      Hauptschirm.PasteMenuItem.ShortCut:=ShortCut(VK_V,[ssMeta]);
      Hauptschirm.CopyResultMenuItem.ShortCut:=ShortCut(VK_R,[ssMeta]);
      Hauptschirm.HelpMenu.Visible:=false;
      Hauptschirm.AppleMenu.Visible:=true;
      {$ELSE}
      Hauptschirm.NewMenuItem.ShortCut:=ShortCut(VK_N,[ssCtrl]);
      Hauptschirm.CloseMenuItem.ShortCut:=ShortCut(VK_W,[ssCtrl]);
      Hauptschirm.PrintMenuItem.ShortCut:=ShortCut(VK_P,[ssCtrl]);
      Hauptschirm.QuitMenuItem.ShortCut:=ShortCut(VK_Q,[ssCtrl]);
      Hauptschirm.UndoMenuItem.ShortCut:=ShortCut(VK_Z,[ssCtrl]);
      Hauptschirm.CutMenuItem.ShortCut:=ShortCut(VK_X,[ssCtrl]);
      Hauptschirm.CopyMenuItem.ShortCut:=ShortCut(VK_C,[ssCtrl]);
      Hauptschirm.PasteMenuItem.ShortCut:=ShortCut(VK_V,[ssCtrl]);
      Hauptschirm.CopyResultMenuItem.ShortCut:=ShortCut(VK_R,[ssCtrl]);
      Hauptschirm.HelpMenu.Visible:=true;
      Hauptschirm.AppleMenu.Visible:=false;
      {$ENDIF}
end;

Das Apfelmenü habe ich dabei als "AppleMenu" bezeichnet und das Windows-Hilfemenü als "HelpMenu". Je nach Widget-Set wird hier also entweder das Apfelmenü oder das Hilfemenü sichtbar. Die übrigen Zeilen legen die Abkürzungstaste fest, also CTRL unter Windows und Linux und Meta (Apfel) unter Mac OS. "Hauptschirm" ist das Formular, in dem die Menüleiste definiert ist.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: About-Menü unter Carbon

Beitrag von pluto »

Theoretisch könntest du dir einige Doppelte Code Zeilen sparen, wenn du folgendes machst:

Code: Alles auswählen

procedure AdaptMenus;
var
  Shift:TShiftState;
begin
     {$IFDEF LCLcarbon}
       Shift:=[ssMeta];
       Hauptschirm.HelpMenu.Visible:=false;
        Hauptschirm.AppleMenu.Visible:=true;
      {$ELSE}
        Shift:=[ssCtrl]];
      Hauptschirm.HelpMenu.Visible:=true;
      Hauptschirm.AppleMenu.Visible:=false;
      {$ENDIF}
 
      Hauptschirm.NewMenuItem.ShortCut:=ShortCut(VK_N,Shift);
      Hauptschirm.CloseMenuItem.ShortCut:=ShortCut(VK_W,Shift);
      Hauptschirm.PrintMenuItem.ShortCut:=ShortCut(VK_P,Shift);
      Hauptschirm.QuitMenuItem.ShortCut:=ShortCut(VK_Q,Shift);
      Hauptschirm.UndoMenuItem.ShortCut:=ShortCut(VK_Z,Shift);
      Hauptschirm.CutMenuItem.ShortCut:=ShortCut(VK_X,Shift);
      Hauptschirm.CopyMenuItem.ShortCut:=ShortCut(VK_C,Shift);
      Hauptschirm.PasteMenuItem.ShortCut:=ShortCut(VK_V,Shift);
      Hauptschirm.CopyResultMenuItem.ShortCut:=ShortCut(VK_R,Shift);
end;

Sollte Eigentlich auch gehen...Wenn ich kein Fehler gemacht habe....
Edit01:
Zweite Version:

Code: Alles auswählen

procedure AdaptMenus;
var
  Shift:TShiftState;
begin
     {$IFDEF LCLcarbon}
       Shift:=[ssMeta];
      {$ELSE}
        Shift:=[ssCtrl]];
      {$ENDIF}
 
      // Hier bin ich mir zur Zeit nicht sicher ob es "shift = ssMeta" war oder noch andrs gint
       Hauptschirm.HelpMenu.Visible:=not (shift = ssMeta);
       Hauptschirm.AppleMenu.Visible:=not  Hauptschirm.HelpMenu.Visible
      Hauptschirm.NewMenuItem.ShortCut:=ShortCut(VK_N,Shift);
      Hauptschirm.CloseMenuItem.ShortCut:=ShortCut(VK_W,Shift);
      Hauptschirm.PrintMenuItem.ShortCut:=ShortCut(VK_P,Shift);
      Hauptschirm.QuitMenuItem.ShortCut:=ShortCut(VK_Q,Shift);
      Hauptschirm.UndoMenuItem.ShortCut:=ShortCut(VK_Z,Shift);
      Hauptschirm.CutMenuItem.ShortCut:=ShortCut(VK_X,Shift);
      Hauptschirm.CopyMenuItem.ShortCut:=ShortCut(VK_C,Shift);
      Hauptschirm.PasteMenuItem.ShortCut:=ShortCut(VK_V,Shift);
      Hauptschirm.CopyResultMenuItem.ShortCut:=ShortCut(VK_R,Shift);
end;
MFG
Michael Springwald

Antworten