[Delphi] MessageDlg

0

Mam taki kod:

    if JakiesWarunki then
    begin
        if MessageDlg('Wszystkie pola muszą by wypełnione!',
                   mtWarning,
                   [mbOK],
                   0) = mrOK
        then
        begin
            edtName.SetFocus;
            exit;
        end;
    end;


    J := MessageDlg('Czy chcesz zapisać zmiany?',
                    mtConfirmation,
                    [mbYes,mbNo],
                    0);
    case J of
        mrYes :
        begin
            JakisKod;
            Close;
        end;
        mrNo :
            Close;
    end;

Zmienna J jest typu Word. Ogólnie jest to fragment procedury OnClick pewnego przycisku. Są dwa okienka MessageDlg, które pojawiają się niezależnie od siebie.

Problem:
Gdy wcisnę OK na pierwszym MessageDlg, wszystko działa jak należy. Procedura jest przerywana, bo nie powinna dalej być kontynuowana. Ale gdy zamiast przyciskiem OK zamknę okno komunikatu przez Alt+F4 to wyskakuje mi drugi komunikat i procedura jest kontynuowana. Czy można to jakoś obejść??? Coś na wzór zdarzenia OnCloseQuery dla formy???

0

O ile się orientuję, to zamknięcie okna nie poprzez przycisk powoduje zwrócenie wartości idCancel. A skoro w oknie masz tylko przycisk OK, to może zrezygnujesz z if'a? Tzn. zamiast

if MessageDlg('Wszystkie pola muszą by wypełnione!', mtWarning, [mbOK], 0) = mrOK then

dasz

MessageDlg('Wszystkie pola muszą by wypełnione!', mtWarning, [mbOK], 0);
0

A nie można po prostu:

if JakiesWarunki then
    begin
        MessageDlg('Wszystkie pola muszą by wypełnione!',
                   mtWarning,
                   [mbOK],
                   0)
        edtName.SetFocus;
        exit;
    end;

//...

Niezależnie jak użytkownik zamknie okienko zawsze wykona sie Exit (o ile zostana spełnione JakiesWarunki).

//too late, too late :)

0

Fakt - najprostsze rozwiązania są najlepsze. Niepotrzebnie skomplikowałem sprawę. Dzięki [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1