300 kb
Transkrypt
300 kb
Programowanie
komputerów
Edytor tekstu.
Edytor tekstu
•Złożony interfejs użytkownika
•Nieskomplikowany algorytm
1
Komponenty kalkulatora
–Dokument:
można użyć Memo (używany w NotePad)
lub RichEdit (używany w WordPad),
–Menu główne
należy użyć komponentu MainMenu,
–Pasek narzędzi
należy użyć komponentów ToolBar i ToolButton
oraz ewentualnie SpeedButton, Edit, ComboBox
–Inne
okna dialogowe, pliki ini
Memo
–Memo jest komponentem służącym do edycji
większych fragmentów tekstu.
W przeciwieństwie do Edit (pole edycyjne), może
wyświetlać wiele linii tekstu
–Memo posiada wiele właściwości oraz metod
ułatwiających zarządzanie edytowanym tekstem
(m.in. zapis/odczyt pliku, operacje schowka
systemowego kopiuj/wytnij/wklej itd.);
–Może być podstawą prostego edytora tekstu,
klasy notatnika systemowego
2
Memo
•Właściwości:
–Lines
kolekcja obiektów AnsiString, zawierających tekst
poszczególnych akapitów
–Text
obiekt AnsiString, zawierający cały tekst
–MaxLenght
maksymalna długość tekstu;
jeżeli 0 (zero), wartość tego parametru ustala
system (np. w Windows 98 ok. 64kB)
Memo
•Właściwości:
–Enabled
dostępność, tj. możliwość edycji i zaznaczania oraz
kopiowania tekstu
–ReadOnly
tylko do odczytu, tj. możliwość edycji tekstu
3
Memo
•Właściwości:
–Align
wyrównanie komponentu względem rodzica
(alNone – brak, komponent jak w projekcie
formularza,
alClient – zajmuje całą dostępną przestrzeń)
–WordWrap
zawijanie wierszy
–ScrollBars
paski przewijania (brak, pionowy – ssVertical,
poziomy – ssHorizontal, oba – ssBoth)
Memo
•Właściwości:
–Font
właściwości czcionki
–Color
kolor tła (domyślnie systemowy kolor okna)
–Alignment
wyrównanie tekstu (do lewej/środka/prawej)
4
Memo
•Metody:
–Clear ()
Wyczyszczenie zawartości (Plik/Nowy)
–ClearSelection ()
Usunięcie zaznaczonego tekstu (Edycja/Usuń)
–CopyToClipboard ()
CutToClipboard ()
PasteFromClipboard ()
Polecenia edycyjne (Edycja/Kopiuj,Wytnij/Wklej)
–SelectAll ()
Zaznaczenie tekstu (Edycja/Zaznacz wszystko)
Memo
•Metody:
–Undo ()
Cofnięcie ostatniej czynności (Edycja/Cofnij)
–ClearUndo ()
Skasowanie pamięci metody Undo().
Metody ClearUndo() należy użyć po wykonaniu
poleceń menu:
– Plik/Nowy
– Plik/Otwórz
5
Memo
•Metody udostępniane przez właściwość Lines:
–LoadFromFile (FileName: AnsiString)
Wczytanie zawartości pliku do mema
–SaveToFile (FileName: AnsiString)
Zapisanie zawartości memo do pliku.
FileName jest kwalifikowaną nazwą pliku.
Nazwę pliku użytkownik wskazuje w odpowiednim
oknie dialogowym (OpenDialog lub SaveDialog)
MainMenu
•MainMenu (podobnie PopupMenu) to
komponent "niewidzialny",
•Jest uporządkowaną kolekcją komponentów
MenuItem, także "niewidzialnych".
•MainMenu zawiera opis struktury menu,
natomiast wyświetlanie i obsługa menu należy
do Windows API.
•Do projektowania struktury menu służy
specjalny edytor.
6
MainMenu
•Okno edytora menu:
MenuItem
•Właściwości
–Caption
Opis pozycji menu, widoczny dla użytkownika;
–ShortCut
Wybierany z listy skrót klawiaturowy
(w rodzaju [F8], [Ctrl]+[A] itp.)
–Checked
Wyświetlanie symbolu zaznaczenia,
przydatne gdy menu ma działać jak przełącznik
7
ToolBar i ToolButton
•ToolBar:
–Pasek narzędzi, wyposażony w specjalne przyciski
(ToolButton)
–Można na nim umieszczać inne komponenty (np.
SpeedButton, Edit)
•ToolButton
–Przycisk na pasku narzędzi, dostępny jedynie jako
element ToolBar
ToolBar
•Właściwości:
–Images
Komponent ImageList zawierający obrazki
–Wrapable
Automatyczne zawijanie zbyt długiego paska
–ButtonHeight
Wysokość wszystkich elementów na pasku
–Flat
Wyłącza efekt 3D
–ShowCaptions, List
Wyświetlanie napisu i położenie względem obrazka
8
ToolButton
•Właściwości:
–ImageIndex
Numer obrazka (w skojarzonym z tym ToolBar-em
komp. ImageList) wyświetlanego na przycisku
–Style
Zwykły (tbsButton) lub przełącznik (tbsCheck)
–Grouped
Zmienia grupę sąsiadujących przycisków
(Style: tbsCheck) w przyciski radiowe
–Down
Odpowiednik "Checked" pól wyboru (CheckBox-ów)
OpenDialog, SaveDialog
•Komponent niewidzialny, wyświetlający
standardowe okno dialogowe systemu
Windows
9
OpenDialog, SaveDialog
•Właściwości:
–Title
Tytuł okna
–DefaultExt
Rozszerzenie domyślne (ważne w przyp.
SaveDialog)
–Filter
Nazwy typów plików i ich maski
OpenDialog, SaveDialog
•Właściwości:
–Options
Opcje, do najważniejszych należą,
- ofFileMustExist
- ofNoReadOnlyReturn
- ofOverwritePrompt
- ofPathMustExist
–FileName
Kwalifikowana nazwa wskazanego pliku
10
OpenDialog, SaveDialog
•Metody:
–bool Execute ()
Wyświetla okno dialogowe;
Zwracana true (jeżeli użytkownik kliknie Zapisz)
lub false (jeżeli kliknie Anuluj)
Sposób użycia (SD – nazwa SaveDialog):
... ZapiszClick ...
{
if (SD->Execute() )
Memo->Lines->SaveToFile (SD->FileName);
}
RichEdit
•Edytor tekstu, obsługujący format rtf
(Rich Text Format).
•Pozwala na niezależne formatowanie
fragmentów edytowanego tekstu
•Posiada wszystkie właściwości i metody
komponentu Memo oraz szereg dodatkowych
11
RichEdit
•Właściwości:
–DefAttributes
Domyślne właściwości czcionki
–SelAttributes
Właściwości czcionki dla obszaru zaznaczenia
–Paragraph
Właściwości paragrafu dla obszaru zaznaczenia
–PlainText (typ bool)
Sposób zapisu do pliku (metoda SaveToFile),
jeżeli true to czysty tekst bez formatowania,
jeżeli false, to w formacie RTF
RichEdit
•Metody:
–FindText
Wyszukiwanie tekstu;
Można użyć w połączeniu z oknami dialogowymi
FindDialog i ReplaceDialog
–Print
Wydruk na domyślnej drukarce;
Można użyć w połączeniu z oknem dialogowym
PrintDialog
12
RichEdit
•Zdarzenia:
–OnSelectionChange
Informuje o zmianie obszaru zaznaczenia
(może to być same tylko przesunięcie kursora),
Można wykorzystać do programowego
"sprzężenia zwrotnego" – uzależnienia stanu
komponentów w menu oraz na pasku narzędzi
od formatowania aktualnie zaznaczonego tekstu
Programowanie
komputerów
Udoskonalenia edytora.
13
Edytor
•Zasady oceniania edytora
–Ocena = suma uzyskanych punktów
(w tym 2pkt. za elementy obowiązkowe)
ale
–Na ocenę 4 przynajmniej jedno rozszerzenie
za minimum 1 pkt.
–Na 5 przynajmniej jedno rozszerzenie
za minimum 1,5 pkt.
–Nie można mieszać rozszerzeń edytora
na bazie Memo i RichEdit
Edytor tekstu
•Elementy obowiązkowe
–(2,0) edytor na bazie komponentu Memo;
menu: plik (polecenia: nowy, otwórz, zapisz jako,
zamknij) i edycja (polecenia: cofnij, kopiuj, wytnij,
wklej, zaznacz wszystko); użycie okien dialogowych
w poleceniach otwórz oraz zapisz jako
14
Elementy obowiązkowe
•Polecenia menu plik:
–Nowy
wyczyszczenie zawartości Memo
–Otwórz
wyświetlenie okna dialogowego OpenDialog;
wczytanie pliku do Memo jeżeli kliknięto „Otwórz”
–Zapisz jako
wyświetlenie okna dialogowego SaveDialog;
zapisanie tekstu do pliku jeżeli kliknięto „Zapisz”
–Zamknij
Zamknięcie programu
Elementy obowiązkowe
•Polecenia menu edycja
–cofnij,
–kopiuj,
–wytnij,
–wklej,
–zaznacz wszystko
Wykonanie poleceń menu plik: nowy, otwórz, zapisz
jako - powinno dodatkowo czyścić pamięć operacji
Cofnij (metoda ClearUndo)
15
Edytor tekstu – możliwe udoskonalenia
•Edytor na bazie Memo
–(1,5) pliki ini – zapisywanie i odczytywanie
konfiguracji (rozmiar i położenie okna, opcje typu
zawijanie wierszy, atrybuty czcionki i paragrafu)
–(1,0) czcionka i jej atrybuty oraz atrybuty paragrafu
–(0,5) pasek narzędzi
Edytor tekstu – możliwe udoskonalenia
•Edytor na bazie RichEdit
–(1,5) czcionka i jej atrybuty oraz atrybuty akapitu
ze sprzężeniem zwrotnym
–(1,0) pliki ini – zapisywanie i odczytywanie
konfiguracji (rozmiar i położenie okna, opcje
w rodzaju zawijanie wierszy)
–(1,0) pasek narzędzi, ze sprzężeniem zwrotnym
–(0,5) sprzężenie zwrotne w menu: plik (zapisz)
oraz edycja (kopiuj, wytnij, wklej)
–(0,5) menu kontekstowe
16
Edytor tekstu – możliwe udoskonalenia
•Niezależnie od wyboru Memo/RichEdit
–(1,5) „inteligentna” blokada zamknięcia programu
(Yes/No/Cancel)
–(1,0) „pół-inteligentna” blokada zamknięcia
programu (Yes/No)
–(0,5) „ćwierć-inteligentna” blokada zamknięcia
programu (Ok)
–(0,5) ukrywanie paska narzędzi
–(0,5) zawijanie wierszy
–(0,5) czcionka (menu)
–(0,5) okno powitalne (splash screen)
Udoskonalenia kalkulatora
Złożoność
UWAGA! Stopień komplikacji kodu
rośnie znacznie szybciej, niż ilość udoskonaleń:
Udoskonalenia
17
Czcionka
•Dodatkowe polecenie w menu:
Format/Czcionka
–Wybranie polecenia Format/Czcionka powoduje
wyświetlenie okna dialogowego FontDialog
oraz zastosowanie ustawień czcionki do całego
dokumentu (Memo) albo obszaru zaznaczenia
(RichEdit), jeżeli użytkownik potwierdzi zmiany.
Pasek narzędzi (Memo)
•Pasek narzędzi, udostępniający podstawowe
polecenia menu:
–Plik – nowy, otwórz, zapisz jako
–Edycja – cofnij, wytnij, kopiuj, wklej
–UWAGA
Nie należy tworzyć nowych funkcji obsługi
zdarzeń, a jedynie wskazać istniejącą funkcję
(stworzoną wcześniej dla menu)
w inspektorze obiektów
18
Pasek narzędzi (Memo)
•Pasek narzędzi, udostępniający podstawowe
polecenia menu:
–Plik – nowy, otwórz, zapisz jako
–Edycja – cofnij, wytnij, kopiuj, wklej
Pasek narzędzi (Memo)
•Pasek narzędzi, udostępniający podstawowe
polecenia menu:
–Plik – nowy, otwórz, zapisz jako
–Edycja – cofnij, wytnij, kopiuj, wklej
19
Pasek narzędzi ze sprzężeniem (RichEdit)
•Pasek narzędzi, udostępniający podstawowe
polecenia menu:
–Plik – nowy, otwórz, zapisz jako
–Edycja – cofnij, wytnij, kopiuj, wklej
przy czym polecenia menu Edycja są dostępne
lub nie, zależnie od sytuacji
Atrybuty czcionki i paragrafu (Memo)
•Pasek narzędzi udostępnia podstawowe
atrybuty czcionki (pogrubienie, kursywa, kolor)
oraz wyrównanie tekstu
–Przyciski B (pogrubienie) oraz I (kursywa)
powinny działać jak pola wyboru (CheckBox)
–Przyciski wyrównania tekstu
powinny działać jak przyciski radiowe (RadioButton)
–Kolor jest wybierany przez okno dialogowe
ColorDialog
20
Atrybuty czcionki i paragrafu (RichEdit)
•Pasek narzędzi udostępnia podstawowe
atrybuty czcionki (pogrubienie, kursywa, kolor)
oraz paragrafu – wyrównanie tekstu oraz
wypunktowanie
–Działanie przycisków – jak dla Memo
–Dodatkowo zrealizowane jest sprzężenie zwrotne:
stan przycisków czcionki i paragrafu zmienia się
wraz ze zmianą położenia kursora
Zawijanie wierszy
•Dodatkowe polecenie w menu:
Widok/Zawijanie wierszy
–Element menu „Zawijanie wierszy” powinien działać
jak przełącznik: w stanie włączonym widoczny jest
symbol zaznaczenia w menu, włączone jest
zawijanie wierszy oraz włączony pasek przewijania
pionowego Memo; w stanie wyłączonym – brak
symbolu zaznaczenia, wyłączone zawijanie,
włączone paski przewijania pionowy i poziomy
–Jeżeli edytor ma pasek narzędzi,
polecenie powinno być również w nim dostępne
21
Ukrywanie paska narzędzi
•Dodatkowe polecenie w menu:
Widok/Pasek narzędzi
–Element menu „Pasek narzędzi” powinien działać
jak przełącznik: w stanie włączonym widoczny jest
symbol zaznaczenia w menu oraz widoczny jest
pasek narzędzi; w stanie wyłączonym – brak
symbolu zaznaczenia, pasek narzędzi niewidoczny
–Pasek narzędzi wyposażony jest w menu
kontekstowe (PopupMenu), realizujące tę samą
funkcję
Blokada zamknięcia programu
•Zamknięcie programu – możliwe przyczyny
–Polecenie Plik/Zakończ
–Kliknięcie x na pasku tytułu
–Skrót klawiaturowy [Alt]+[F4]
–Zamknięcie systemu
Niezależnie od przyczyny, system wysyła do
aplikacji komunikat, nakazujący zakończenie
działania.
Objawia się to wystąpieniem dwóch zdarzeń.
22
Blokada zamknięcia programu
•Zamknięcie programu - skutek
–Zdarzenie OnCloseQuerry
(pytanie czy aplikacja może zostać zamknięta)
... FormCloseQuery(..., bool &CanClose)
{
}
–Zdarzenie OnClose
(informacja że aplikacja jest zamykana)
Jeżeli aplikacja odmawia zamknięcia (CanClose=0),
to zdarzenie OnClose nie wystąpi,
Blokada zamknięcia programu
•Od czego zależy decyzja programu edytora:
–Czy dokument został zmodyfikowany
od czasu utworzenia/otwarcia/zapisania
Æwłaściwość Modified komponentu Memo
–Czy dokument posiada nazwę
Ædodatkowa zmienna, ustawiana po wykonaniu
poleceń nowy/otwórz/zapisz jako
–Decyzje użytkownika
Æokno dialogowe MessageBox
(co robić dajej?)
Æokno dialogowe SaveDialog
(czy i gdzie zapisać plik?)
23
Blokada zamknięcia programu
•Trzy stopnie trudności:
–(1,5) – profesjonalnie
–(1,0) – bez zapamiętywania nazwy pliku
–(0,5) – bez zapisywania
•UWAGA
Oprócz blokady zamknięcia programu,
podobne działania należy realizować
przy obsłudze poleceń „Nowy” i „Otwórz”
Blokada zamknięcia programu
N
Zamknij
Modified?
N
T
MsgBox?
A
Zamknij
T
N
Nazwa?
Anuluj
N
Anuluj
SaveDlg?
T
SaveToFile
T
SaveToFile
Zamknij
Zamknij
24
Blokada zamknięcia programu
N
Zamknij
Modified?
N
T
MsgBox?
Zamknij
N
Anuluj
T
SaveDlg?
T
SaveToFile
Zamknij
Blokada zamknięcia programu
N
Zamknij
Modified?
T
MsgBox
OK
Anuluj
25
Metoda MessageBox
–Jest to metoda obiektu Application:
Application->MessageBox (char *Text,
char Caption, int Flags)
– Text – treść komunikatu w oknie
(można użyć "\n" , aby podzielić tekst na linie)
– Caption – tytuł okna
– Flags – określa jakie przyciski oraz jaka ikona
jest widoczna na oknie:
MB_YESNOCANCEL
MB_YESNO
MB_OK
MB_ICONERROR
MB_ICONEXCLAMATION
– Rezultat – ID klikniętego przycisku:
IDYES, IDNO, IDCANCEL, …
Metoda MessageBox
–Przykład:
Res = Application->MessageBox (
"Plik został zmodyfikowany\n"
"Czy chcesz zapisać zmiany",
"Pad",
MB_YESNO | MB_ICONEXCLAMATION
);
Złożone komunikaty można utworzyć przy pomocy
obiektu AnsiString; trzeba wtedy użyć met. c_str:
String T = String() + "xxx" + …
Application->MessageBox (
T.c_str(), "Pad",
MB_YESNO | MB_ICONEXCLAMATION
);
26