Entwickler-Ecke

Sonstiges (Delphi) - wiedermal ein problem mit der MessageBox


hibbert - Mo 30.12.02 18:38
Titel: wiedermal ein problem mit der MessageBox
hallo,
ich habe ein problem mit der massagebox. und so sieht es aus:


Quelltext
1:
Application.MessageBox ('Konnte die Datei '+edit1.Text+'nicht finden.','',16 + 0);                    


was ist daran falsch ??
mfg hibbert


Delete - Mo 30.12.02 19:03

Verräts du uns auch die Fehlermeldung?


Quelltext
1:
Application.MessageBox (PChar('Konnte die Datei '+edit1.Text+'nicht finden.'),'',16 + 0);                    


Delete - Mo 30.12.02 19:13

:wink: Wozu? Du hast doch den Fehler enttarnt.
Aber viel wichtiger ist die Frage: warum so?

Quelltext
1:
... 16 + 0);                    

Wofür gibt´s denn die Konstanten? Zumal man sich dann auch noch in absehbarer Zukunft mehr darunter vorstellen kann als unter "16 + 0". :roll:


hibbert - Mo 30.12.02 22:02

hai,
ok, dass ich den fehler enttarnt habe, war mir ja schon fast klar aber wegen
Zitat:
... 16 + 0);
, wenn ich das weglasse erscheint nicht mehr das weiße X auf rotem hintergrund, was ich gerne dabei haben möchte.
und ich kenne das eben nur so, wenn es einen anderen weg gibt, edann immer her damit.
mfg hibbert


hibbert - Mo 30.12.02 22:09

hallo,
hab die lösung gerade selber herrausgefunden:

Quelltext
1:
2:
3:
4:
5:
var a:string;
begin
a:='Die Datei '+edit1.text+' konnte nicht gefunden werden.';
Application.MessageBox (PChar(a),'',16 + 0);
end;

ha, etwas länger, aber es funktioniert !! :wink:
oh, Luckie deine antwort hab ich übersehen :oops: , aber hier die fehlermeldung:
Zitat:
[Error] Unit1.pas(46): Incompatible types: 'String' and 'PChar'

und deine lösung funzt auch, DANKE !
mfg hibbert


Delete - Mo 30.12.02 22:39

Sag mir mal ganz schnell ohne nachzuschlagen was die 16 bewirkt!


hibbert - Di 31.12.02 14:43

soweit ich es weiß, ist die 16 für das weiße X auf rotem hintergrund.


Delete - Di 31.12.02 17:15

Auszug aus "WinUser.h":

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
#define MB_OK                       0x00000000L
#define MB_OKCANCEL                 0x00000001L
#define MB_ABORTRETRYIGNORE         0x00000002L
#define MB_YESNOCANCEL              0x00000003L
#define MB_YESNO                    0x00000004L
#define MB_RETRYCANCEL              0x00000005L
#if(WINVER >= 0x0500)
#define MB_CANCELTRYCONTINUE        0x00000006L
#endif /* WINVER >= 0x0500 */


#define MB_ICONHAND                 0x00000010L
#define MB_ICONQUESTION             0x00000020L
#define MB_ICONEXCLAMATION          0x00000030L
#define MB_ICONASTERISK             0x00000040L

#if(WINVER >= 0x0400)
#define MB_USERICON                 0x00000080L
#define MB_ICONWARNING              MB_ICONEXCLAMATION
#define MB_ICONERROR                MB_ICONHAND
#endif /* WINVER >= 0x0400 */

#define MB_ICONINFORMATION          MB_ICONASTERISK
#define MB_ICONSTOP                 MB_ICONHAND

#define MB_DEFBUTTON1               0x00000000L
#define MB_DEFBUTTON2               0x00000100L
#define MB_DEFBUTTON3               0x00000200L
#if(WINVER >= 0x0400)
#define MB_DEFBUTTON4               0x00000300L
#endif /* WINVER >= 0x0400 */

#define MB_APPLMODAL                0x00000000L
#define MB_SYSTEMMODAL              0x00001000L
#define MB_TASKMODAL                0x00002000L
#if(WINVER >= 0x0400)
#define MB_HELP                     0x00004000L // Help Button
#endif /* WINVER >= 0x0400 */

#define MB_NOFOCUS                  0x00008000L
#define MB_SETFOREGROUND            0x00010000L
#define MB_DEFAULT_DESKTOP_ONLY     0x00020000L

#if(WINVER >= 0x0400)
#define MB_TOPMOST                  0x00040000L
#define MB_RIGHT                    0x00080000L
#define MB_RTLREADING               0x00100000L
#endif

Nimm einfach die Dinger. A) dazu sind sie da. B) auch nach Wochen weißt du noch, was sie bedeuten. Und du musst nichts rechnen, du benutzt einfach or, etwa

Quelltext
1:
2:
MessageBox(0,'Echt grober Fehler',nil,
  MB_OK or MB_ICONWARNING);

Noch ein Beispiel:

Quelltext
1:
2:
3:
Messagebox(0,'Wollen Sie die Festplatte wirklich formatieren?',
  'Dumme Frage',
  MB_YESNOCANCEL or MB_ICONQUESTION or MB_DEFBUTTON2);

bedeutet "Ja/Nein/Abbrechen" + Frage-Icon und der Nein-Button ist der aktive, falls ein Voreiliger auf ENTER drückt.

usw.