Programowanie
Wizualne
WYKŁAD 3
Wojciech Pieprzyca
Praca z formularzem
• Na formularzu można umieścić kilka egzemplarzy tego
samego obiektu, bez konieczności wielokrotnego
wyboru tego komponentu z palety komponentów.
Wystarczy w chwili wybierania komponentu trzymać
naciśnięty klawisz Shift.
• Zaznaczanie większej liczby komponentów – wybór
określonych komponentów z klawiszem Shift lub
otoczenie komponentów za pomocą myszy. Jeżeli
zaznaczane komponenty znajdują się w obrębie innego
komponentu to należy trzymać klawisz Ctrl.
Praca z formularzem
• Jeżeli komponenty na formularzu na siebie nachodzą
to stosowane jest warstwowe ułożenie komponentów,
które można zmienić wybierając odpowiednio z menu
kontekstowego opcję „Send to back” (przesuń pod
spód) lub „Bring to Front” (przesuń na wierzch).
• Po zaznaczeniu kilku komponentów można ustalić ich
rozmiar względem najmniejszego/największego lub też
ustalić wszystkim zaznaczonym komponentom
jednakowy rozmiar – pozwala na to opcja w menu
kontekstowym - Size.
Praca z formularzem *
• Podobnie można ustalić wyrównywanie komponentów
do lewej lub prawej strony względem komponentu
najbardziej wysuniętego na lewo lub prawo. Można
także ustalić równe odstępy między komponentami.
Opcja ta jest dostępna w menu kontekstowym Align.
Komponenty edycyjne *
• Główne komponenty edycyjne to:
– Edit – jednowierszowe pole edycyjne,
– MaskEdit – jednowierszowe pole edycyjne z
możliwością ustalenia maski wprowadzania
(np. kod pocztowy __-___)
– Memo – wielowierszowe pole edycyjne,
– RichEdit – wzbogacone wielowierszowe pole
edycyjne, z dodatkowymi właściwościami i
metodami np. zapis/odczyt z pliku.
Właściwości
komponentów edycyjnych
• AutoSelect – właściwość dwustanowa (true/false), po przełączeniu
na true, cały tekst w komponencie edycyjnym zostaje zaznaczony
(Edit,MaskEdit)
• CharCase – wymusza wyświetlanie zawartości pola dużymi
(ecUpperCase) lub małymi literami (ecLowerCase) (Edit,MaskEdit)
• HideScrollBars – wartość true wskazuje, że paski przewijania
będą pokazywane tylko jeśli są niezbędne (tzn. tekst nie mieści się
w ramach widocznego komponentu), wartość false powoduje, że
paski przewijania są widoczne zawsze (RichEdit)
• Lines – zawartość tekstowa komponentu (Memo,RichEdit)
• MaxLength – określa maksymalną długość pola w znakach, 0
oznacza brak ograniczeń (Wszystkie)
• PasswordChar – kod znaku, który będzie używany do zastąpienia
każdego wprowadzanego z klawiatury znaku, wykorzystywane
zazwyczaj do wprowadzania haseł w formie niejawnej
(Edit,MaskEdit)
Właściwości
komponentów edycyjnych
• ReadOnly – wartość true uniemożliwia zmianę wyświetlonego w
ramach komponentu tekstu (Wszystkie)
• ScrollBars – określa, które paski przewijania powinny być
widoczne (ssBoth – pasek poziomy i pionowy, ssHorizontal –
pasek poziomy, ssVertical – pasek pionowy, ssNone – brak)
• Text – zawartość tekstowa komponentu (Edit,MaskEdit)
• WordWrap – włącza/wyłącza zawijanie wierszy w chwili
osiągnięcia prawego marginesu (Memo,RichEdit)
• Modified – wskazuje czy tekst umieszczony w komponencie został
zmodyfikowany od czasu ostatniego wczytania tekstu do
komponentu (zazwyczaj ustala się na false po zapisie tekstu do
pliku) (Wszystkie – dostępne tylko w czasie uruchomienia)
• SelLength – długość aktualnie zaznaczonego tekstu
(Wszystkie – dostępne tylko w czasie uruchomienia)
Właściwości komponentów
edycyjnych *
• SelStart – numer pierwszego znaku zaznaczonego tekstu
(Wszystkie – dostępne tylko w czasie uruchomienia)
• SelText – aktualnie zaznaczony tekst
(Wszystkie – dostępne tylko w czasie uruchomienia)
Niektóre metody:
• CopyToClipboard() – kopiuje zaznaczony tekst do schowka
• CutToClipboard() – wycina tekst i kopiuje go do schowka
• PasteFromClipboard() – wstawia tekst skopiowany ze schowka
• Clear() – usuwa zawartość tekstową komponentu
Listy wyboru *
• Rodzaje list wyboru:
– Zwykła lista – lista rozwijana, ma postać pola
wyboru z przyciskiem służącym do wyświetlenia
wszystkich opcji dostępnych na liście. Użytkownik
ograniczony jest do wyboru opcji z listy, nie może
proponować własnych opcji.
Przykład: ListBox, ComboBox ze stylem
csDropDownList
– Kombinowana lista – połączenie zwykłej listy z
polem edycyjnym, działa tak jak zwykła lista, ale
użytkownik poza wyborem opcji z listy, ma
możliwość wpisania własnego tekstu.
Przykład: ComboBox ze stylem csDropDown
Właściwości list wyboru
• Columns – liczba kolumn wchodząca w skład listy (0 – lista
jednokolumnowa) (ListBox)
• IntegralHeight – w przypadku wartości true powoduje
automatyczne dopasowanie wysokości komponentu tak, aby
wszystkie opcje były wyświetlone w całości (ListBox)
• Items – obiekt klasy TStrings przechowujący zawartość listy
(ListBox, ComboBox) np. ComboBox->Items->Strings[0] (1 opcja)
• MaxLength – największa dopuszczalna długość łańcucha możliwa
do wprowadzenia przez użytkownika w przypadku listy
kombinowanej – 0 oznacza brak limitu (ComboBox)
• MultiSelect – wartość true oznacza, że na liście może być wybrany
więcej niż jeden element (ListBox)
• Sorted – wartość true wymusza sortowanie elementów listy
(ComboBox)
Właściwości list wyboru *
Właściwości dostępne w czasie uruchomienia:
• ItemIndex – numer aktualnie wybranej pozycji listy
(ListBox,ComboBox)
• Items->Count – liczba wszystkich elementów na liście
(ListBox,ComboBox)
• SelCount – liczba elementów wybranych z listy dopuszczającej
wielokrotny wybór (ListBox)
• Selected – tablica zawierająca informacje o tym czy dany element
jest wybrany (ListBox) np. ListBox->Selected[0]
Przeglądanie listy wielokrotnego wyboru:
for (int i=0; iItems->Count; i++)
{
if (ListBox1->Selected[i])
ShowMessage ("Wybrano opcje "+ListBox1->Items->Strings[i]);
}
Metody list wyboru *
• Items->Add(”opcja”) – dodanie nowego elementu do listy
• Items->Clear() – usunięcie wszystkich elementów z listy
• Items->Delete(indeks) – usunięcie elementu o numerze i z listy
• Items->IndexOf(”opcja”) – sprawdzenie numeru (indeksu) pod
którym znajduje się opcja o podanej wartości – zwraca -1 jeśli
podana opcja nie znajduje się na liście
• Items->Insert(indeks,”opcja”) – wstawia element na listę pod
numer o podanym indeksie
• Items->Move(indeks1,indeks2) – zamienia elementy na liście o
podanych indeksach
• Items->SaveToFile(nazwaPliku) – zapisuje listę do pliku o podanej
nazwie
• Items->LoadFromFile(nazwaPliku) – wczytuje listę z pliku o
podanej nazwie
Przyciski – właściwości
• Właściwość ModalResult przycisków (zarówno Button
jak SpeedButton) - wykorzystywana jest najczęściej w
okna dialogowych wyświetlanych w trybie modalnym
za pomocą metody ShowModal(). Nadanie wartości tej
właściwości skutkuje tym, że naciśnięcie przycisku
spowoduje zamknięcie okna modalnego i zwrot
określonej wartości we właściwości ModalResult.
Dostępne są następujące wartości do zwrócenia:
– mrOk 1 mrYes 6
– mrCancel 2 mrNo 7
– mrAbort 3 mrAll 8
– mrRetry 4 mrNoToAll 9
– mrIgnore 5 nrYesToAll 10
Przyciski – właściwości *
• Przykład wykorzystania:
//wyświetlenie okna w trybie modalnym
int result = Form2->ShowModal();
//sprawdzenie zwróconej przez okna modalne wartości
if (result == mrOK) oblicz();
If (result == mrCancel) return;
Oprócz predefiniowanych wartości można także definiować własne
wartości, które będą związane z danym przyciskiem i zwracane przez
okno modalne, a następnie je w odpowiedni sposób interpretować np.
ustalamy właściwość ModalResult na 101, wówczas możemy
dokonać sprawdzenia: if (result == 101) polacz();
Przyciski – właściwości
• Właściwość Default – wiąże się także z obsługą okien
dialogowych. Określa ona tzw. przycisk domyślny.
Naciśnięcie klawisza Enter na formularzu wywoła
metodę obsługi zdarzenia naciśnięcia przycisku
domyślnego. Nadanie wartości true dla właściwości
Default powoduje, że dany przycisk staję się
przyciskiem domyślnym.
• Właściwość Enabled – określa czy przycisk jest
aktywny (true) czy zablokowany (false). Efektem
zablokowania przycisku jest brak możliwości jego
naciśnięcia (a co za tym idzie wywołania metod obsługi
zdarzeń tego przycisku) oraz szary kolor napisu na
przycisku.
Przyciski – właściwości *
• Komponenty BitBtn i SpeedButton dodatkowo
posiadają właściwość Glyphs, która określa ścieżkę do
rysunku „naklejonego” na przycisk. Można
przyporządkować różne ikony dla 4 różnych stanów
przycisku:
– Przycisk naciśnięty (down)
– Przycisk zwolniony (up)
– Przycisk zablokowany (disabled)
– Przycisk trwale wciśnięty (stay down).
W przypadku przyporządkowania tylko jednej ikony
Builder automatycznie generuje pozostałe poprzez
manipulację grafiką ikony (przesuwanie w górę/dół,
zmiana kolorów, itp.).
Przyciski – właściwości
• Komponent BitBtn posiada także właściwość Kind,
która umożliwia nadanie przyciskowi standardowo
zdefiniowanego wyglądu. Dodatkowo wybranie jednej z
opcji powoduje automatyczne ustalenie opcji
ModalResult na odpowiadającą wybranemu rodzajowi
ikony (Kind). Poniżej przedstawiono dostępne
stylizacje:
Pola wyboru
• CheckBox – dwustanowe pole wyboru, może być
zaznaczone (właściwość Checked=true) lub nie
zaznaczone (Checked=false). Możliwe jest
zaznaczenie wielu pól CheckBox w ramach jednej
grupy komponentów.
• RadioButton – dwustanowe pole wyboru, może być
zaznaczone (właściwość Checked=true) lub nie
zaznaczone (Checked=false). Istnieje możliwość
zaznaczenia TYLKO jednego pola RadioButton w
ramach jednej grupy komponentów.
Pasek przewijania *
• Pasek przewijania – ScrollBar - umożliwia wybór
wartości liczbowej typu całkowitego. Posiada
właściwości:
– Min – minimalna możliwa wartość,
– Max – maksymalna możliwa wartość,
– Position – wartość aktualnie zaznaczona.
Min Position Max
Standardowe okna
dialogowe
• Standardowe okna dialogowe wchodzą w skład zasobów
systemu operacyjnego Windows. Można je znaleźć na
zakładce Dialogs. Należą do nich takie okna dialogowe
jak:
– Okno otwarcia pliku (OpenDialog),
– Okno zapisania pliku (SaveDialog),
– Okno otwarcia pliku graficznego (OpenPictureDialog),
– Okno zapisania pliku graficznego (SavePictureDialog),
– Okno wyboru czcionki (FontDialog),
– Okno wyboru koloru (ColorDialog),
– Okno drukowania (PrintDialog),
– Okno ustawień drukarki (PrintSetupDialog),
– Okno wyszukiwania (FindDialog),
– Okno wyszukiwania i zamiany (ReplaceDialog).
Standardowe okna
dialogowe
• Komponenty reprezentujące okna dialogowe są
niewidoczne tzn. nie są w żaden sposób
reprezentowane wizualnie na formularzu.
• Wszystkie okna dialogowe mają wspólną metodę
Execute(), która powoduje wyświetlenie określonego
okna dialogowego na ekranie. Metoda Execute()
zwraca wartość true jeżeli okna zostało zamknięte
przyciskiem OK lub wartość false w przypadku gdy
okno zostało zamknięte przyciskiem CANCEL.
• Zazwyczaj odpowiednie operacje przeprowadzana są
tylko w przypadku wyboru odpowiedniego pliku/opcji w
oknie dialogowym i naciśnięciu klawisza OK:
if (OpenDialog->Execute()) { //operacje na pliku }
Okna dialogowe otwarcia i
zapisania pliku
• OpenDialog
• SaveDialog
Okna dialogowe otwarcia i
zapisania pliku *
• Niektóre z właściwości okien dialogowych otwarcia i
zapisania pliku:
– DefaultExt – domyślne rozszerzenie nazwy pliku, dołączane do
nazwy w przypadku, gdy użytkownik nie poda jawnie
rozszerzeia,
– FileName – wybrana przez użytkownika nazwa pliku wraz ze
ścieżką dostępu do pliku,
– Files – obiekt klasy TStrings przechowujący nazwy wybranych
plików, ma zastosowanie gdy pozwalamy wybrać użytkownikowi
więcej niż jeden plik na raz,
– Filter – określa nazwę i rozszerzenia plików, które będą
wyświetlane w oknie dialogowym np. Pliki tekstowe *.txt,
– InitialDir – domyślny katalog, którego zawartość pokazywana
jest po wyświetleniu okna dialogowego,
– Title – tytuł okna dialogowego.
Okna dialogowe otwarcia i
zapisania pliku graficznego *
• Okna te (OpenPictureDialog i SavePictureDialog)
posiadają identyczne właściwości i działanie jak
analogiczne okna dialogowe otwarcia i zapisu plików
niegraficznych. Jedyna różnica polega na tym, że w
czasie wyboru pliku możliwy jest podgląd zawartości
pliku graficznego.
Okno dialogowe wyboru
czcionki – FontDialog
• Okno posiada właściwość Font, która zawiera parametry
wybranej czcionki.
Okno dialogowe wyboru
koloru – ColorDialog *
• Okno posiada właściwość Color, która zawiera
parametry wybranego koloru.
Okno dialogowe
drukowania - PrintDialog
• Okno drukowania umożliwia ustalenie parametrów
wydruku i rozpoczęcie drukowania poprzez naciśnięcie
przycisku OK. Większość funkcji drukowania jest
obsługiwana bezpośrednio przez system operacyjny.
Wymagana jest obsługa tego okna jedynie wówczas,
gdy użytkownik zmienia standardowe parametry np. nie
drukuje całego dokumentu tylko wybrane strony, albo
drukuje do pliku, a nie na drukarkę, itp.
Okno dialogowe
drukowania - właściwości
• Niektóre z właściwości komponentu PrintDialog:
– Copies – liczba drukowanych kopii. Tworzenie kopii
obsługiwane jest przez Windows.
– FromPage – określa numer pierwszej strony od której
rozpoczyna się wydruk. Właściwość powinna być obsługiwana
przez aplikację.
– ToPage – określa numer ostatniej strony na której kończy się
wydruk. Właściwość powinna być obsługiwana przez aplikację.
– PrintToFile – ustala czy wydruk ma być wykonany na drukarce
czy przesłany do pliku. Właściwość powinna być obsługiwana
przez aplikację.
– Options – możliwość włączenia/wyłączania niektórych opcji
dostępnych w oknie dialogowym drukowania np. możliwość
drukowania do pliku, możliwość drukowania wybranych stron,
itp.
Okno dialogowe ustawień
drukarki – PrinterSetupDialog *
• Okno ustawień drukarki umożliwia zmianę wybranej
drukarki oraz jej parametrów np. układu strony,
rozmiaru, sposobu podawania papieru, itp.
Okno dialogowe
wyszukiwania - FindDialog
• Jest to okno niemodalne, dla którego metoda Execute
zawsze zwraca wartość true. Obsługa wyszukiwania
musi odbywać się poprzez metodę obsługi zdarzenia
onFind. Zdarzenie onFind generowane jest po
naciśnięciu przycisku Find Next (Następny). Szukany
tekst znajduje się we właściwości FindText.
Dodatkowo właściwość Options zawiera informacje o
zaznaczonych opcjach w oknie np. uwzględnianie tylko
całych wyrazów, uwzględnianie wielkości liter, kierunku
wyszukiwania, itp.
Okno dialogowe zamiany –
ReplaceDialog *
• Jest to okno niemodalne, dla którego metoda Execute
zawsze zwraca wartość true. Obsługa zamiany musi
odbywać się poprzez metodę obsługi zdarzenia
onReplace. Zdarzenie onReplace generowane jest po
naciśnięciu przycisku Replace (Zamień) lub Replace All
(Zamień wszystko). Szukany tekst znajduje się we
właściwości FindText. Tekst do zamiany znajduje się we
właściwości ReplaceText. Dodatkowo właściwość Options
zawiera informacje o zaznaczonych opcjach w oknie np.
uwzględnianie tylko całych wyrazów, uwzględnianie
wielkości liter, itp.