MessageDlg
Mammoth
Objaśnienie definicji funkcji MessageDlg
const Msg: string
- treść komunikatu (typ String).
DlgType: TMsgDlgType
- określa typ wyświetlanego komunikatu. Tabela 2 przedstawia możliwe wartości oraz ich działanie.
Buttons: TMsgDlgButtons
- określa, jakie przyciski mają znajdować się w okienku dialogu (patrz Tabela 3).
HelpCtx: Longint
- określa id treści pomocy.
MessageDlg
jest funkcją, dlatego zwraca wartość po wykonaniu. Jest ona typu Word. Mimo to funkcję można przypisać każdej zmiennej typu całkowitego (Integer, Cardinal, Byte itd.). Wartość, jaką zwraca funkcja to identyfikator naciśniętego przycisku (tak jak w MessageBox
). Za pomocą tej właściwości możemy dostosować działanie programu do decyzji, jaką podjął użytkownik w związku z wywołanym komunikatem. Dla przykładu.
Listing #1: Wykonywanie programu w zależności od przycisku naciśniętego w komunikacie.
procedure ShowMessageDlg;
var
x: Integer;
begin
x := MessageDlg('Treść komunikatu', mtConfirmation, mbYesNo, 0);
if x = mrYes then
//zdarzenie, jakie wykona się, jeżeli w komunikacie naciśnięto przycisk Tak
else
//zdarzenie, jakie wykona się, gdy nie zostanie naciśnięty przycisk Tak (jeżeli nie naciśnięto Tak to na pewno naciśnięto Nie ? komunikat ma dwa przyciski);
end;
Procedura przypisuje zmiennej x wartość zwrotną funkcji MessageDlg
(to znaczy informację, który przycisk został naciśnięty). Takie wywołanie spowoduje najpierw wyświetlenie komunikatu i zatrzymanie wykonywania procedury do czasy, gdy komunikat zostanie zamknięty (zwróci wartość). Następnie sprawdzana jest wartość, jaką zwrócił komunikat (tj. zmiennej x). Jeżeli naciśnięto przycisk Tak wykonane zostaną odpowiednie czynności, w przeciwnym razie zostaną wykonane inne (dialog ma tylko dwa przyciski, dlatego istnieją dwa warianty ? zostanie zatwierdzony lub nie).
Komunikat, jaki zostanie wyświetlony w tej procedurze będzie treści ?Treść komunikatu?. Jego tytuł będzie brzmiał ?Confirmation?, będzie zawierał obrazek dymka ze znakiem zapytania po lewej stronie (patrz Tabela 2). Komunikat będzie miał wspomniane dwa przyciski ? Tak i Nie (patrz Tabela 3).
Zauważ, że wartość x nie jest typu Word (jak podpowiada definicja funkcji), ale Integer. Oczywiście nie ma w tym żadnego błędu ? obydwa typy wartości to liczba całkowita.
Tabela 1
Wartości zwrotne MessageDlg
są takie same jak MessageBox
. Zauważ przy tym, że mogą być ?stałe? lub ?liczbowe?. W istocie między obiema nie istnieje żadna różnica. Nie ważne jest czy w warunku sprawdzającym wartość zwrotną podanym 1, czy mrOK
. Wartości zwrotne ?stałe? zostały zapewne umieszczone dla ułatwienia ? prościej zapamiętać, że wartość zwrotna morze mieć postać mr + nazwa przycisku niż 4, czy 6.
Przycisk | Wartość zwrotna (stała) | Wartość zwrotna (liczbowa) |
---|---|---|
OK | mrOk | 1 |
Anuluj | mrCancel | 2 |
Tak | mrYes | 6 |
Nie | mrNo | 7 |
Przerwij | mrAbort | 3 |
Powtórz | mrRetry | 4 |
Ignoruj | mrIgnore | 5 |
Tabela 2
Poniższe wartości ustawiają takie parametry dialogu jak tytuł okienka oraz motyw graficzny znajdujący się po lewej stronie komunikatu. W MessageBox
natomiast obydwa parametry możemy ustawić oddzielnie.
Wartość | Tytuł okienka | Obrazek |
---|---|---|
mtCustom | nazwa programu | brak |
mtInformation | Information | dymek z literą I |
mtWarning | Warning | Trójkącik z wykrzyknikiem |
mtError | Error | Kółeczko z X |
mtConfirmation | Confirmation | dymek ze znakiem zapytania |
Tabela 3
W MessageDlg
nie możemy zadeklarować pojedynczych przycisków tak jak w MessageBox
(zawsze będzie ich trzy lub dwa). Z tego powodu funkcja ta jest używana raczej do ?konsultacji? programu z użytkownikiem.
Wartość | Guziki w okienku |
---|---|
mbYesNoCancel | Tak, Nie, Anuluj |
mbYesNo | Tak, Nie |
mbOKCancel | OK, Anuluj |
mbAbortRetryIgnore | Przerwij, Powtórz, Ignoruj |
Zauważ, że funkcja będzie mogła zwrócić takie wartości, jak 6, 7, 2, jeżeli zadeklarujemy mbYesNoCancle
w parametrze Buttons. W takim przypadku MessageDlg
nie będzie mógł zwrócić na przykład 10, czy 1.
Funkcja posiada przycisk zamknięcia (przycisk z x?em na belce). Jeżeli komunikat zostanie zamknięty za pomocą tego przycisku wartość zwrotna wyniesie, 2 co równoznaczne będzie z naciśnięciem przycisku Anuluj. W opisie Listing 1 podaliśmy, że komunikat może mieć dwie wartości zwrotne. Nie jest to do końca prawda, gdyż, jeżeli komunikat nie został zamknięty przy pomocy przycisku Tak to mógł on być zamknięta za pomocą przycisku z x?em lub Nie.
Dialogi tworzone za pomocą funkcji MessageDlg
mają zawsze więcej niż dwie wartości zwrotne (nawet, jeżeli mają dwa przyciski). Do sprawdzania wartości zwrotnych najlepiej posłużyć się składnią Case Of. Poniżej znajduje się poprawiona wersja Listingu 1.
Listing 2: Poprawiona wersja Listingu 1
procedure ShowMessageDlg;
begin
case MessageDlg('Treść komunikatu', mtConfirmation, mbYesNo, 0) of
6: {w przypadku, gdy naciśnięto Tak};
7: {w przypadku, gdy naciśnięto Nie};
2: {w przypadku, gdy naciśnięto X};
end;
end;
Okna dialogowe stworzone przy pomocy funkcji MessageDlg
mają bardzo ciekawą właściwość. Otóż, gdy komunikat jest aktywny i wciśniemy kombinację [Ctrl] + [C], jego treść zostanie skopiowana do schowka w postaci tekstu.
Zobacz też:
Tak dla ścisłości, to w MessageDlg można deklarować pojedyncze przyciski :-D
np. MessageDlg('Twój tekst', mtInformation, [mbOK], 0);
nie wiem czy wiesz, ale "może"" pisze się przez "ż" :D
Jeżeli chodzi o ten niepotrzebne sprawy to sparałem się, żeby artykuł był przyjazny dla początkujących programistów. Wychodze z założenia, że Ci bardziej doświadczeni weszli by po prostu do systemu pomocy Delphi, jeżeli potrzebowali by informacji na ten temat.
Wicie, pierwszy artykół... :-)
Następnym razem postaram się żeby było lepiej.
IMVHO ten artykuł jest trochę przydługi i opisuje niepotrzebne sprawy, np.
Tekst fajny, ale na przyszlosc, prosze zajrzyj do dzialu "Pomoc". Tam znajdziesz tekst o zasadach tworzenia artykulow w tym dziale.
Kodu juz nie mialem sily poprawiac.