![]() |
Eigenen MessageDlg verwenden
Hi,
ich möchte gerne in eiuner Anwendung, einen eigenen MessageDlg verwenden. Ich habe das ganze auch schon fast geschafft, allerdings habe ich ein paar kleine Probleme die richtige Breite und Höhe für die "Message" zu berechnen. Die Message soll in einem Label dargestellt werden. Das Label ist über Anchors so gesetzt das es sich in alle Richtungen vergrößert. Ausserdem ist die Eigenschaft "WordWrap" auf "true" gesetzt. Ich habe jetzt in folgendem Quellcode versucht über Textwidth und TextHeight die Daten zu berechnen. Allerdings liefert das ganze bei längeren Texten das falsche Ergebnis. Hat jemand eine Ahnung warum ? Bzw. Hat jemand eine bessere Idee ?
Delphi-Quellcode:
Danke und Gruß Data
// use Stringlist to detect line breaks
strL := TStringList.Create; try strL.Text := MsgText; // init with 0 iWidth := 0; // Checkout length of each line for i := 0 to strL.Count - 1 do begin iTmp := lab_Message.Canvas.TextWidth(strL[i]); if iTmp > iWidth then iWidth := iTmp; end; // check minimum width if iWidth < 235 then iWidth := 235; // set form with(label width + width for other controls) self.Width := iWidth + 50; // calculate height iTmp := (lab_Message.Canvas.TextHeight(msgText)+2) * strL.Count; // add height for other controls inc(iTmp,120); // set height self.Height := iTmp ; finally FreeAndNil(strL); end; // center ok button cmd_OK.Left := (self.Width div 2) - (cmd_ok.Width div 2); // set label caption lab_Message.Caption := msgText; show; |
Re: Eigenen MessageDlg verwenden
Hallo,
schau Dir einmal die API-Funktion DrawText an. Die sollte für Deinen Fall besser geeignet sein als die dürftigen Canvas-Funktionen. |
Re: Eigenen MessageDlg verwenden
Hi,
schön und gut, damit weiss ich aber immer noch nicht die korrekten Masse des Rechtecks indem ich zeichen möchte/muss. Gruß Data |
Re: Eigenen MessageDlg verwenden
Das kriegst du ganz einfach über TextExtent des Canvas.
|
Re: Eigenen MessageDlg verwenden
Zitat:
Zitat:
2. DrawText() kannst du einmal zur Ausgabe nutzen... 3. und zum anderen auch dazu, dir das benötigte Rechteck berechnen zu lassen. Das kann DrawText() auch (daher der Hinweis auf die Funktion). Schau dir dazu mal den Parameter DT_CALCRECT an. |
Re: Eigenen MessageDlg verwenden
@Gollum and Muetze1:
Delphi-Quellcode:
Funktioniert leider auch nicht. Teste jetzt nochmal Dax Vorschlag,
ARect.Left := lab_Message.Left;
ARect.Top := lab_Message.Top; DrawText(self.Canvas.Handle,PChar(MsgText),-1,ARect,DT_CALCRECT); showmessage('Left: '+inttostr(ARect.Left)+#13#10+ 'Top: '+inttostr(ARect.Top)+#13#10+ 'Right: '+inttostr(ARect.Right)+#13#10+ 'Bottom: '+inttostr(ARect.Bottom)); iDiff := (ARect.Right - ARect.Left) - lab_Message.Width; self.Width := self.Width + iDiff; iDiff := (ARect.Bottom - ARect.Top) - lab_Message.Height; self.Height := self.Height + iDiff; lab_Message.Caption := msgText; Danke und Gruß Data |
Re: Eigenen MessageDlg verwenden
Warum 'spitzt' du nicht einmal ein bisschen in der Unit Dialogs? Ich habe mir da die entscheidenden Teile rauskopiert, um ua die Dialoge auf der Anwendung bzw dem aktiven Form und nicht auf dem Monitor zu zentrieren und um Default- und CancelBtn nach Gusto vorzubelegen. Man muß allerdings recht 'gefühlvoll' vorgehen, auf daß sich die neue Unit nicht mit der Dialogs 'beißt'.
|
Re: Eigenen MessageDlg verwenden
Zitat:
|
Re: Eigenen MessageDlg verwenden
Hi,
Flocke genauso hab ich es jetzt gemacht und meine Tests waren bis jetzt erfolgreich. Gruß und Danke an alle, Data |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz