Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Symbole in MessageBox (https://www.delphipraxis.net/2344-symbole-messagebox.html)

BrainCode 19. Jan 2003 09:43


Symbole in MessageBox
 
Hallo,
ich habe eine Frage zur MessageBox:

Ich bin vor einem halben Jahr von VB auf Delphi umgestiegen, komme damit auch ganz gut zurecht, aber eine Sache wundert mich etwas: Unter VB kann man der Funktion MsgBox auch einen Parameter übergeben, so dass links neben dem Text z.B. ein weißes X in einem roten Kreis (vbCritical) angezeigt wird. Dieses Symbol sieht man auch in der Fehlermeldung, wenn man unter Win98 im Explorer auf ein CD-Rom-Laufwerk klickt, in dem keine CD liegt.
Eben diese Option vermisse ich, wenn ich Application.MessageBox aufrufe. Ich würde gerne wissen, ob es eine einfachere Methode gibt, als die Windows-API zu benutzen.

RomanK 19. Jan 2003 09:56

Hoi und willkommen.
Schau dir mal MessageDlg an!!!

BrainCode 19. Jan 2003 10:06

Danke, ich probier's aus!

Daniel B 19. Jan 2003 10:09

Hallo,

in der Application.MessageBox, ist es der dritte Parameter.
Ich erkläre es mal. Schreiben musst DU dort eine Zahl.

Und zwar ergibt die sich folgenderweise:

Code:
Symbol!!!

NAME              WERT SYMBOL
MB_ICONSTOP       16    Roter Kreis mit weissem X
MB_ICONQUSTION    32    Weisse Sprachblase mit Fragezeichen
MB_ICONWARNING    48    Gelbes Dreieck mit Ausrufezeichen
MB_ICONINFORMATION 64    Weisse Sprachblase mit Ausrufezeichen

Schaltfläche!!!

NAME               WERT  SCHALTFLÄCHE
MB_OK              0      OK
MB_OKCANCEL        1      OK, Abbrechen
MB_ABORTRETRYIGNORE 2      Abbrechen, Wiederholen, Ignorieren
MB_YESNOCANCEL     3      Ja, Nein, Abbrechen
MB_YESNO           4      Ja, Nein
MB_RETRYCANCEL     5      Wiederholen, Abbrechen
MB_HELP            16384  Hilfe

Standardvorgabe!!!

NAME               WERT  Standardvorgabe
MB_DEFBUTTON1       0      erste Schaltfläche
MB_DEFBUTTON2       256    zweite Schaltfläche
MB_DEFBUTTON3       512    dritte Schaltfläche
Du muss nun einen Wert aud Symbol, einen aus Schaltfläche und einen aus Standardvorgabe und das! ist dann Dein dritter Parameter der MessageBox.

Delphi-Quellcode:
Application.MessageBox('Text', 'Titel', 276);
Das wäre also eine MessageBox, mit einem Roter Kreis mit weissem X und den Buttons Ja und Nein, und der zweite Button wäre Fokusiert.

HTH.

Grüsse, Daniel :hi:

BrainCode 19. Jan 2003 10:18

Ja, so funktioniert das unter VB auch. Steht das nicht in der Hilfe, oder bin ich zu blöd, es zu finden???

Daniel B 19. Jan 2003 10:22

Ich finde es in der Hilfe auch nicht. Könnte aber auch daran liegen das ich meine Hilfe zerstört habe.
Fehlende Wörter, falsche Verknüpfungen usw... :oops:

Grüsse, Daniel :hi:

PS: Kann es mir auber durchaus vorstellen das es da drin steht

Daniel B 19. Jan 2003 10:25

Achja, Rückgabewerte gibt es ja auch noch, habs schon fast vergessen. ;)

Code:
Konstante Wert Bedeutung
           0   Fehler(Zu wenig Speicher)
IDOK      1   OK wurde gedrückt
IDCANCEL  2   Abbrechen wurde gedrückt
IDABORT   3   Abbrechen wurde gedrückt
IDRETRY   4   Wiederholen wurde gedrückt
IDIRGNORE 5   Ignorieren wurde gedrückt
IDYES     6   Ja wurde gedrückt
IDNO      7   Nein wurde gdrückt
Grüsse, Daniel :hi:

nailor 19. Jan 2003 11:46

Zitat:

Zitat von Meine Delphi-Hilfe (Keyword: Application.MessageBox)
Displays a specified message to the user.

function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;

Description

Use MessageBox to display a generic dialog box a message and one or more buttons. Caption is the caption of the dialog box and is optional.

MessageBox is an encapsulation of the Windows API MessageBox function. TApplication’s encapsulation of MessageBox automatically supplies the missing window handle parameter needed for the Windows API function.

The value of the Text parameter is the message, which can be longer than 255 characters if necessary. Long messages are automatically wrapped in the message box.

The value of the Caption parameter is the caption that appears in the title bar of the dialog box. Captions can be longer than 255 characters, but don't wrap. A long caption results in a wide message box.

The Flags parameter specifies what buttons appear on the message box and the behavior (possible return values). The following table lists the possible values. These values can be combined to obtain the desired effect.

Value Meaning

MB_ABORTRETRYIGNORE The message box contains three push buttons: Abort, Retry, and Ignore.
MB_OK The message box contains one push button: OK. This is the default.
MB_OKCANCEL The message box contains two push buttons: OK and Cancel.
MB_RETRYCANCEL The message box contains two push buttons: Retry and Cancel.
MB_YESNO The message box contains two push buttons: Yes and No.
MB_YESNOCANCEL The message box contains three push buttons: Yes, No, and Cancel.

MessageBox returns 0 if there isn’t enough memory to create the message box. Otherwise it returns one of the following values:

Value Numeric value Meaning

IDOK 1 The user chose the OK button.
IDCANCEL 2 The user chose the Cancel button.
IDABORT 3 The user chose the Abort button.
IDRETRY 4 The user chose the Retry button.
IDIGNORE 5 The user chose the Ignore button.
IDYES 6 The user chose the Yes button.
IDNO 7 The user chose the No button.

Es steht was davon drin :shock: . Über
MB_HELP 16384 Hilfe
schweigt zwar auch sie, aber es funktioniert (gibt OK und Hilfe Buttons).

Nur der Vollständigkeit halber: Was für einen Wert kriegt man, wenn der Hilfe-Knopf gedrückt wird.

Daniel B 19. Jan 2003 11:51

Zitat:

Zitat von Nailor
Es steht was davon drin :shock: . Über
MB_HELP 16384 Hilfe
schweigt zwar auch sie, aber es funktioniert (gibt OK und Hilfe Buttons).

Gut das es ein Forum gibt, wo man sowas erfährt. ;)

Zitat:

Nur der Vollständigkeit halber: Was für einen Wert kriegt man, wenn der Hilfe-Knopf gedrückt wird.
Gar nichts. Darf auch nicht.
Wenn Du auf Hilfe Drückst, dann wird Deine Hilfedatei geöffnet. Die Box bleibt erhalten und Du musst dann immernoch auf Ja, Nein oder was auch immer klicken. Hilfe heisst nicht Box weg, so wie bei den anderen Button, somit auf kein Rückgabewert.

Grüsse, Daniel :hi:

CalganX 19. Jan 2003 11:51

Versuche es mal mit IDHELP
Sonst halte mal STRG gedrückt und klicke im Quelltext auf IDNO o.ä. dann einfach mal ein wenig suchen.

Chris

[EDIT]*SHIT*, zu spät und auch noch falsch :cry: [/EDIT]

Daniel B 19. Jan 2003 11:59

Zitat:

Zitat von Chakotay1308
Versuche es mal mit IDHELP

Gleich zwei mal Falsch. ;)

Man erhält nicht IDxxx, sondern den Wert.
Wurde z.B. Ja gedrückt, so erhält man 6!

Delphi-Quellcode:
if Application.MessageBox('Programm Beenden?', 'Tital', 36) = 6 then
begin
  Application.Terminate;
end;
Wenn also "Ja" gedrückt wurde, wird das Programm geschlossen.

Grüsse, Daniel :hi:

nailor 19. Jan 2003 11:59

Hey! Dreimal D6 Personal, drei verschiedene Hilfen, oder wie :?

CalganX 19. Jan 2003 12:00

@ Daniel: Ja, du erhälst zwar eine Zahl, aber IDxxx ist eine konstante und kann somit anstelle der Zahl genutzt werden!

Chris

sakura 19. Jan 2003 12:02

@Daniel B: Was ist gegen diesen Schreibstil einzuwenden. Der ist doch viel leichter zu lesen, als deine Methode mit den festen Zahlenwerten:?:

Delphi-Quellcode:
if Application.MessageBox('Programm Beenden?', 'Tital', MB_ICONQUSTION + MB_YESNO) = IDYES then
begin
  Application.Terminate;
end;
...:cat:...

Daniel B 19. Jan 2003 12:03

Zitat:

Zitat von Nailor
Hey! Dreimal D6 Personal, drei verschiedene Hilfen, oder wie :?

Wie kommste den da drauf?
Ich hab nicht behauotet, das ich es aus der Hilfe habe.

Meine Hilfe sagt zu dem Suchbegriff Application.MessageBox:

Zitat:

StrLCopy Example
The following example uses an edit control and a button on a form. When the button is clicked, the first X bytes of the edit control are copied into a buffer, where X is a predefined number.

uses SysUtils;

const MAX_BUFFER = 10;
procedure TForm1.Button1Click(Sender TObject);
var
Buffer: array [0..MAX_BUFFER] of char;
begin
StrLCopy(Buffer, PChar(Edit1.Text), MAX_BUFFER);
Application.MessageBox(Buffer, 'StrLCopy Example', MB_OK);
end;
Zufrieden? ;)

Grüsse, Daniel :hi:

Daniel B 19. Jan 2003 12:05

Zitat:

Zitat von sakura
@Daniel B: Was ist gegen diesen Schreibstil einzuwenden. Der ist doch viel leichter zu lesen, als deine Methode mit den festen Zahlenwerten:?:

Nichts, die einen können sich besser Zahlen merken, die anderen eher Wörter, manche sind schreibfaul, manche nicht.
Jeder wie er möchte.
Ich möchte niemanden dazu zwingen, die Zahlen zu benutzen. Mit den Wörtern geht es natürlich auch. Ist nur mehr schreibaufwand.

Daniel B 19. Jan 2003 12:09

Zitat:

Zitat von sakura
Delphi-Quellcode:
if Application.MessageBox('Programm Beenden?', 'Tital', MB_ICONQUSTION + MB_YESNO) = IDYES then
begin
  Application.Terminate;
end;

<kleinigsei>Fokus setzen nicht vergessen! ;)</kleinigsei>

sakura 19. Jan 2003 12:09

Und warum schreibst Du dann folgendes?
Zitat:

Zitat von Daniel B
Gleich zwei mal Falsch. ;)

Man erhält nicht IDxxx, sondern den Wert.
Wurde z.B. Ja gedrückt, so erhält man 6!

Das ist ja komplett daneben. 6 entspricht doch IDYES.

...:cat:...

P.S. Ich glaube Dir gerne, dass Du Dir die Werte für die Messagebox merken kannst, aber glaube mir auch, die Konstantennamen zu nutzen ist ein großer Vorteil und wird in den meisten Firmen von den Entwicklern auch verlangt. In unserer Anwendung existieren über 3.700 Konstanten, die könnte sich keiner merken. Die Namen sind viel aussagekräftiger.

sakura 19. Jan 2003 12:12

Zitat:

Zitat von Daniel B
<kleinigsei>Fokus setzen nicht vergessen! ;)</kleinigsei>

Wieso, hast Du doch auch nicht ;)
MB_ICONQUESTION + MB_YESNO = 36
IDYES = 6
Exact Deine Werte!

Daniel B 19. Jan 2003 12:12

Zitat:

Zitat von sakura
Und warum schreibst Du dann folgendes?
Zitat:

Zitat von Daniel B
Gleich zwei mal Falsch. ;)

Man erhält nicht IDxxx, sondern den Wert.
Wurde z.B. Ja gedrückt, so erhält man 6!

Das ist ja komplett daneben. 6 entspricht doch IDYES.

Schon Klar, der RÜckgabewert ist 6 / IDYES, aber auf dem Button steht Ja.

RomanK 19. Jan 2003 12:15

Hoi,
ich hab jetzt mal ne doofe Frage:
Diese Konstanten haben einfach Zahlenwerte ???
Also kann ich in irgent einer If-Abfrage wenn ich den Wert 6 haben will auch schreiben
Delphi-Quellcode:
if i = IDYES then ...
was zugegebener Masen sehr unlogisch und dumm wäre, aber theoretisch möglich.

Daniel B 19. Jan 2003 12:16

1.

Zitat:

Zitat von Daniel B
Delphi-Quellcode:
Application.MessageBox('Text', 'Titel', 276);
Das wäre also eine MessageBox, mit einem Roter Kreis mit weissem X und den Buttons Ja und Nein, und der zweite Button wäre Fokusiert.

2.

Der Standardwert für den ersten Button ist 0. Da kannst Du so viele 0en dazu addieren, die 36 wird sich nicht ändern.
Den Standardmässig ist mMn., bei der Programm Beenden abfrage mit zwei Buttons, Ja, also der erste Button Fokusiert, somit ist die 36 berechtigt.

BrainCode 19. Jan 2003 20:25

Hallo nochmal,
ist jetzt schon einige Stunden her, dass ich die ersten Antworten bekommen habe. Ich hab jetzt endlich Zeit gehabt, meinen eigenen Computer zu starten, um die Tipps auszuprobieren, ich habe nämlich heute meinen "computerfreien Tag" (von meinen Eltern verordnet) :lol: .

Ich ziehe die MessageBox dem MessageDlg vor, denn das deutsche Windows hat dem englischen Delphi anscheinend nichts zu sagen, was die Sprache in MessageDlgs angeht, und ich habe was gegen deutsche Boxen mit englischer Beschriftung :wink:

Aber warum nimmt Borland, wenn es schon die API-Funktion MessageBox verwendet, nicht auch die kompletten Parameter in die Hilfe auf??? Oder liegt das ganze etwa an meiner Delphi-Version (D6Personal englisch von www.borland.com heruntergeladen)?

RomanK 19. Jan 2003 20:31

Hoi,
such mal nach consts.pas das dürfte helfen
anderenfalls kannst du dein D6 mit den Updates deutsch machen ...


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