Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Schriftgröße in MessageDlg anpassen


hRb - Mo 19.12.16 19:40
Titel: Schriftgröße in MessageDlg anpassen
Habe einen neuen Monitor mit höherer Auflösung (1920 x 1080). Vieles ist jetzt zu klein. Zwei Fragen, die vermutlich im Zusammenhang stehen, die ich sicherheitshalber getrennt stelle:
// 1. Wie passt man die Schriftgröße im Mainmenu an? (es gibt keinen Font.Size-Parameter)
2. Wie passt man die Schriftgröße in MessageDlg an?
Eine Schriftgrößenänderung in Form1 bringt keine Veränderung bzw. hat keine Auswirkung. An welchen "Stellschrauben" kann man im Programm drehen (nicht am System) ?


Delete - Mo 19.12.16 23:54

- Nachträglich durch die Entwickler-Ecke gelöscht -


Blawen - Mo 19.12.16 23:59

Bist Du sicher, dass Du nicht am System "drehen" möchtest?
Ich vermute mal, dass Dir nicht nur beim eigenen Programm vieles zu klein ist. Von daher würde ich persönlich die Skalierung Windowsseitig anpassen.


trm - Di 20.12.16 03:23

user profile iconhRb hat folgendes geschrieben Zum zitierten Posting springen:
1. Wie passt man die Schriftgröße im Mainmenu an? (es gibt keinen Font.Size-Parameter)



Das hier in die OnShowForm:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
var dummy_x:Integer;

begin
  for dummy_x := 0 to Application.MainForm.ComponentCount - 1 do
  begin
    if Application.MainForm.Components[dummy_x] is TMenuItem then
    begin
// Nur für MainMenü und Submenüs dessen
      if (Application.MainForm.Components[dummy_x] as TMenuItem).GetParentMenu is TMainMenu then
      begin
        (((Application.MainForm.Components[dummy_x] as TMenuItem).GetParentMenu) as TMainMenu).AutoHotkeys := maManual;
        ((Application.MainForm.Components[dummy_x] as TMenuItem).GetParentMenu as TMainMenu).AutoLineReduction := maManual;
        ((Application.MainForm.Components[dummy_x] as TMenuItem).GetParentMenu as TMainMenu).OwnerDraw := True;
        (Application.MainForm.Components[dummy_x] as TMenuItem).OnDrawItem := MenuItem_MainMenu_DrawItem;
        (Application.MainForm.Components[dummy_x] as TMenuItem).OnMeasureItem := MenuItem_MainMenu_MeasureItem;
      end;
    end;
  end;

end;


OnDrawItem ist zuständig für das Zeichnen eines Menüeintrages.
OnMeasureItem wird vor dem Zeichnen aufgerufen, hier kann z.B. die Höhe des Eintrages festgelegt werden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
procedure TForm1.MenuItem_MainMenu_DrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; Selected: Boolean);
var
  X, Y: Integer;
  dummy_string: string;
begin

  { Caption des Menüeintrages kurz in eine Variable }
  dummy_string := TMenuItem(Sender).Caption;
  { Schriftgröße noch für die Zeichnung festlegen }
  ACanvas.Font.Size := 28;
  { Breite und Textbreite des Menüeintrages verarbeiten }
  X := ARect.Right div 2 - ACanvas.TextWidth(dummy_string) div 2;
  { Linke obere Ecke, Höhe des Menüeintrages und Texthöhe verarbeiten }
  Y := ((ARect.Bottom - ARect.Top) div 2) - (ACanvas.TextHeight(dummy_string) div 2) + ARect.Top;
  { Menüeintrag zeichnen }
  ACanvas.TextOut(X, Y, dummy_string);

end;

procedure TForm1.MenuItem_MainMenu_MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer);
begin

  { Folgende Zeilen sind nur für die Vorberechnung wichtig, erzeigen die Höhe und Breite der Menüeinträge }
  ACanvas.Font.Size := 28;
  Width := ACanvas.TextWidth(TMenuItem(Sender).Caption);
  Height := ACanvas.TextHeight(TMenuItem(Sender).Caption);

end;



Was ist noch zu tun?

Den Kopf vom Mainmenü auch anpassen, also das, was auf der Form direkt sichtbar ist :-)

Viel Erfolg und frohe Weihnachten.


hRb - Di 20.12.16 12:28

Zunächst danke für alle Hinweise und auch für konkrete Befehle. Da werde ich wieder Arbeit haben, aber nicht vor Weihnachten!
1. Am System will/kann ich nicht drehen, weil mein Programm auch ein paar andere Personen nutzen und ich deren Einstellung nicht verändern will.
2. Meine Vorstellung war, die Screenauflösung abzufragen und in dessen Abhängigkeit die Schriftgröße zu scalieren.
Melde mich bei Erfolg, kann aber dauern.
Gruß und auch von mir frohe Weihnachten an alle die sich immer wieder Zeit nehmen.