Rückgabe von einer MessageBox!



  • Hi

    Ich habe das Problem das ich keine ahnung habe wie ich die Rückgabe einer MessageBox auswerten kann.

    Das ist die MessageBox die ich erstellen möchte:

    Application->MessageBox("Möchten sie nicht vorher Speichern", "Speichern", MB_YESNOCANCEL);
    

    Ich hoffe mir kann jemand helfen denn die SUFU und die BCB Help haben mir nicht geholfen. 😞

    😃 MFG Happymax 😃



  • If ( Application->MessageBox("Möchten sie nicht vorher Speichern", "Speichern", MB_YESNOCANCEL) == IDOK ) then.......;
    

    Wenn Du die Konstande MB_YESNOCANCEL gefunden hast, solltest Du auch die Rückgabewerte finden.

    Gruß Rudi



  • willst du mich verar***en?

    TApplication::MessageBox

    Mit der Methode MessageBox können Sie eine bestimmte Meldung für den Benutzer anzeigen.

    int __fastcall MessageBox(const char * Text, const char * Caption, int Flags = MB_OK);

    Beschreibung

    Mit MessageBox können Sie ein generisches Dialogfeld mit einer Meldung und einer oder mehreren Schaltflächen anzeigen. Der Parameter Caption ist der Titel des Dialogfeldes und ist optional.

    MessageBox ist eine Kapselung der Funktion MessageBox der Windows-API. Das für die API benötigte Fenster-Handle wird automatisch bereitgestellt.

    Der Wert des Parameters Text ist die Meldung, die gegebenenfalls länger als 255 Zeichen sein kann. Überlange Meldungen werden im Meldungsfeld automatisch umbrochen.

    Der Wert des Parameters Caption ist der Titel, der in der Titelleiste des Dialogfeldes angezeigt wird. Titel können länger als 255 Zeichen sein. Sie werden jedoch nicht umbrochen. Ein langer Titel führt zu einem breiten Meldungsfeld.

    Die Werte des Parameters Flags bestimmen die Schaltflächen, die im Meldungsfeld angezeigt werden, sowie das Verhalten des Fensters (mögliche Rückgabewerte). Die folgende Tabelle führt die zulässigen Werte auf. Um den gewünschten Effekt zu erzielen, können die Werte auch kombiniert werden.

    Wert Bedeutung

    MB_ABORTRETRYIGNORE Das Meldungsfeld enthält die drei Schaltflächen: Abbruch, Wiederholen und Ignorieren.
    MB_OK Das Meldungsfeld enthält eine Schaltfläche: OK.
    MB_OKCANCEL Das Meldungsfeld enthält two Schaltflächen: OK und Abbrechen.
    MB_RETRYCANCEL Das Meldungsfeld enthält two Schaltflächen: Wiederholen und Abbrechen.
    MB_YESNO Das Meldungsfeld enthält two Schaltflächen: Ja und Nein.
    MB_YESNOCANCEL Das Meldungsfeld enthält three Schaltflächen: Ya, Nein und Abbrechen.

    Der Rückgabewert der Methode MessageBox ist 0, wenn nicht genügend Speicher zur Erstellung des Meldungsfeldes vorhanden war. Andernfalls wird einer der folgenden Werte zurückgegeben:

    Wert Numerischer Wert Bedeutung

    IDOK 1 Es wurde die Schaltfläche OK gewählt.
    IDCANCEL 2 Es wurde die Schaltfläche Abbrechen gewählt.
    IDABORT 3 Es wurde die Schaltfläche Abbruch gewählt.
    IDRETRY 4 Es wurde die Schaltfläche Wiederholen gewählt.
    IDIGNORE 5 Es wurde die Schaltfläche Ignorieren gewählt.
    IDYES 6 Es wurde die Schaltfläche Ja gewählt.
    IDNO 7 Es wurde die Schaltfläche Nein gewählt.



  • 😕 😕 😕 😕

    WAS???

    Das was rudiS gesagt hat funktioniert schonmal halbwegs ich habe das jetzt so:

    if (Application->MessageBox("Möchten sie nicht vorher Speichern?", "Speichern?", MB_YESNOCANCEL| MB_ICONQUESTION) == IDYES ) {
    SD->Execute();
    Text->Lines->SaveToFile(SD->FileName);
    OD->Execute();
    Text->Lines->LoadFromFile(OD->FileName);
    }
    else if (Application->MessageBox("Möchten sie nicht vorher Speichern?", "Speichern?", MB_YESNOCANCEL| MB_ICONQUESTION) == IDNO ) {
    OD->Execute();
    Text->Lines->LoadFromFile(OD->FileName);
    }
    }
    

    Da funktioniert schonmal der erste Button ohne Probs doch beim 2ten drückt man drauf dann erscheint die Meldung gleich nochmal und wenn man dann nochmal auf den 2ten drückt dann funzt der auch.
    Beim 3ten Button ist es genau das Gleich problem.

    PS: Beim 3ten Button soll überhaupt nichts passieren falls sich welche wundern warum der nicht im Code erwähnt wird.

    MFG Happymax



  • Hallo

    wenn du MessageBox zweimal aufrufst, erscheint die MessageBox eben zweimal. Wenn du stattdessen den Rückgabewert auf verschiedene Werte überprüfen willst, must du erstmal den Rückgabewert eines Aufrufs in einer Variable zwischenspeichern und diesen dann vergleichen. Also schau mal welchen Typ MessageBox zurückgibt.

    /Edit : Eine Alternative wäre auch eine switch-Anweisung über alle möglihen Werte.

    bis bald
    akari



  • Hallo,

    entschuldige bitte ich bin nicht gerade so gut ich habe erst vor kurzem
    angefangen mit dem Programieren mit C++
    (vorher habe ich mit VB programiert da war das ein bischen einfacher)
    ich habe das nicht so ganz verstanden. 🙄

    MFG Happymax

    Edit:Also das die zweimal kommen weil ich sie zweimal aufrufe habe
    ich schon verstanden blos ich habe net verstanden wie ich das verhindern kann.



  • Ist denn das so schwer? In VB gibt's doch soweit ich weiß auch Variablen, oder?

    // Achtung: Pseudocode!
    // Meldung ausgeben und Wert zwischenspeichern
    unsigned int AnswerVal = Application->MessageBox("Möchten sie nicht vorher Speichern?", "Speichern?", MB_YESNOCANCEL| MB_ICONQUESTION);
    
    if(AnswerVal == IDYES)   {
       // Tue irgend was
    }   else if(AnswerVal == IDCANCEL)   {
       // Tue was anderes
    }   else   {
       // Tue noch was anderes
    }
    

    Ich glaube nicht, dass du das in VB großartig anders gemacht hast...



  • DANKE 😃 😃 😃 😃

    Funktionirt alles super
    jetzt habe ich es auch verstanden jetzt habe ich nur eine frage.
    ich habe ein SaveDialog
    nun habe ich das problem das wenn der benutzer auf abbrechen und nicht auf speichern drückt dann speichert er trozdem.

    und nochmal THX



  • Hallo,

    neue Frage = neuer Thread

    Wie (bzw. wann) speicherst du denn? Wertest du den Rückgabewert von Execute aus?



  • Happymax schrieb:

    nun habe ich das problem das wenn der benutzer auf abbrechen und nicht auf speichern drückt dann speichert er trozdem.

    Arbeite das Texteditor-Tutorial in der Hilfe durch, das erspart dir (und uns) eine Menge solcher Standardfragen.

    Und wie schon gesagt, bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!



  • Vielen Danke für die Hilfe
    und sorry


Anmelden zum Antworten