Menü : Schriftgröße

Für Fragen von Einsteigern und Programmieranfängern...
malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Menü : Schriftgröße

Beitrag von malabarista »

Wo kann ich im TMainMenu die Schriftgröße und Schriftart einstellen ?

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Menü : Schriftgröße

Beitrag von Mathias »

Ich denke, dies wird kaum gehen, da dies vom OS gesteuert wird.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Menü : Schriftgröße

Beitrag von wp_xyz »

Eine brauchbare Lösung habe ich noch nicht. Aber MainMenu hat einen OwnerDraw-Mechanismus, über den man in die Ausgabe eingreifen kann. Also: OwnerDraw des MainMenu auf true setzen, dann einen Event-Handler für OnDrawItem schreiben, in dem man den Font verändern kann und den Menütext selbst zeichnen muss (leider auch Icons etc.). Damit die Menüeinträge richtig platziert werden, muss man auch OnMeasureItem implementieren; dabei müssen die Änderungen des Fonts wiederholt werden. Allerdings sollte die Fontgröße nicht zu stark verändert werden, das ist anscheinend noch etwas buggy... Es reicht, die Events nur beim MainMenu einzutragen. Man kann aber auch bei einzelnen Menüpunkten jeweils eigene Einstellungen vornehmen.

Im Screenshot siehst du mein Ergebnis unter Windows.

Viel Spaß beim Experimentieren!

Code: Alles auswählen

procedure TForm1.MainMenu1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; AState: TOwnerDrawState);
begin
  ACanvas.Font.Name := 'Times New Roman';
  ACanvas.Font.Size := 12;
  ACanvas.Brush.Style := bsClear;   // Damit wird der Text ohne Hintergrund ausgegeben
  ACanvas.TextOut(ARect.left, ARect.Top, TMenuItem(Sender).Caption);
end;
 
procedure TForm1.MainMenu1MeasureItem(Sender: TObject; ACanvas: TCanvas;
  var AWidth, AHeight: Integer);
begin
  ACanvas.Font.Name := 'Times New Roman';
  ACanvas.Font.Size := 12;
  AWidth := ACanvas.TextWidth(TMenuItem(Sender).Caption);
  AHeight := ACanvas.TextHeight('Tg');
end
Dateianhänge
mainmenu_ownerdraw.png
mainmenu_ownerdraw.png (4.17 KiB) 2332 mal betrachtet

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Menü : Schriftgröße

Beitrag von Mathias »

Ich habe es grade probiert, aber funktionieren tut die nur mit Windows. Bei Linux bleibt das Menu unverändert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Menü : Schriftgröße

Beitrag von wp_xyz »

Wofür ist eigentlich Screen.MenuFont? Hat bei mir keinen Effekt (Win 10, Mint)

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Menü : Schriftgröße

Beitrag von Michl »

wp_xyz hat geschrieben:Wofür ist eigentlich Screen.MenuFont? Hat bei mir keinen Effekt (Win 10, Mint)
Hier geht es (Windows 7):

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  aFont: TFont;
begin
  aFont := Screen.MenuFont;
  Caption := aFont.Name;
end

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Menü : Schriftgröße

Beitrag von Mathias »

Ich dachte, damit könnten man auslesen, wie der Font im System eingestellt ist.
Aber bei Size und Height kommt nur 0.
Und bei Name "default".
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Menü : Schriftgröße

Beitrag von Michl »

Ja, unter Linux Mint KDE GKT2 kommt nur "default" als Fontname und FontSize 0, bei Windows 7 classic Theme "Tahoma" und 8.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Menü : Schriftgröße

Beitrag von wp_xyz »

Michl hat geschrieben:
wp_xyz hat geschrieben:Wofür ist eigentlich Screen.MenuFont? Hat bei mir keinen Effekt (Win 10, Mint)
Hier geht es (Windows 7)...

Mathias hat geschrieben:Ich dachte, damit könnten man auslesen, wie der Font im System eingestellt ist.

Ach ja, jetzt fällt es mir wieder ein: damit konnte man bei Delphi 7 dafür sorgen, dass der bei Formularen als Default eingebaute, pixelige MS Sans Serif Font durch einen des Betriebssystems (Screen.MenuFont, Screen.IconFont) ersetzt wird:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Font := Screen.IconFont;
end;

malabarista
Beiträge: 321
Registriert: Sa 11. Jun 2016, 12:16
OS, Lazarus, FPC: Linux Mint 18.1 L1.6.2-1 FPC 3.0.0
CPU-Target: 64Bit
Wohnort: Konstanz

Re: Menü : Schriftgröße

Beitrag von malabarista »

OK. Dann lasse ich es so wie es ist.

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Menü : Schriftgröße

Beitrag von wp_xyz »

malabarista hat geschrieben:OK. Dann lasse ich es so wie es ist.

Falls jemand anders als du selbst mit dem Programm arbeiten soll, ist das auch besser so. Viele Benutzer sehen es gar nicht gern, wenn ein Programm meint, "bessere" Einstellungen zu haben als das Betriebssystem.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Menü : Schriftgröße

Beitrag von compmgmt »

wp_xyz hat geschrieben:Falls jemand anders als du selbst mit dem Programm arbeiten soll, ist das auch besser so. Viele Benutzer sehen es gar nicht gern, wenn ein Programm meint, "bessere" Einstellungen zu haben als das Betriebssystem.

z.B. wenn ein Programm ein eigenen VisualStyle mitbringt. Wenn es nur ein Button oder eine ScrollBar ist, ok. Aber wenn das komplette Fenster aussieht als würde es nicht zum OS gehören kotze ich.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Menü : Schriftgröße

Beitrag von Mathias »

z.B. wenn ein Programm ein eigenen VisualStyle mitbringt. Wenn es nur ein Button oder eine ScrollBar ist, ok. Aber wenn das komplette Fenster aussieht als würde es nicht zum OS gehören kotze ich.

Das finde ich auch recht mühsam, unter Windows haben sehr viele Programme eigene Skins, und man weis bald nicht mehr wo man hin klicken muss. :cry:

Bei einem Games finde ich solche Sachen OK., aber bei Tools etc. eine Katastrophe.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Menü : Schriftgröße

Beitrag von theo »

Mathias hat geschrieben:Ich dachte, damit könnten man auslesen, wie der Font im System eingestellt ist.
Aber bei Size und Height kommt nur 0.
Und bei Name "default".


So gehts bei mir auf Linux.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var fd:TFontData;
begin
 fd:=GetFontData(Font.Handle);
 ShowMessage(fd.Name+' '+inttostr(Round(fd.Height * 72 / Font.PixelsPerInch)));
end

Nixsager
Beiträge: 168
Registriert: Sa 8. Okt 2016, 08:38
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Polska

Re: Menü : Schriftgröße

Beitrag von Nixsager »

compmgmt hat geschrieben:z.B. wenn ein Programm ein eigenen VisualStyle mitbringt. Wenn es nur ein Button oder eine ScrollBar ist, ok. Aber wenn das komplette Fenster aussieht als würde es nicht zum OS gehören kotze ich.

Mir geht es genauso. Opera lässt grüßen. Ich habe das Windows 98-Aussehen eingestellt (denn ich brauche und will diese grafischen Effekte nicht), und nichts aus davon zu sehen. :evil:
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!

Antworten