Programowanie komputerów Edytor tekstu. Edytor tekstu Złożony interfejs użytkownika Nieskomplikowany algorytm
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
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
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)
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
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.
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
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
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
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
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
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
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.
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
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)
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
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 UWAGA! Stopień komplikacji kodu rośnie znacznie szybciej, niż ilość udoskonaleń: Złożoność Udoskonalenia
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
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
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
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
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ń.
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?)
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 Modified? T Zamknij N MsgBox? T Zamknij A Anuluj N Nazwa? T N SaveDlg? T SaveToFile Anuluj SaveToFile Zamknij Zamknij
Blokada zamknięcia programu N Modified? T Zamknij N MsgBox? T Zamknij N T SaveDlg? Anuluj SaveToFile Zamknij Blokada zamknięcia programu N Zamknij Modified? T MsgBox OK Anuluj
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 );