Okna komunikatów
Programista w Delphi ma do dyspozycji cały szereg okien komunikatów, które służą głownie do wymiany informacji pomiędzy użytkownikiem a systemem. Najprostszym sposobem porozumiewania się jest wyświetlenie informacji. Może do tego służyć następująca procedura:
ShowMessage (` Komunikat');
Wykonanie takiego rozkazu spowoduje wyświetlenie okna o następującym wyglądzie:
W przypadku tego typu okna użytkownik może jedynie kliknąć OK., nie ma możliwości wymiany informacji pomiędzy nim a systemem. W związku z tym, że okno komunikatów jest modalne przed wykonywanie dalszych czynności programu musi zostać ono zamknięte.
Okna dialogowe
Bardziej zaawansowana wymiana informacji pomiędzy użytkownikiem a systemem jest możliwa w przypadku zastosowania okna komunikatów, w którym użytkownik ma możliwość wyboru odpowiedzi. Umożliwia to funkcja: MessageDlg zwracająca wartość na podstawie której stwierdza się jaka opcję wybrał użytkownik.
Funkcja ta wymaga następujących parametrów:
Const Msg: string - napis wyświetlany w oknie komunikatu;
AType: TmsgDlgType - Rodzaj wyświetlanego okna dialogowego
Abuttons: TmsgDSlgButtons - Lista wartości definiujących przyciski obecne w oknie komunikatu, ujęta w nawiasy prostokątne.
HelpCtx: LongInt - Łącza do systemu pomocy, w naszym przypadku 0 oznacza brak łącza.
Wywołanie :
MessageDlg (`Czy naprawdę chcesz zakończyć program?', mtConfirmation, [mbYes, mbNo],0);
spowoduje wyświetlenie następującego okna komunikatów
Funkcja MessageDlg zwraca w tym przypadku wartość mrYes lub mrNo w zależności od wybranego przycisku. Można za pomocą tej samej funkcji wywołać również inne okna dialogowe. Ich rodzaje przedstawia tabela1.
Nazwa okna |
Tytuł |
Ikona jaką zawiera po wyświetleniu |
MtConfirmation |
Confirm (Potwierdzenie) |
Znak zapytania |
MtCustom |
Nazwa pliku wykonywalnego |
Brak symbolu |
MtError |
Error (Błąd) |
Znak stop |
MtInformation |
Information (Informacja) |
Litera „I” |
MtWarning |
Warning (Ostrzeżenie) |
Wykrzyknik |
Tabela 1
Do stosowanych okien możemy również dopasować odpowiednie rodzaje przycisków. Przyciski używane w oknach dialogowych przedstawia tabela2.
Nazwa przycisku |
Napis na przycisku |
MbAbort |
Abort (Przerwij) |
MbAll |
All (Wszystkie) |
MbCancel |
Cancel (Anuluj) |
MbHelp |
Help (Pomoc) |
MbIgnore |
Ignore (Ignoruj) |
MbNo |
No (Nie) |
MbYes |
Yes (Tak) |
MbOk |
OK. |
MbRetry |
Retry (Ponów próbę) |
Tabela 2
Odmianą funkcji MessageDlg jest funkcja MessageDlgPos, która wymaga dwóch dodatkowych argumentów całkowitych, definiujących współrzędne lewego górnego rogu okna komunikatu względem lewego górnego rogu ekranu.
Okna dialogowe do wprowadzania danych
Zastosowanie tego okna stanowi jeden z prostszych sposobów pobierania danych od użytkownika. Można je wywołać przez zastosowanie funkcji InputBox. Wywołanie następującej treści:
InputBox (`Wprowadzanie danych', `Podaj kolejny element:', `0')
powoduje pojawienie się okna o wyglądzie przedstawionym poniżej :
Komponenty edycyjne
Innym sposobem komunikowania się pomiędzy użytkownikiem a systemem jest wykorzystywanie komponentów edycyjnych.
Delphi udostępnia cztery komponenty kontrolek edycyjnych:
Edit,
Memo,
MaskEdit,
RichEdit.
Komponent Edit
Komponent Edit realizuje prostą kontrolę edycji jednowierszowej. Nie posiada właściwości Align ani Alignment. W tej kontrolce tekst może być wyrównywany tylko do lewej strony.
Komponent MaskEdit
Komponent MaskEdit to komponent Edit z dołączonym filtrem wejściowym lub maską. Nie jest to nowa, standardowa kontrolka Windows ale rozszerzenie standardowej kontrolki edycyjnej. Maska stosowana jest w celu wymuszenia ograniczeń na ilość bądź format wprowadzanych znaków. Komponent EditMask ma wpływ na stosowaną maskę wprowadzania. Po kliknięciu wielokropka przy właściwości EditMask wyświetlony zostanie Edytor Maski Wprowadzania, w którym można wybrać jedną z istniejących masek lub utworzyć własną.
Komponent Memo
Komponent Memo realizuje wielowierszową kontrolkę edycyjną. Najbardziej znacząca właściwość tego komponentu to Lines, która umożliwia zapisywanie komponentu Memo na dysk, ładowanie do komponentu tekstu pochodzącego z pliku lub przetwarzanie każdej linii notatki osobno. Cechą szczególną tego komponentu jest właściwość ScrollBars, która określa czy komponent posiada pionowy, poziomy, czy oba paski przewijania.
Komponent RichEdit
Komponent RichEdit jest największym i najlepszym komponentem spośród wszystkich edycyjnych. Umożliwia zmianę czcionki, stosowanie wcięć, pogrubianie czcionki, stosowanie kursywy, podkreślanie i wiele innych opcji.
Właściwości standardowych komponentów edycyjnych:
Właściwości dostępne na etapie projektowania:
AutoSelect
Komponenty: Edit, MaskEdit
Właściwość ta ustawiona na True powoduje, że gdy użytkownik przejdzie do komponentu przez naciśnięcie Tab to edytowany tam tekst zostanie zaznaczony. Wartość domyślna True.
AutoSize
Komponenty: Edit, MaskEdit
Właściwość ta ustawiona na True powoduje automatyczną zmianę rozmiaru komponentu, jeżeli rozmiar używanej w jego wnętrzu czcionki ulegnie zmianie. Wartość domyślna True.
CharCase
Komponenty: Edit, MaskEdit
Właściwość ta w zależności od ustawienia określa czy wyświetla tekst składający się
z dużych znaków (ecUpperCase), małych znaków (ecLowerCase), mieszanych (ecNormal). Wartość domyślna ecNormal.
HideScrollBars
Komponent: RichEdit
Właściwość ta ustawiona na True powoduje wyświetlanie pasków przewijania tylko
w wypadku gdy zachodzi taka potrzeba, natomiast w pozostałych przypadkach są ukryte.
W przypadku wartości False obecność pasków przewijania zależy od wartości właściwości ScrollBars.
HideSelection
Komponenty: Edit, RichEdit, Memo
Właściwość ta ustawiona na True powoduje, że dowolny zaznaczony tekst przestanie być wyświetlany kiedy użytkownik przejdzie do innego komponentu za pomocą Tab. Wartość domyślna True.
Lines
Komponenty: RichEdit, Memo
Właściwość ta przechowuje tekst stanowiący zawartość komponentu.
MaxLength
Komponenty: Edit, MaskEdit, RichEdit, Memo
Właściwość ta określa maksymalną liczbę znaków jaką komponent jest w stanie pomieścić. W przypadku gdy podana jest wartość 0 liczba podawanych znaków jest jedynie ograniczona przez możliwości systemu. Wartość domyślna 0.
OEMConvert
Komponenty: Edit, Memo
Właściwość ta ustawiana jest na True jeżeli wprowadzany tekst będzie się składał z nazw plików. Wartość domyślna False.
PasswordChar
Komponenty: Edit, MaskEdit
Właściwość ta powoduje odwzorowanie wprowadzanego znaku na zadany jako wartość tej właściwości, jeżeli wartość zadana jest różna od ASCI #0. Większość kontrolek edycyjnych używa znaku * w roli znaku maskującego. Wartość domyślna #0.
PlainText
Komponent: RichEdit
Właściwość ta ustawiana na True powoduje, że pliki formatu RTF będą wyświetlane
w postaci zwykłego tekstu bez formatowania znaków i paragrafów. Przy ustawionej właściwości na False pliki będą wyświetlane z pełnym formatowaniem RTF. Wartość domyślna False.
ReadOnly
Komponenty: Edit, MaskEdit, RichEdit, Memo
Właściwość ta ustawiana na True blokuje modyfikacje wyświetlanego tekstu. Możliwe jest jedynie czytanie, zaznaczanie i kopiowanie tekstu do schowka.. Wartość domyślna False.
ScrollBars
Komponenty: RichEdit, Memo
Właściwość ta określa, które paski przewijania są wyświetlane. Możliwe wartości to: ssNone, ssHorizontal, ssVertical. Wartość domyślna ssNone.
Text
Komponenty: Edit, MaskEdit
Właściwość ta przechowuje tekst stanowiący zawartość komponentu.
WantReturns
Komponenty: RichEdit, Memo
Właściwość ta ustawiana na True powoduje, że po naciśnięciu klawisza Enter system przechwytuje znak powrotu karetki i powoduje wstawienie nowej linii do obszaru edycji.
W przypadku ustawienia wartości False naciśnięcie klawisza Enter jest obsługiwane przez Formularz. Wartość domyślna True.
WantTabs
Komponenty: RichEdit, Memo
Właściwość ta ustawiana na True powoduje, że po naciśnięciu klawisza Tab w obszarze edycji wstawiany jest znak tabulacji. W przypadku ustawienia wartości False powoduje przekazanie znaku do formularza co umożliwia opuszczenie kontrolki edycyjnej. Wartość domyślna False.
WordWrap
Komponenty: RichEdit, Memo
Właściwość ta ustawiana na True powoduje przeniesienie wpisywanego tekstu do nowej linii po osiągnięciu prawej krawędzi kontrolki. Wartość False powoduje, że kontrolka automatycznie przesuwa tekst w miarę wprowadzania nowych znaków. Wartość domyślna True.
Właściwości dostępne w czasie wykonywania
Modified
Komponenty: Edit, MaskEdit, RichEdit, Memo
Właściwość ta określa czy zawartość komponentu zmieniła się od momentu, kiedy właściwość ta została ustawiona po raz ostatni. Po zapisaniu zawartości komponentu Memo lub RichEdit do pliku właściwości tej powinno przypisać się wartość False.
SelLength
Komponenty: Edit, MaskEdit, RichEdit, Memo
Właściwość ta zawiera długość tekstu aktualnie zaznaczonego we wnętrzu komórki.
SelStart
Komponenty: Edit, MaskEdit, RichEdit, Memo
Właściwość ta zawiera indeks pierwszego znaku zaznaczonego tekstu. Pierwszy znak
w kontrolce ma indeks 0.
SelText
Komponenty: Edit, MaskEdit, RichEdit, Memo
Właściwość ta reprezentuje zaznaczony tekst.
Metody związane z kontrolkami edycyjnymi
Metody:
CutToClipboard,
PasteFromClipboard,
CopyToClipboard,
dotyczą operacji na Schowku i manipulowania tekstem.
Metody:
GetSelTextBuf,
GetTextBuf,
pobierają odpowiednio zaznaczony tekst komponentu oraz cały tekst komponentu.
Cel ćwiczenia
Celem ćwiczenia jest zapoznanie się ze sposobami oprogramowania komunikacji użytkownika z systemem. Ćwiczenie dotyczy zarówno sposobów podawania danych, jak również możliwości oprogramowania odpowiednich odpowiedzi i poleceń ze strony programu.
Przebieg ćwiczenia
Zapoznanie się z podstawowymi oknami komunikatów i oknami dialogowymi.
Zapoznanie się z podstawowymi kontrolkami edycyjnymi i ich właściwościami.
Wykonanie następujących zadań:
Zadanie 1
Utwórz katalog, w którym znajdą się pliki do tego projektu i uruchom Delphi. Na ekranie pojawi się okno projektu formularza o nazwie Form1.
Za pomocą Inspektora Obiektów zmień właściwość Caption na własną. Aby to osiągnąć, zaznacz formularz, wybierz odpowiednią kartę w oknie inspektora obiektów, przewiń listę tak, by wyświetlić opcję Caption i kliknij ją. Tekst Form1 zastąp swoim.
Umieść na formularzu dwa komponenty Button. Dla komponentu Button1 właściwość Caption zmień na Wprowadzanie danych, dla komponentu Button2 właściowość Caption zmień na Wyjście.
Dodaj do formularza 5 komponentów Edit i 5 komponentóow Label i ustaw je na formularzu tak aby każde pole edycyjne mogło być odpowiednio podpisane.
Dla pierwszego pola edycyjnego zmień właściwość Text na 0, a dla odpowiadającej mu etykiety właściwość Caption ustaw na Liczba elementów. To pole edycyjne będzie służyło do podawania ilości wprowadzanych elementów.
Dla drugiego pola edycyjnego zmień właściwość Text na puste pole, a właściwość ReadOnly ustaw na True. Dla odpowiadającej mu etykiety właściwość Caption ustaw na Ostatnio wprowadzony. To pole edycyjne będzie służyło do wyświetlania ostatnio wprowadzonego elementu.
Dla trzeciego pola edycyjnego zmień właściwość Text na puste pole, a właściwość ReadOnly ustaw na True. Dla odpowiadającej mu etykiety właściwość Caption ustaw na Maksymalny wprowadzony. To pole edycyjne będzie służyło do wyświetlania maksymalnego wprowadzonego elementu.
Dla czwartego pola edycyjnego zmień właściwość Text na puste pole, a właściwość ReadOnly ustaw na True. Dla odpowiadającej mu etykiety właściwość Caption ustaw na Minimalny wprowadzony. To pole edycyjne będzie służyło do wyświetlania minimalnego wprowadzonego elementu.
Dla piątego pola edycyjnego zmień właściwość Text na puste pole, a właściwość ReadOnly ustaw na True. Dla odpowiadającej mu etykiety właściwość Caption ustaw na Suma. To pole edycyjne będzie służyło do wyświetlania sumy wprowadzonych elementów.
Dla komponentu Button1 oprogramuj zdarzenie OnClick wpisując pomiędzy begin i end procedury obsługującej to zdarzenie następujące instrukcje:
max:=0;
min:=0;
suma:=0;
liczba:=0;
if strtoint(edit1.text)> 0 then
begin
ile:=strtoint(edit1.text);
liczba:= strtofloat(inputbox('wprowadzanie danych', 'Podaj kolejną liczbę', '0'));
max:= liczba;
min:=liczba;
suma:=liczba;
if ile >1 then
for i:=2 to ile do
begin
liczba:= strtofloat(inputbox('wprowadzanie danych', 'Podaj kolejną liczbę', '0'));
suma:= suma + liczba;
if liczba > max then max:=liczba else
if liczba < min then min:= liczba;
end;
edit2.text:= floattostr(liczba) ;
edit3.text:= floattostr(max);
edit4.text:= floattostr(min);
edit5.text:= floattostr(suma);
end
else
showmessage(' musisz wprowadzić ilość elementów');
end;
Należy pamiętać o konieczności zadeklaropwania odpowiednich zmiennych w procedurze. Po słowie kluczowym var dla procedury obsługi tego przycisku dodaj deklaracje:
ile, i: integer;
suma, liczba, max, min : single;
Dla komponentu Button2 oprogramuj zdarzenie OnClick wpisując pomiędzy begin i end procedury obsługującej to zdarzenie następujące instrukcje:
If messageDlg(`Czy na pewno chcesz zakończyć program', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Close;
Zapisz wszystko (Save All) nadając poszczególnym plikom odpowiednie nazwy.
Wybierz przycisk Run lub F9 i uruchom napisaną przez siebie aplikację.
Zadanie 2
Wykorzystując odpowiednie komponenty edycyjne i okna dialogowe napisz program obliczający średnią arytmetyczną.
Warunki zaliczenia
Warunkiem zaliczenia ćwiczenia jest rozwiązanie zadania podanego przez prowadzącego. Po zakończeniu pracy każdy program powinien zostać zapisany
w odpowiednim katalogu. Pliki zapisane w innym niż podany przez prowadzącego katalogu nie będą sprawdzane.
1
5