AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eigenen MessageDlg verwenden

Ein Thema von DataCool · begonnen am 20. Jul 2006 · letzter Beitrag vom 21. Jul 2006
Antwort Antwort
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#1

Eigenen MessageDlg verwenden

  Alt 20. Jul 2006, 12:34
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:
  // 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;
Danke und Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Eigenen MessageDlg verwenden

  Alt 20. Jul 2006, 12:50
Hallo,

schau Dir einmal die API-Funktion DrawText an. Die sollte für Deinen Fall besser geeignet sein als die dürftigen Canvas-Funktionen.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Eigenen MessageDlg verwenden

  Alt 20. Jul 2006, 13:14
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
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#4

Re: Eigenen MessageDlg verwenden

  Alt 20. Jul 2006, 13:17
Das kriegst du ganz einfach über TextExtent des Canvas.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#5

Re: Eigenen MessageDlg verwenden

  Alt 20. Jul 2006, 13:31
Zitat von Dax:
Das kriegst du ganz einfach über TextExtent des Canvas.
Nein, der beachtet nicht CR+LF, TABs, etc.

Zitat von DataCool:
schön und gut, damit weiss ich aber immer noch nicht die korrekten Masse des Rechtecks indem ich zeichen möchte/muss.
1. Anschauen was in der MSDN zu dem WinAPI Befehl steht! Er wurde nicht umsonst genannt und stellt die Lösung dafür dar!
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.
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Eigenen MessageDlg verwenden

  Alt 20. Jul 2006, 13:32
@Gollum and Muetze1:

Delphi-Quellcode:
  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;
Funktioniert leider auch nicht. Teste jetzt nochmal Dax Vorschlag,

Danke und Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#7

Re: Eigenen MessageDlg verwenden

  Alt 21. Jul 2006, 11:56
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'.
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: Eigenen MessageDlg verwenden

  Alt 21. Jul 2006, 12:43
Zitat von DataCool:
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 ?
Mache es doch genau anders herum: Lass die Anchors weg und setze beim Label "AutoSize" auf TRUE. Wenn du dann den Text reinsetzt, musst du nur noch die Gesamtgröße des Fensters an die des Labels anpassen.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Eigenen MessageDlg verwenden

  Alt 21. Jul 2006, 13:52
Hi,

Flocke genauso hab ich es jetzt gemacht und meine Tests waren bis jetzt erfolgreich.

Gruß und Danke an alle,

Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
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