|
Wszystko o MessageBox
Autor: Vnookality
Umieszczanie w swoich aplikacjach dodatkowych form do wyświetlania komunikatów nie ma zbytnio sensu, chociaż klika miesięcy temu tak robiłem (uff...). Jest za to dużo ciekawszy sposób na wyPwietlanie komunikatów przez nasz program. Dzięki metodzie Application->MessageBox(AnsiString,AnsiString,Unsigned Long) możemy wyPwietlać okna o dowolnej trePci i jak dalej się okaże z wybranymi ikonami oraz przyciskami.
Najprostszym sposobem wykorzystania tej funkcji jest przykładowy kod:
|
Unit1.cpp |
|
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Application->MessageBox("Przykładowy tekst okna.","Przykładowy tytuł okna",
MB_OK | MB_ICONINFORMATION);
}
| |
|
Pokazuje on przykładowe okno o treści "Przykładowy tekst okna." i o tytule "Przykładowy tytuł okna". Te dwa miejsca w funkcji Application->MessageBox() mogą być dowolne. Gorzej jest z parametrem wyświetlania przycisków (MB_OK) i stylowi ikony (w naszym przykładzie ikona informacyjna - MB_ICONINFORMATION).
Możliwe są następujące style przycisków:
MB_OK - wyświetla tylko przycisk OK
MB_OKCANCEL - wyświetla przyciski OK i Anuluj
MB_ABORTRETRYIGNORE - wyświetla przyciski Ponów, Zignoruj, Przerwij
MB_YESNOCANCEL - wyświetla przyciski Tak, Nie, Anuluj
MB_YESNO - wyświetla przyciski Tak, Nie
MB_RETRYCANCEL - wyświetla przyciski Ponów Próbę, Anuluj
i ikon:
MB_ICONHAND - wyświetla ikonę błędu (czerwony krzyżyk)
MB_ICONQUESTION - wyświetla ikonę pytania (znak zapytania)
MB_ICONEXCLAMATION - wyświetla ikonę ostrzeżenia (żółty wykrzyknik)
MB_ICONASTERISK - wyświetla ikonę informacji (mały wykrzyknik)
No dobra. Możemy zmieniać ilość przycisków, ikony itd., ale przy wybraniu przycisków innych niż proste MB_OK (tylko przycisk OK) nie możemy sterować oknem, co ma zrobić, gdy np. użytkownik nie kliknij na Tak tylko na Nie lub jeszcze na inny przycisk.
Aby sterować tym, co program ma robić przy kliknięciu na odpowiedni przycisk, musimy spytać się programu, jaki był wynik modalny (modal result) podanej operacji. Dla każdego przycisku jest zdefiniowana inna nazwa wyniku modalnego. Pokazuje to przykładowy kod (pyta się czy zamknąć system, czy też nie):
|
Unit1.cpp |
|
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Application->MessageBox("Czy chcesz zamknąć system?", "Zamknij system",
MB_YESNO | MB_ICONQUESTION) == mrYes)
{
ExitWindowsEx(EWX_SHUTDOWN, 0);
}
}
| |
|
Zwracany jest tu wynik mrYes odpowiadający kliknięciu na przycisk Yes czyli Tak. Odpowiednio dla każdego przycisku jest inna nazwa wyniku modalnego:
IDYES - przycisk Tak
IDNO - przycisk Nie
IDCANCEL - przycisk Anuluj
IDABORT - przycisk Przerwij
IDRETRY - przycisk Ponów próbę
IDIGNORE - przycisk Zignoruj
Uwaga! Pamiętajmy, że aby wynik miał sens, musimy zdefiniować odpowiednie przyciski, bo jaki sens będzie miało pytanie jaki był wynik modalny, jeżeli zdefiniowaliśmy przycisk OK? To samo dotyczy ustawiania wyniku modalnego do przycisku który nie został zdefiniowany, np. mrYes do MB_ABORTRETRYIGNORE.
|