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
hRb hat folgendes geschrieben : |
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 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
dummy_string := TMenuItem(Sender).Caption; ACanvas.Font.Size := 28; X := ARect.Right div 2 - ACanvas.TextWidth(dummy_string) div 2; Y := ((ARect.Bottom - ARect.Top) div 2) - (ACanvas.TextHeight(dummy_string) div 2) + ARect.Top; ACanvas.TextOut(X, Y, dummy_string);
end;
procedure TForm1.MenuItem_MainMenu_MeasureItem(Sender: TObject; ACanvas: TCanvas; var Width, Height: Integer); begin
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!