Autor Beitrag
hRb
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: Mo 19.12.16 19:40 
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) ?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 19.12.16 23:54 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: 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.

_________________
Es kompilert, wir können ausliefern.
Und es kompiliert wieder - das Update ist fertig - bitte 100 Euro ;-)
trm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 491
Erhaltene Danke: 19

Windows 7x64
Delphi 7
BeitragVerfasst: 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:

ausblenden 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.

ausblenden 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.

_________________
In Erfurt gibt es eine Pension, in der es gemütlich ist, Google einfach nach Pension Fiege ;)
hRb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 267
Erhaltene Danke: 12



BeitragVerfasst: 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.