Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi MessageDlg (https://www.delphipraxis.net/108683-messagedlg.html)

Nastarowje 17. Feb 2008 20:12


MessageDlg
 
Hallo,

irgendwie komme ich nicht weiter. Ich bekomme unter Delphi 7 immer die Fehlermeldung mrYes ist ein undefinierter Bezeichner.

Delphi-Quellcode:

case MessageDlg('Datei existiert noch nicht. Soll Sie angelegt werden?',mtInformation, [mbYes,mbNo], 0) of
      mrYes : Form1.Close;
      mrNo : Form1.Close;
    end;

Die Resultate Form1.close sind nur fiktiv. Der Code fehlt noch.
Wieso bekomme ich die Fehlermeldung?

Ich setze eine eigene Unit ein, in die Unit habe ich Dialogs eingebunden. MessageDlg wird gefunden und laut Hilfe habe ich alles richtig. Auch hier im Forum steht nix anderes.

Was fehlt oder was mache ich falsch? Muss ich mrYes und mrNo irgendwo noch deklarieren?

Vielen Dank im vorraus

dataspider 17. Feb 2008 20:25

Re: MessageDlg
 
Hi,

ich denke, Unit Dialogs in Uses aufnehmen sollte reichen.

[Edit]Vergiss es, hab nicht richtig gelesen...[/EDIT]

[EDIT2]Unit Controls brauchtst du :oops: [/EDIT]


Cu, Frank

bitsetter 17. Feb 2008 20:28

Re: MessageDlg
 
Hallo,

binde mal die Controls mit ein.
Delphi-Quellcode:
Controls.mrYes

Hansa 17. Feb 2008 20:47

Re: MessageDlg
 
Das muss andere Ursachen haben. Die Unit Dialogs ist schon richtig. Mache mal das Form1.Close weg. Das könnte unliebsame Nebeneffekte produzieren. // Glaskugel aus

Nastarowje 17. Feb 2008 21:16

Re: MessageDlg
 
Hallo,

Vielen Dank, die Unit Controls hat gefehlt.

Michael

Hansa 17. Feb 2008 22:31

Re: MessageDlg
 
Ah ja, mrYes ist in Controls.pas deklariert. Wäre es idYes gewesen, dann hätte man Windows.pas in die Uses schreiben müssen. Sofern es sich nicht um ein reines WinApi-Programm handelt empfiehlt es sich allerdings sowieso, die Uses-Liste von Delphi erstellen zu lassen. Der Fehler wäre dann nicht mal aufgetaucht.

Muetze1 17. Feb 2008 23:38

Re: MessageDlg
 
Zitat:

Zitat von Hansa
Sofern es sich nicht um ein reines WinApi-Programm handelt empfiehlt es sich allerdings sowieso, die Uses-Liste von Delphi erstellen zu lassen. Der Fehler wäre dann nicht mal aufgetaucht.

Ach ja - und wann sollte Delphi die Uses Liste erweitern in einer formlosen Unit? Wenn er die Komponente MessageDlg() in den Quelltext zieht? :gruebel:

Hansa 18. Feb 2008 02:05

Re: MessageDlg
 
Mann, Mütze. :stupid: :mrgreen: Was steht denn hier ?
Zitat:

Zitat von Nastarowje
Delphi-Quellcode:
case MessageDlg('Datei existiert noch nicht. Soll Sie angelegt werden?',mtInformation, [mbYes,mbNo], 0) of
      mrYes : Form1.Close;
      mrNo : Form1.Close;
    end;

Da kann man wohl kaum von einem "formlosen" Form ausgehen, oder doch ? :gruebel: Deshalb auch mein Hinweis auf ein minimalistisches "WinApi"-Programm (für Disketten etc.). Sofern das nicht zutrifft und es ist ein "normales" Delphi-Programm, dann ist es wohl egal, ob eine Unit von Hand in die Uses-Liste geschrieben wird oder von Delphi eben automatisch. Ein DoppelKlick auf leere Form (oder geringe Aktivitäten im OI) genügt dazu übrigens, um die Contols.pas (= mrYes) oder die windows.pas (=idYes) ohne sonstige Arbeit in die Uses Liste gleich an die richtige Stelle reinzukriegen.

@Fragesteller : die Frage wäre übrigens auch nicht aufgetaucht, sofern statt mrYes mbYes usw. verwendet worden wäre (so wie die Parameter in deinem MessageDlg auch heißen). Auch diese Konstanten sind in Dialogs.pas enthalten und auch so wäre die Controls.pas auch überflüssig. Durch die Verwendung von mrYes wird zumindest in der betroffenen Unit überflüssigerweise auch die Unit Contols.pas in die EXE mit eingelinkt.

Edit : der Fehler kommt angeblich bei mrYes, an dem mbYes vorher stört Delphi sich wohl nicht. Warum ? Die Dialogs.pas steht in der Uses.

Sharky 18. Feb 2008 06:44

Re: MessageDlg
 
Zitat:

Zitat von Hansa
..... sofern statt mrYes mbYes usw. verwendet worden wäre (so wie die Parameter in deinem MessageDlg auch heißen). ...

:shock:

Du verwendest also die mbxxx Konstanten (MessageButton) auch für die die Antworten (MessageRresult)??
Das nenne ich mal saubere Programmierung.

bitsetter 18. Feb 2008 08:07

Re: MessageDlg
 
Zitat:

Zitat von Hansa
Mann, Mütze. :stupid: :mrgreen: Was steht denn hier ?
Zitat:

Zitat von Nastarowje
Delphi-Quellcode:
case MessageDlg('Datei existiert noch nicht. Soll Sie angelegt werden?',mtInformation, [mbYes,mbNo], 0) of
      mrYes : Form1.Close;
      mrNo : Form1.Close;
    end;

Da kann man wohl kaum von einem "formlosen" Form ausgehen, oder doch ? :gruebel:

Zitat:

Zitat von Nastarowje
Die Resultate Form1.close sind nur fiktiv. Der Code fehlt noch.


Hansa 18. Feb 2008 12:48

Re: MessageDlg
 
Zitat:

Zitat von Sharky
Du verwendest also ...

Papperlapapp verwende ich. :mrgreen: Ich habe lediglich den Quelltext des Fragestellers zitiert. Und der mischt munter die Konstanten und braucht deshalb dann die Controls.pas. Warum ? Weil darin mrYes etc. deklariert ist. Dazu genügt ein Blick in die VCL (Dialogs.pas). Und siehe an :

Delphi-Quellcode:
  TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore,
    mbAll, mbNoToAll, mbYesToAll, mbHelp);

function MessageDlg(const Msg: string; DlgType: TMsgDlgType;
  Buttons: TMsgDlgButtons; HelpCtx: Longint): Integer;
mrYes usw. steht da eben NICHT drin. Der Hai hat sich hier wohl verbissen. :zwinker: Selbst wenn es sich nicht auswirkt, weil momentan mrYes=mbYes ist, ich würde nicht den einen möglichen Konstanten-Satz als Parameter-Option zulassen und dann den Wert mit Hilfe eines anderen Konstanten-Satzes auswerten, wie das der Fragesteller gemacht hat.

Die genannte dirty Lösung (nur wegen mrYes Controls.pas noch in Uses reinschreiben) beseitigt zwar das aufgetauchte Symptom, für mich ist es trotzdem so nicht 100% richtig.

DeddyH 18. Feb 2008 12:58

Re: MessageDlg
 
Nicht Äpfel mit Birnen (hier: TMsgDlgButtons mit Word bzw. integer) verwechseln. Die Hilfe von Delphi 5 sagt zu MessageDlg:
Zitat:

MessageDlg zeigt in der Mitte des Bildschirms ein Dialogfeld mit einer Meldung an.

Unit

Dialogs

Kategorie

Dialogfelder und Meldungen

function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;

Beschreibung

Mit MessageDlg können Sie ein Meldungsfeld anzeigen und die Antwort des Benutzers ermitteln. Der Parameter Msg enthält die Meldung. Der Parameter DlgType bestimmt den Typ des eingeblendeten Meldungsfeldes. Der Parameter AButtons legt fest, welche Schaltflächen das Meldungsfeld enthält. Buttons ist vom Typ TMsgDlgBtns. Da dieser Typ eine Menge repräsentiert, können auch mehrere Schaltflächen angezeigt werden. Der Parameter HelpCtx bestimmt den Hilfebildschirm, der angezeigt wird, wenn der Anwender die Schaltfläche Hilfe anklickt, oder F1 drückt.

MessageDlg liefert den Wert der Schaltfläche zurück, auf die der Benutzer geklickt hat. Der Parameter kann folgende Rückgabewerte enthalten:

Rückgabewerte

mrNone mrAbort mrYes
mrOk mrRetry mrNo
mrCancel mrIgnore mrAll


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