Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   MessageDialog-Text nach Erzeugen ändern (https://www.delphipraxis.net/167777-messagedialog-text-nach-erzeugen-aendern.html)

ThorZten 17. Apr 2012 21:10

Delphi-Version: 2010

MessageDialog-Text nach Erzeugen ändern
 
Guten Abend!
Gibt es eine Möglichkeit, einen MessageDialog-Text zu ändern, NACHDEM die Nachricht bereits erzeugt wurde?
Bisher habe ich folgendes:

Code:
function ErzeugeNachrichtenfenster(const aMsg: string): TForm;
begin
  Result := CreateMessageDialog(aMsg, mtInformation, []);
  Result.BorderIcons := [];
  Result.Height := 80;
  Result.FormStyle := fsStayOnTop;
  Result.Show;
  Application.ProcessMessages;
end;



procedure TFoMain.FormShow(Sender: TObject);
var
  Dlg : TForm;
begin
  // Warte-Fenster anzeigen
  Dlg := ErzeugeNachrichtenfenster('Lade Personendaten vom Server...');

  try
    {
     (Hier werden verschiedene Dateien herunter geladen.)
      -> Ich möchte darum dem Nutzer mitteilen, welche das sind
     und würde dazu gern den Text der Nachricht merhfach ändern.
    }
  finally

  // Warte-Fenster schließen und freigeben
  Dlg.Release;
end;
Wie oben zu sehen wird eine Message erzeugt und ausgegeben. Ich möchte während der Laufzeit dann den Text dieser Nachricht ändern. Ist das möglich oder muss ich mir selbst ein Nachrichtenfenster über ein eigenes Formular basteln?

Gruß,
Thorsten

lbccaleb 17. Apr 2012 21:30

AW: MessageDialog-Text nach Erzeugen ändern
 
Du könntest mit dem Handle des Fenster und der Windows Message MSDN-Library durchsuchenWM_SETTEXT den Text ändern.

himitsu 17. Apr 2012 21:55

AW: MessageDialog-Text nach Erzeugen ändern
 
CreateMessageDialog erstellt ein Delphi-VCL-Formular und da kann man natürlich alles direkt ändern, wie man will.
Dafür muß man nicht erst über die WinAPI gehn.

Vorallem, an was soll er denn den Text senden?
Dafür müßte man erstmal daas Handle des Label (oder was zur Anzeige verwendet wird) finden.
Und VCL-Componenten haben standardmäßig keine feste Dialog-ID, welche man verwenden könnte.

Da aber die interne TMessageForm nicht öffentlich ist:
- Dlg.Components nach einem TLabel durchsuchen
- diesem den neuen Text zuweisen

Aber bedenke, daß die Größe der Form nicht automatisch an den neuen Text angepaßt werden.


Tipp: Die alten Doalog freigeben und einfach einen Neuen erstellen. :stupid: (oder erst erstellen und danach freibegen)

ThorZten 17. Apr 2012 22:53

AW: MessageDialog-Text nach Erzeugen ändern
 
Alles klar. Vielen Dank!

himitsu 17. Apr 2012 23:09

AW: MessageDialog-Text nach Erzeugen ändern
 
Ich hätte es beinah vergessen, aber die WinAPI kann man hier sowieso vergessen.

Denn ein TLabel hat kein Handle, da es keine eigenständige Windows-Komponente darstellt.
Das Windows-Label (STATIC) ist Delphi-Referenz durchsuchenTStaticText und das Ding verwendet fast Keiner (in Delphi), aber dieses hätte dann ein HWND.

Gustav.R 17. Apr 2012 23:51

AW: MessageDialog-Text nach Erzeugen ändern
 
Mein Avast randaliert bei Luckies

http://www.michael-puff.de/Programmi...imedMsgBox.zip

zu Unrecht sehr heftig :evil:

GG

Perlsau 18. Apr 2012 02:38

AW: MessageDialog-Text nach Erzeugen ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von ThorZten (Beitrag 1162386)
Gibt es eine Möglichkeit, einen MessageDialog-Text zu ändern, NACHDEM die Nachricht bereits erzeugt wurde?

Wenn ich das richtig verstanden habe, benötigst du keinen MessageDialog, sondern lediglich eine Anzeige, daß dein Programm gerade etwas tut und der Anwender auf das Ende dieser Aktion warten soll. Da der Anwender keine Eingabe zu tätigen hat, ist es kein Dialog, sondern einfach nur ein Hinweis.

Dafür habe ich mir in einigen Programmen einfach ein TPanel auf die Form gelegt, Visible auf FALSE gestellt und zeige bei Bedarf dieses TPanel anstatt einer MessageBox an. Am geschicktesten ist es, die anderen visuellen Komponenten auf einem anderen Panel (wenn du nicht sowieso bereits ein PageControl oder ähnliches verwendest) zu platzieren (Align := alClient), weil man so einfach mit Enabled := false dieses Panel so lange stillegen kann, wie die Aktion dauert.

himitsu 18. Apr 2012 08:43

AW: MessageDialog-Text nach Erzeugen ändern
 
Zitat:

Zitat von Gustav.R (Beitrag 1162400)
Mein Avast randaliert bei Luckies http://www.michael-puff.de/Programmi...imedMsgBox.zip zu Unrecht sehr heftig :evil:

Meinst du die MsgBox innerhalb deines Programms oder bei einer seiner Demos?

Leider wird viel Schadsoftware in Delphi geschrieben, so daß einige Virenscanner immer mal wieder ein bissl zu heftig reagieren und zuviel erkennen, da sie eine zu schlechte lasche Virensignatur benutzen.
Gibt genügend Threads im Forum, bzw der Fehlererkennung (vorallem bei Hier im Forum suchenAviras Hier im Forum suchenAntiVir) ... suchen und dort steht dann die Lösung (oder einfach ignorieren oder den Scanner wechseln).

Gustav.R 18. Apr 2012 10:00

AW: MessageDialog-Text nach Erzeugen ändern
 
@himitsu: Beim Herunterladen der zip-Datei wird die Demoechse darin als Malware klassifiziert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:17 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