Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi MessagBox in anderer Schriftart (https://www.delphipraxis.net/53655-messagbox-anderer-schriftart.html)

n0b0dy 20. Sep 2005 20:02


MessagBox in anderer Schriftart
 
Hi Leute,

ich habe eigentlich einfach nur vor, die Schriftart einer stinknormalen MessageBox zu ändern.
unten bei dem großen Pfeil wird die Schriftart für das Label geändert. So, nun hab ich noch ne stelle markiert und zwar die, wo, wie ich denke, die größe für den textbereich festgelegt wird... :?

naja auf jeden fall kommt es vor, dass bei veränderter schriftart, der text nicht vollständig auf der messagebox sichtbar ist. also abgeschnitten ist. und das möchte ich verhindern. habe probiert beim Label Autosize:=True anzuwenden, jedoch ohne erfolg. der text wird ja auch wahrscheicnlich durch das TextRect begrenzt.. So sehe ich das zumindest.
naja auf jeden fall funzt das net :( und bräuchte dringend hilfe. hat da jemand eine idee?

Hier ein auszug der Dialogs.pas:
Delphi-Quellcode:
function CreateMessageDialog(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons): TForm;
  ...

        if ButtonWidths[B] = 0 then
        begin
          TextRect := Rect(0,0,0,0);   <----------------------------------------------
          Windows.DrawText( canvas.handle,
            PChar(LoadResString(ButtonCaptions[B])), -1,
            TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or
            DrawTextBiDiModeFlagsReadingOnly);
  ...
    TMessageForm(Result).Message := TLabel.Create(Result);
    with TMessageForm(Result).Message do
    begin
      Name := 'Message';
      Font.Name := 'Verdana' //Default ist wohl Tahoma <-----------------------------------
      Parent := Result;
      ALeft := IconTextWidth - TextRect.Right + HorzMargin;
      if UseRightToLeftAlignment then
        ALeft := Result.ClientWidth - ALeft - Width;
      SetBounds(ALeft, VertMargin,
        TextRect.Right, TextRect.Bottom);
    end;
   ...
  end;
end;

Ciao :D

sakura 20. Sep 2005 21:14

Re: MessagBox in anderer Schriftart
 
Hi n0b0dy,

wenn Du rechtlich geschützten Code kopieren musst, dann konzentriere Dich bitte auf das Wesentlichste. Die oben gepostete Menge war eindeutig zu viel. Poste bitte nur die relevante Stelle, aber nicht sooo viel.

...:cat:...

n0b0dy 20. Sep 2005 21:22

Re: MessagBox in anderer Schriftart
 
ui sry. :(

aber geht klar ! beim nächstenmal werd ichs berücksichtigen :)


[EDIT] Hoffe so ists nun besser :) [/EDIT]

faux 21. Sep 2005 05:44

Re: MessagBox in anderer Schriftart
 
Wieso kopierst du dir die Procedure nicht in eine eigene Unit und veränderst den Stringt mit 'Verdana' in das, was du willst?
Oder darf man das nicht?

Was anderes: Ich finde das gar nicht schön, wenn ein Programm Fehlermeldungen anzeigt, die aus meinem Windows-Style herausfallen. Das sieht sehr überladen aus... Außerdem is es unprofessionell (außer du setzt es gezielt und passend ein...)... :wink:

Grüße
Faux

n0b0dy 21. Sep 2005 07:44

Re: MessagBox in anderer Schriftart
 
glaube mir es ist SEHR passend. wirste mir noch bestätigen, wenns erstmal hier freeware ist *g*

ne, aber
ich kopiere ja den text in eine eigene procedure und habe da auch Verdana eingetragen. das prob ist nur das, dass das Label auf der MessageForm zu klein für Verdana ist, und somit Teile des Textes abgeschnitten sind....

im ersten thread beim ersten pfeil wird wohl die größe festgelegt mit Windows.Draw....
wahrscheinlcih nimmt der dazu die StandardSchriftart von windows. aber da Verdana ja um eineiges Breiter ist, sieht man später nur Teile einer Frage oder so. und Ich wollte nun wissen, wie man das RICHTIG macht, mit der schriftart ändern :)

shmia 21. Sep 2005 08:24

Re: MessagBox in anderer Schriftart
 
Zitat:

Zitat von n0b0dy
So, nun hab ich noch ne stelle markiert und zwar die, wo, wie ich denke, die größe für den textbereich festgelegt wird... :?

Richtig, Windows.DrawText mit der Option DT_CALCRECT berechnet die Grösse des Rechtecks,
dass für die Textausgabe benötigt wird und legt das Ergebnis in TextRect ab.
Natürlich muss vorher der Font eingestellt werden. Du tust es danach...

n0b0dy 21. Sep 2005 10:10

Re: MessagBox in anderer Schriftart
 
ja dann sag mir doch mal bitte mit was ich den Font festlegen soll, bzw wie?

unten da wird nur die schriftart vom label verändert. wie soll ich denn oben bei windows.Draw ne schriftart festlegen?

Kedariodakon 21. Sep 2005 10:22

Re: MessagBox in anderer Schriftart
 
Zitat:

Zitat von n0b0dy
ja dann sag mir doch mal bitte mit was ich den Font festlegen soll, bzw wie?

unten da wird nur die schriftart vom label verändert. wie soll ich denn oben bei windows.Draw ne schriftart festlegen?

Schau dir mal den Anfang an!

Delphi-Quellcode:
//...

begin
  Result := TMessageForm.CreateNew(Application);
  with Result do
  begin
    BiDiMode := Application.BiDiMode;
    BorderStyle := bsDialog;
{=>}Canvas.Font := Font;{<=}
{             /\           }
{             ||           }
{             ||           }

//...
Und passende Stelle gefunden? :zwinker:
Versuch das da mal...

Bye

Sharky 21. Sep 2005 10:23

Re: MessagBox in anderer Schriftart
 
Hai n0b0dy,

wie rufst Du das denn auf? Wenn ich es so mache kann ich den Font angeben:
Delphi-Quellcode:
procedure TForm1.btn_ShowDialogClick(Sender: TObject);
var
  myDialog : TForm;
begin
  myDialog := CreateMessageDialog('blubb',mtInformation,[mbYes,mbNo]);
  try
    myDialog.Font.Name := 'Script';
    myDialog.ShowModal;
  finally
    myDialog.Free;
  end;
end;

Kedariodakon 21. Sep 2005 10:30

Re: MessagBox in anderer Schriftart
 
Zitat:

Zitat von Sharky
Hai n0b0dy,

wie rufst Du das denn auf? Wenn ich es so mache kann ich den Font angeben:
Delphi-Quellcode:
procedure TForm1.btn_ShowDialogClick(Sender: TObject);
var
  myDialog : TForm;
begin
  myDialog := CreateMessageDialog('blubb',mtInformation,[mbYes,mbNo]);
  try
    myDialog.Font.Name := 'Script';
    myDialog.ShowModal;
  finally
    myDialog.Free;
  end;
end;

Änderst so ja genau die stelle, welche ich markiert hatte ;)


Noch ein Tip:
Im grunde mußt du den Font vor
Delphi-Quellcode:
//...

          Windows.DrawText( canvas.handle,
            PChar(LoadResString(ButtonCaptions[B])), -1,
            TextRect, DT_CALCRECT or DT_LEFT or DT_SINGLELINE or
            DrawTextBiDiModeFlagsReadingOnly);

//...
ändern, da der da ja schon gezeichnet wird, Informationen die er braucht sind ja im Canvas, sprich Font & Co, also oben mal schaun was ich geschrieben hatte und beachten, was Sharky gemacht hatte, dann liegt die lösung auf der Hand!

Die Lösung ist ganz ganz einfach :zwinker:

Bye


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz