czwartek, 13 sierpień 2020
 
Strona główna Języki programowania Okna dialogowe w Delphi

Okna dialogowe w Delphi

W typowych programach występuje wiele okienek, począwszy od okna głównego (zwykle Form1), okna dialogowe z palety Dialogs aż do prostych okienek dialogowych. Poniżej przedstawiono podstawowe informacje na temat ich wykorzystania.


Okna

  1. ShowMessage
  2. ShowMessagePos
  3. ShowMessageFmt
  4. MessageDlg
  5. MessageDlgPos
  6. MessageDlgPosHelp
  7. CreateMessageDialog
  8. InputBox
  9. InputQuery
  10. PromptForFileName
  11. SelectDirectory
  12. Funkcje i zmienne pomocnicze

  13. ForceCurrentDirectory
  14. IsAbortResult
  15. IsAnAllResult
  16. IsNegativeResult(f)
  17. IsPositiveResult
  18. StripAllFromResult
  19. Typy i stałe pomocnicze

  20. TMsgDlgType
  21. TMsgDlgBtn, TMsgDlgButtons
  22. Kody zwracanych wartości o naciśniętych przyciskach
  23. TModalResult
  24. Formatowanie liczb, tekstów, itp. w stylu C
do góry
  1. ShowMessage
  2. ShowMessage
    procedure ShowMessage(const Komunikat: string);
    

    Wyświetla proste okno komunikatów w środku ekranu z jednym przyciskiem OK. Tytułem okna jest nazwa aplikacji. W oknie wyświetlana jest treść "Komunikatu". Długie napisy są przenoszone do następnej linii. Można również wymusić przejście do nowej linii wprowadzając znak #13. Ctrl+C kopiuje treść komunikatu do schowka.

    ShowMessage - przykład
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         ShowMessage('Autorem programu jest Piotr Kotarski'#13+
                     'KALETY 2005');
    end;
    
    do góry
  3. ShowMessagePos
  4. ShowMessagePos
    procedure ShowMessagePos(const Komunikat: string;
                             X, Y: Integer);
    

    Odmiana ShowMessage wyświetlająca okno w określonym miejscu ekranu.
    X, Y - współrzędne określające położenie względem lewego górnego rogu ekranu

    do góry
  5. ShowMessageFmt
  6. ShowMessageFmt
    procedure ShowMessageFmt(const Komunikat: string;
                             Parametry: array of const);
    

    Odmiana ShowMessage umożliwiająca wyświetlanie tekstu formatowanego w stylu języka C. Daje to możliwość wyświetlania wartości zmiennych i wyrażeń.
    "Komunikat" jest tekstem, który może zawierać znaczniki formatujące sposób wyświetlania argumentów podanych w tablicy "Parametry".

    ShowMessageFmt - przykład
    procedure TForm1.Button1Click(Sender: TObject);
    var
        punkty,razem:integer;
        gracz:string;
    begin
        punkty:=34;
        razem:=40;
        gracz:='Gienek';
        ShowMessageFmt('Gracz %s uzyskał %u punktów,'#13+
                       'co stanowi %5.1f%% punktów możliwych do zdobycia'#13,
                       [gracz,punkty,100*punkty/razem]);
    end;
    
    do góry
  7. MessageDlg
  8. MessageDlg
    function MessageDlg(
                        const Komunikat: string;
                        Typ: TMsgDlgType;
                        Przyciski: TMsgDlgButtons;
                        Pomoc: Longint
                        ):Word;
    

    Znaczenie parametrów:
    "Komunikat" jest wyświetlanym tekstem,
    "Typ" określa ikonę oraz tytuł okna,
    "Przyciski" jest zbiorem typu wyliczeniowego TMsgDlgButtons określającego, jakie zostaną wyświetlone przyciski,
    "Pomoc" jest numerem pomocy kontekstowej (=0 oznacza brak pomocy).

    MessageDlg wyświetla w środku ekranu okno z ikoną, tekstem oraz określonym przez programistę zbiorem przycisków. Funkcja ta zwraca kod naciśniętego przycisku (stała mrNazwa).

    MessageDlg - wygląd
    MessageDlg('Uwaga! Twój czas się kończy...',
               mtWarning,
               [mbOK],
               0);
    
    MessageDlg('Nieprawidłowe dane! Czy wprowadzić nowe?',
               mtError,
               [mbYes,mbNo,mbCancel],
               0);
    
    MessageDlg('Wygrałeś!!!',
               mtInformation,
               [mbOK],
               0);
    
    MessageDlg('Jesteś pewny?',
               mtConfirmation,
               [mbYes,mbNo,mbCancel],
               0);
    
    MessageDlg('Czy zapisać?',
               mtCustom,
               [mbYes,mbYesToAll,mbNo,mbNoToAll,mbCancel],
               0);
    

    Aby przejąć kod przycisku należy użyć instrukcji warunkowej if lub wyboru case.

    MessageDlg - przykłady wykorzystania
              if MessageDlg('Jesteś pewny?',mtConfirmation,
                            [mbYes,mbNo,mbCancel],0) = mrYes
              then {coś tam};
    //--------------------------------------------------------------
              case MessageDlg('Czy zapisać?',mtCustom,
                         [mbYes,mbYesToAll,mbNo,mbNoToAll,mbCancel],0) of
                 mrYes:      {coś tam};
                 mrYesToAll: {coś tam};
                 mrNo:       {coś tam};
                 mrNoToAll:  {coś tam};
              end;
    
    do góry
  9. MessageDlgPos
  10. MessageDlgPos
    function MessageDlgPos(
                        const Komunikat: string;
                        Typ: TMsgDlgType;
                        Przyciski: TMsgDlgButtons;
                        Pomoc: Longint;
                        X, Y: Integer): Word;
    

    Odmiana funkcji MessageDlg wyświetlająca okno w określonym miejscu ekranu.
    X,Y - współrzędne określające położenie względem lewego górnego rogu ekranu. Pozostałe parametry i sposób wykorzystania jak wyżej.

    do góry
  11. MessageDlgPosHelp
  12. MessageDlgPosHelp
    function MessageDlgPosHelp(
                        const Komunikat: string;
                        Typ: TMsgDlgType;
                        Przyciski: TMsgDlgButtons;
                        Pomoc: Longint;
                        X, Y: Integer;
                        const NazwaPlikuHelp: string): Word;
    

    NazwaPlikuHelp - nazwa zewnętrznego pliku *.HLP

    Odmiana funkcji MessageDlgPos z odrębnym plikiem pomocy kontekstowej. Pozostałe parametry i sposób wykorzystania jak wyżej.

    do góry
  13. CreateMessageDialog
  14. CreateMessageDialog
    function CreateMessageDialog(
                        const Komunikat: string;
                        Typ: TMsgDlgType;
                        Przyciski: TMsgDlgButtons;): TForm;
    

    Tworzy okno dialogowe podobne do MessageDlg do wielokrotnego użytku, ale nie wyświetla go. Okno jest typu TForm, a więc można wykorzystać jego wszystkie właściwości przed wyświetleniem. Uaktywnienie następuje za pomocą metody ShowModal. Po naciśnięciu przycisku następuje jego zamknięcie i kod naciśniętego przycisku jest przypisywany do właściwości ModalResult oraz zwracany funkcją ShowModal. Stąd wynikają dwa sposoby wykorzystania:

    CreateMessageDialog - przykłady wykorzystania
    var okno:TForm;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin  okno:=CreateMessageDialog('Jesteś pewny?',
                                     mtConfirmation,[mbYes,mbNo,mbCancel]);
           okno.Left:=100;
           okno.Top:=50;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin  if okno.ShowModal=mrYes
                 then {coś tam};
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin  okno.ShowModal;
           if okno.ModalResult=mrYes
                 then {coś tam};
    end;
    
    do góry
  15. InputBox
  16. InputBox
    function InputBox(const Tytul,
                            Tekst,
                            Domyslny: string): string;
    

    Tytul - tytuł okienka,
    Tekst - treść okienka, zwykle jest podpowiedzią dotyczącą wprowadzanego tekstu,
    Domyslny - domyślny tekst w polu edycyjnym.

    Otwiera okienko dialogowe umożliwiające wprowadzenie tekstu. Okno zawiera dwa przyciski [OK] i [Cancel]. Naciśnięcie [OK] powoduje zwrócenie wprowadzonego tekstu, natomiast [Cancel] zwraca tekst domyślny. Program wywołujący nie ma możliwości sprawdzenia, który przycisk naciśnięto!

    InputBox - przykład
    procedure TForm1.Button3Click(Sender: TObject);
    begin Edit1.Text:=InputBox(
                          'Miasto',
                          'Podaj miejsce zamieszkania:',
                          'Kalety');
    end;
    
    do góry
  17. InputQuery
  18. InputQuery
    function InputQuery(const Tytul,
                              Tekst: string;
                              var Wartosc: string):Boolean;
    

    Tytul - tytuł okienka,
    Tekst - treść okienka, zwykle jest podpowiedzią dotyczącą wprowadzanego tekstu,
    Wartosc - zmienna tekstowa. Jej wartość jest wyświetlana w polu edycyjnym i zmieniana niezależnie od nacisniętego przycisku.
    InputQuery otwiera okienko dialogowe umożliwiające wprowadzenie tekstu. Zawiera dwa przyciski [OK] i [Cancel]. Funkcja zwraca True jeżeli naciśnięto [OK], False gdy [Cancel]

    InputQuery - przykład
    procedure TForm1.Button1Click(Sender: TObject);
    var gracz:string;
    begin  gracz:='Piotr';
           if InputQuery(
                     'Gracz',
                     'Podaj swoje imię lub pseudonim:',
                     gracz)
           then Edit1.Text:=gracz;
    end;
    
    do góry
  19. PromptForFileName
  20. PromptForFileName
    function PromptForFileName(
                        var Nazwa: string;
                        const Filtr: string = '';
                        const Rozszerzenie: string = '';
                        const Tytul: string = '';
                        const KatalogPocz: string = '';
                        SaveDialog: Boolean = False): Boolean;
    

    Funkcja otwiera okno dialogowe umożliwiające wskazanie pliku do otwarcia (Open...) lub zapisu (Save as...). Funkcja zwraca True, jeżeli użytkownik wskazał jakiś plik, False jeżeli kliknięto [Cancel] lub naciśnięto ESC.

    Nazwa - zmienna tekstowa. Jej wartość przy otwarciu okna ustala nazwę domyślną. Po zamknięciu zmienna zawiera wybraną nazwę pliku.
    Filtr - maska plików w postaci: 'nazwa filtru|*.ext|...' np.:

       'Pliki tekstowe (*.txt)|*.TXT|Programy w Pascalu (*.pas)|*.PAS'
       'Pliki Delphi|*.PAS;*.DPK;*.DPR'
    Domyślnie:
       'All files (*.*)|*.*'
    

    Rozszerzenie - domyślne rozszerzenie.
    Tytul - tytuł okna dialogowego (domyślnie 'Open' lub 'Save As').
    KatalogPocz - katalog bieżący okna. Jeżeli nie podamy lub nie istnieje to:
    - jeżeli ForceCurrentDirectory = True to katalog bieżący,
    - jeżeli ForceCurrentDirectory = False to "Moje Dokumenty".
    SaveDialog ustala typ okna: True -> "Save as" | False -> "Open"

    PromptForFileName - przykład
    procedure TForm1.Button1Click(Sender: TObject);
    var    nazwa:string;
    begin  nazwa:='dane';
           if PromptForFileName(
                       nazwa,
                       'Pliki tekstowe (*.txt)|*.txt|Pliki *.dat|*.dat',
                       '',
                       'Otwórz plik danych',
                       'd:\',
                       True)
           then Edit1.Text:=nazwa;
    end;
    
    do góry
  21. SelectDirectory
  22. (Uwaga: funkcja wymaga modułu FileCtrl w uses)
    Funkcja otwiera okno wyboru katalogu. Ma dwie postacie. W obydwu składniach SelectDirectory zwraca True jeżeli wybrano katalog i naciśnięto OK, i False jeżeli naciśnięto Cancel lub nie wybrano katalogu.

    SelectDirectory - 1
    function SelectDirectory(const Tytul: string;
                             const Root: WideString;
                             out Directory: string): Boolean; overload;
    

    Pierwsza postać wyświetla standardowy "Windows directory browser" i nie zmienia bieżącego katalogu.

    Tytul - napis w podtytule okna (tytuł pobierany jest z Windowsa),
    Root - domyślny katalog główny,
    Katalog - wybrany katalog jako tekst.

    SelectDirectory - 2
    function SelectDirectory(var Katalog: string;
                             Opcje: TSelectDirOpts;
                             Pomoc: Longint): Boolean; overload;
    

    Druga postać wyświetla "Select Directory dialog box" (z możliwością określenia nowego katalogu i podglądem list plików). Katalog - domyślny katalog startowy i wybrany katalog,
    Pomoc - numer pomocy kontekstowej,
    Opcje - określa czynności związane z nowym, nieistniejącym katalogiem:

    TSelectDirOpts
    type TSelectDirOpt = (sdAllowCreate, sdPerformCreate, sdPrompt);
    TSelectDirOpts = set of TSelectDirOpt;
    

    Opcje = [ ] -> brak możliwości określenia nowego katalogu,
    sdAllowCreate -> możliwość określenia nazwy nowego katalogu (nie tworzy go!!!)
    sdPrompt -> wyświetla okno dialogowe z zapytaniem o utworzenie nowego katalogu.
    sdPerformCreate -> tworzy katalog.

    SelectDirectory - 1
    procedure TForm1.Button3Click(Sender: TObject);
    var  nazwa:string;
    begin if SelectDirectory('Katalog',
                             'd:\',
                             nazwa)
          then Edit1.Text:=nazwa;
    end;
    
    SelectDirectory - 2
    procedure TForm1.Button4Click(Sender: TObject);
    var    nazwa:string;
    begin  nazwa:='d:\';
           if SelectDirectory(nazwa,
                              [sdAllowCreate,sdPerformCreate,sdPrompt],
                              0)
           then Edit1.Text:=nazwa;
    end;
    
    do góry

    Funkcje i zmienne pomocnicze

  23. ForceCurrentDirectory
  24. ForceCurrentDirectory
    var ForceCurrentDirectory: Boolean = False;
    

    Zmienna określająca domyślny katalog w oknach dialogowych "open..." i "save...".
    ForceCurrentDirectory = True - bieżący katalog,
    ForceCurrentDirectory = False - katalog "Moje dokumenty"

    do góry
  25. IsAbortResult
  26. IsAbortResult
    function IsAbortResult(const AModalResult: TModalResult): Boolean;
    

    Funkcja zwraca True, jeżeli AModalResult = [mrAbort, mrCancel].

    do góry
  27. IsAnAllResult
  28. IsAnAllResult
    function IsAnAllResult(const AModalResult: TModalResult): Boolean;
    

    Funkcja zwraca True, jeżeli AModalResult = [mrAll, mrNoToAll, mrYesToAll].

    do góry
  29. IsNegativeResult
  30. IsNegativeResult
    function IsNegativeResult(const AModalResult: TModalResult): Boolean;
    

    Funkcja zwraca True, jeżeli AModalResult = [mrNo, mrNoToAll].

    do góry
  31. IsPositiveResult
  32. IsPositiveResult
    function IsPositiveResult(const AModalResult: TModalResult): Boolean;
    

    Funkcja zwraca True, jeżeli AModalResult = [mrYes, mrOk, mrYesToAll, mrAll].

    do góry
  33. StripAllFromResult
  34. StripAllFromResult
    function StripAllFromResult(const AModalResult: TModalResult):TModalResult;
    

    Funkcja zmienia wyniki TModalResult usuwając "all":

    AModalResultWartość zwracana
    mrAllmrOk
    mrNoToAllmrNo
    mrYesToAllmrYes
    do góry

    Typy i stałe pomocnicze

  35. TMsgDlgType
  36. TMsgDlgType
    type TMsgDlgType =
            (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);
    

    Typ komunikatu (ikona i w niektórych przypadkach tytuł)

    mtWarningwykrzyknik na żółtym tleWarning
    mtErrorznak "x" czerwonym tleError
    mtInformationniebieska litera "i" w dymkuInformation
    mtConfirmationniebieska litera "?" w dymkuConfirm
    mtCustombrak ikonynazwa programu
    do góry
  37. TMsgDlgBtn, TMsgDlgButtons
  38. TMsgDlgButtons
    type TMsgDlgBtn =
           (mbYes,    mbNo,     mbOK,       mbCancel,
            mbAbort,  mbRetry,  mbIgnore,
            mbAll,    mbNoToAll,mbYesToAll, mbHelp);
    TMsgDlgButtons = set of TMsgDlgBtn;
    {przydatne stałe}
    const   mbYesNoCancel = [mbYes, mbNo, mbCancel];
            mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];
            mbOKCancel = [mbOK, mbCancel];
            mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];
            mbAbortIgnore = [mbAbort, mbIgnore];
    

    Rodzaje przycisków użytych w oknie oraz stałe, zawierające typwe zbiory przycisków.

    do góry
  39. Kody zwracanych wartości o naciśniętych przyciskach
  40. przyciskkod powrotu
    mbOKmrOk
    mbCancelmrCancel
    mbYesmrYes
    mbNomrNo
    mbAbortmrAbort
    mbRetrymrRetry
    mbIgnoremrIgnore
    mbAllmrAll
    mbNoToAllmrNoToAll
    mbYesToAllmrYesToAll
    do góry
  41. TModalResult
  42. - reprezentuje zwracaną wartość z modalnych okien dialogowych.
    TModalResult
    type TModalResult = Low(Integer)..High(Integer);
    
    StałaWartośćZnaczenie
    mrNone0Nic. Używana jako wartość domyślna.
    mrOkidOKPrzycisk OK.
    mrCancelidCancelPrzycisk CANCEL.
    mrAbortidAbortPrzycisk ABORT.
    mrRetryidRetryPrzycisk RETRY.
    mrIgnoreidIgnorePrzycisk IGNORE.
    mrYesidYesPrzycisk YES.
    mrNoidNoPrzycisk NO.
    mrAllmrNo + 1Przycisk ALL.
    mrNoToAllmrAll + 1Przycisk NO TO ALL.
    mrYesToAllmrNoToAll + 1Przycisk YES TO ALL.
    do góry
  43. Formatowanie liczb, tekstów, itp. w stylu C
  44. znaczniki formatu
    '%[indeks:][-][szerokość][.precyzja]typ'
    
    indeks: numer parametru na liście (liczone od 0)
    - wyrównanie do lewej
    szerokość szerokość pola (liczba znaków)
    Brak tej wartości spowoduje przyjęcie szerokości minimalnej
    dla danej
    .precyzja liczba cyfr po przecinku (dla liczb rzeczywistych)
    lub liczba cyfr całkowitych (w razie potrzeby uzupełniona zerami)
    typ d całkowity dziesiętny ze znakiem
    u całkowity dziesiętny bez znaku
    e rzeczywisty zmiennoprzecinkowy naukowy
    np: ("-d.ddd...E+ddd").
    f rzeczywisty stałoprzecinkowy ("-ddd.ddd...").
    g rzeczywisty (e) lub (f) w zależności,
    który format daje krótszą postać
    n rzeczywisty stałoprzecinkowy z separatorami tysięcy
    np: ("-d,ddd,ddd.ddd...").
    m rzeczywisty walutowy zgodnie z ustawieniami Windows Control Panel
    np: ("-d ddd ddd.dd zł").
    p wskaźnikowy 8 cyfr HEX
    s łańcuchowy (Char, String lub PChar)
    x całkowity heksadecymalny.

    Użycie * w miejsce szerokości i precyzji pozwala na podanie tych wartości jako argumentów (całkowitych!), np.:

    '%*.*f', [8, 2, 123.456]
    

    jest równoważne:

    '%8.2f', [123.456]
    

    Indeks pozwala na powtórne wykorzystanie tego samego argumentu, np.:

    '%d %d %d %0:d %d', [11,22,33,44]
    

    da:

    11 22 33 11 22
    

    Aby wyprowadzić procent "%" należy zastosować znacznik"%%"

    do góry
© mgr inż. Piotr Kotarski, Kalety