Delphi __ Kompendium __ Roz3.pdf

(1457 KB) Pobierz
Delphi :: Kompendium :: Roz...
Delphi :: Kompendium :: Rozdział 3 - 4programmers.net
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_3
Logowanie | Rejestracja | Forum | Pomoc | Reklama | Szukaj
Strona główna :: Delphi :: Kompendium
Rozdział 3
Edytuj
Historia
Delphi
Artykuły
Kompendium
Gotowce
FAQ
.NET
Turbo Pascal
FAQ
PHP
FAQ
Java
FAQ
C/C++
Artykuły
FAQ
C#
Wprowadzenie
Assembler
FAQ
(X)HTML
CSS
JavaScript
Z pogranicza
Algorytmy
WIĘCEJ »
Programowanie obiektowe
Z pewnością ten rozdział niniejszej książki będzie dla Ciebie bardziej interesujący. Nauczysz się bowiem
korzystać z dobrodziejstw, jakie oferuje Delphi, czyli komponentów i klas, dzięki którym programowanie daje
lepsze, a co najważniejsze szybsze efekty.
Spis treści
1 VCL
2 Podstawowy kod modułu
2.1 Plik DFM formularza
3 Umieszczanie komponentów na formularzu
3.1 Umieszczanie komponentów
3.2 Zmiana właściwości komponentu
3.2.1 Szerokość i wysokość
3.3 Zdarzenia komponentów
3.3.1 Lista wygenerowanych zdarzeń w Inspektorze obiektów
3.3.2 Generowanie pozostałych zdarzeń
4 Kod generowany automatycznie
5 Klasy
5.1 Czym właściwie są klasy?
5.2 Tworzenie klas
5.3 Definicja metod
5.4 Tworzenie klasy
5.5 Poziomy dostępu do klasy
5.5.1 Sekcja private
5.5.2 Sekcja protected
5.5.3 Sekcja public
5.6 Dziedziczenie
5.6.1 Klasa domyślna
5.7 Typy metod
5.7.1 Metody wirtualne kontra metody dynamiczne
5.8 Konstruktory i destruktory
6 Przykład użycia klas
6.1 Ogólne założenia
6.2 Tworzenie modułu Engine
6.2.1 Szablon
6.2.2 Wygląd klasy
6.2.3 Kod źródłowy modułu
6.2.3.1 Konstruktor i destruktor
6.2.3.2 Dokonywanie zmian w szablonie
6.3 Interfejs programu
6.4 Kod źródłowy formularza głównego
6.5 Uruchamianie programu
7 Parametr Sender procedury zdarzeniowej
7.1 Przechwytywanie informacji o naciśniętym klawiszu
7.1.1 Obsługiwanie zdarzeń przez inne komponenty
7.2 Obsługa parametru Sender
8 Operatory is i as
9 Parametr Self
10 Łańcuchy tekstowe
10.1 ShortString
10.2 AnsiString
10.3 WideString
10.4 Łańcuchy z zerowym ogranicznikiem
11 Operacje na łańcuchach
11.1 Łączenie łańcuchów
11.2 Wycinanie łańcucha
11.3 Uzyskiwanie fragmentów łańcucha
11.4 Wstawianie danych do łańcucha
11.5 Wyszukiwanie danych w łańcuchu
11.6 Pozostałe funkcje
11.6.1 AnsiMatchStr
11.6.2 AnsiReverseString
11.6.3 DupeString
11.6.4 SearchBuf
11.6.5 LowerCase
11.6.6 UpperCase
11.6.7 Trim
11.6.8 WrapText
12 Typ wariantowe
13 Właściwości
13.1 Align
13.2 Anchors
13.3 Constraints
13.4 Cursor
13.5 DragCursor, DragKind, DragMode
13.6 Font
13.7 HelpContex, HelpKeyword, HelpType
13.8 Hint, ShowHint
13.9 Visible
13.10 Tag
14 Zdarzenia
14.1 OnClick
Delphi
C/C++
Turbo Pascal
Assembler
PHP
Programy
Dokumentacja
Kursy
Komponenty
WIĘCEJ »
1 z 30
2009-03-14 15:29
77983260.008.png 77983260.009.png 77983260.010.png 77983260.011.png 77983260.001.png 77983260.002.png
Delphi :: Kompendium :: Rozdział 3 - 4programmers.net
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_3
14.2 OnContextPopup
14.3 OnDblClick
14.4 OnActivate, OnDeactivate
14.5 OnClose, OnCloseQuery
14.6 OnPaint
14.7 OnResize
14.8 OnShow, OnHide
14.9 OnMouseDown, OnMouseMove, OnMouseUp, OnMouseWheel, OnMouseWheelDown,
OnMouseWheelUp
14.10 Zdarzenia związane z dokowaniem
14.10.1 OnDockDrop
14.10.2 OnDockOver
14.10.3 OnStartDock
14.10.4 OnStartDrag
14.10.5 OnEndDrag, OnEndDock
14.10.6 OnDragDrop
14.10.7 OnDragOver
14.10.8 Przykładowy program
15 Wyjątki
15.1 Słowa kluczowe try..except
15.2 Słowa kluczowe try..finally
15.3 Słowo kluczowe raise
15.4 Klasa Exception
15.5 Selektywna obsługa wyjątków
15.6 Zdarzenie OnException
15.6.1 Obsługa wyjątków
16 Klasa TApplication
16.1 Właściwości klasy TApplication
16.1.1 Active
16.1.2 ExeName
16.1.3 ShowMainForm
16.1.4 Title
16.2 Metody klasy TApplication
16.2.1 CreateForm
16.2.2 Minimize
16.2.3 Terminate
16.2.4 MessageBox
16.2.5 ProcessMeessages
16.2.6 Restore
16.3 Zdarzenia klasy TApplication
17 Podsumowanie
Copyright © 2000-2006 by Coyote Group 0.9.3-pre3
Czas generowania strony: 2.2909 sek. (zapytań SQL:
12)
W tym rozdziale:
nauczysz się obsługiwać komponenty i zmieniać wartości właściwości;
dowiesz się, w jaki sposób generować zdarzenia;
nauczysz się projektować własne klasy;
nauczysz się przechwytywania wyjątków.
VCL
Skrót VCL pochodzi od słów Visual Component Library , co można przetłumaczyć jako wizualną bibliotekę
komponentów. „Rewolucyjność” Delphi polegała właśnie na zastosowaniu biblioteki VCL, która znacznie
ułatwiała programistom szybkie tworzenie aplikacji. VCL znacznie upraszcza tworzenie programów,
udostępniając funkcje, dzięki którym za pomocą np. jednego wiersza kodu wykonać można skomplikowane na
pozór czynności. Przykładowo załadowanie i wyświetlenie obrazka realizowane jest za pomocą jednego wiersza:
Image. Picture . LoadFromFile ( 'C:\obrazek.bmp' ) ;
Programowanie w Delphi opiera się właśnie w dużym stopniu na zastosowaniu komponentów (obiektów) i
odwołaniu się do ich metod lub właściwości.
Metoda to procedura lub funkcja danej klasy, która wykonuje jakieś czynności. Szerzej
omówię tej temat w dalszej części rozdziału.
Podstawowy kod modułu
Stwórz nowy projekt, wybierając z menu File polecenie New/Application . Naciśnij klawisz F12 , co spowoduje
przełączenie się do Edytora kodu, którego zawartość widnieje w listingu 3.1.
Listing 3.1. Podstawowy kod formularza, wygenerowany przez Delphi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class ( TForm )
private
{ Private declarations }
public
{ Public declarations }
end ;
var
Form1: TForm1;
implementation
{$R *.dfm}
end .
2 z 30
2009-03-14 15:29
RSS | Forum | Pastebin |
Regulamin | Pomoc | Usuń
cookies | Prawa autorskie |
Kontakt | Reklama
77983260.003.png
Delphi :: Kompendium :: Rozdział 3 - 4programmers.net
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_3
Moduł ten składa się z podstawowych instrukcji, jakie powinny się w nim znajdować — nie powinny być one już
dla Ciebie obce.
To, co może przykuć Twoją uwagę, to duża ilość modułów włączona w ramach nowego projektu oraz nietypowe
instrukcje, zadeklarowane jako nowy typ. Przedstawiony poniżej kod nazywamy klasą.
type
TForm1 = class ( TForm )
private
{ Private declarations }
public
{ Public declarations }
end ;
Klasa (nie mylić z komponentem!) może zawierać metody (procedury i funkcje) stale ze sobą współpracujące w
celu wykonania pewnych czynności.
O klasach będzie mowa w dalszej części rozdziału — na razie nie zaprzątaj sobie tym głowy.
Plik DFM formularza
Kolejna niespotykana wcześniej instrukcja to dyrektywa:
{$R *.dfm}
Nakazuje ona włączenie do modułu pliku formularza, który zawiera informacje dotyczące zarówno samego
formularza, jak i komponentów w nim się znajdujących.
Podgląd formularza uzyskuje się poprzez kliknięcie prawym przyciskiem myszy w obszarze formularza i
wybranie z menu podręcznego polecenia View as Text . Wówczas w edytorze kodu pojawi się kod, taki jak w
listingu 3.2.
Listing 3.2. Kod formularza
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font. Charset = DEFAULT_CHARSET
Font. Color = clWindowText
Font. Height = - 11
Font. Name = 'MS Sans Serif'
Font. Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
end
Na razie plik ten zawiera tylko informacje o formularzu, gdyż nie umieściliśmy jeszcze w projekcie żadnych
komponentów.
Nie jest zalecane bezpośrednie modyfikowanie pliku *.dfm. Lepiej dokonać zmian jedynie w Inspektorze
Obiektów, a Delphi automatycznie uaktualni wówczas plik *.dfm.
Ponowne przełączenie się na podgląd formularza realizowane jest poprzez kliknięcie prawym
przyciskiem myszy w obszarze Edytora kodu i wybranie z menu podręcznego polecenia View
As Form.
Umieszczanie komponentów na formularzu
Komponenty dzielą się na wizualne i niewidoczne. Komponenty wizualne to takie komponenty, które pomagają
ulepszyć interfejs (wygląd) naszego programu — są to różne przyciski, kontrolki edycyjne czy listy rozwijalne.
Natomiast komponenty niewidoczne realizują swoje, określone zadania, lecz po uruchomieniu programu nie są
widoczne na formularzu.
Umieszczanie komponentów
O umieszczeniu komponentów na formularzu wspominałem już w rozdziale 1., ale kilka słów przypomnienia nie
zaszkodzi.
Na zakładce Standard palety komponentów odszukaj przycisk TButton ; komponent ten jest oznaczony ikonką
symbolizującą przycisk. Kliknij tę ikonę, a następnie przemieść kursor nad formularz — ponowne kliknięcie
spowoduje umieszczenie obiektu w danym punkcie.
Komponent umieszczony na formularzu można swobodnie przemieszczać, rozciągać i zwężać — wszystko to
można czynić za pomocą myszy, ale równie dobrze można zmieniać odpowiednie właściwości w Inspektorze
obiektów.
O położeniu komponentu decydują właściwości Left (położenie w poziomie), Top (położenie w pionie), Width
(szerokość komponentu) i Height (wysokość komponentu); wszystkie wartości podawane są w pikselach.
Właściwości te obecne są w każdym komponencie wizualnym.
Zmiana właściwości komponentu
W naszym programie najpierw musimy dokonać pewnych zmian we właściwościach samego formularza. Aby to
uczynić, musisz zaznaczyć formularz — wystarczy jedno kliknięcie w obszarze projektanta formularzy.
Możesz także z listy rozwijalnej Inspektora obiektów wybrać pozycję Form1 .
Każdy komponent posiada właściwość Name; określa ona nazwę obiektu — czy to formularza, czy komponentu.
Nazwa ta musi być unikalna — za jej pomocą możemy się w kodzie odwoływać zarówno do metod obiektu, jak i
do właściwości.
3 z 30
2009-03-14 15:29
77983260.004.png
Delphi :: Kompendium :: Rozdział 3 - 4programmers.net
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_3
Na samym początku należałoby dokonać zmiany nazwy głównego formularza projektu. W tym celu odszukaj w
Inspektorze obiektów pozycję Name i zaznacz ją jednym kliknięciem (rysunek 3.1).
Rysunek 3.1. Zaznaczona właściwość Name
Co prawda nic się nie stanie, jeżeli zachowamy taką nazwę, jaka jest dotychczas, czyli Form1 — jest to nazwa
domyślna — lecz regułą stało się, aby nazywać formularze, powiedzmy — bardziej opisowo. Jeżeli Twoja
aplikacja jest bardzo skomplikowana i posiada wiele formularzy (może tak być), to nazywając je kolejno Form1 ,
Form2 itd. łatwo się pogubić. Dlatego też zazwyczaj nazwy formularzy określa się według funkcji, jakie pełnią —
np. MainForm , AboutForm . Pamiętaj, aby zawsze dodać w nazwie końcówkę Form (ang. formularz)!
Zmień więc właściwość Name , wpisując słowo MainForm i akceptując je poprzez naciśnięcie klawisza Enter . Od
tej pory formularz będzie nosił nazwę MainForm (formularz główny).
Szerokość i wysokość
Mając w dalszym ciągu zaznaczony formularz, zmień jego właściwości Width i Height na, odpowiednio, 400
( Width ) i 125 ( Height ). Rozmiar formularza zostanie zmieniony wraz ze zmianą właściwości w Inspektorze
obiektów.
Zdarzenia komponentów
W otwartym projekcie umieść komponent TLabel , nadaj jego właściwości Caption wartość Przykład użycia
komponentu TLabel , natomiast właściwości Name nadaj wartość lblMain .
Właściwość Name komponentu TButton , uprzednio umieszczonego na formularzu, zmień na btnMain , natomiast
Caption na Naciśnij mnie! .
Jak już napisałem w rozdziale pierwszym, zdarzenia służą do tego, aby odpowiednio reagować na sytuacje
stwarzane w wyniku działania programu. Podczas pracy z projektem kliknij dwukrotnie przycisk; Delphi
„przeniesie” Cię do Edytora kodu i automatycznie wygeneruje procedurę zdarzeniową.
procedure TMainForm. btnMainClick ( Sender: TObject ) ;
begin
end ;
Procedura ta jest nieco inna niż te, którymi zajmowaliśmy się w poprzednim rozdziale. Możesz w niej wpisać
kod, który będzie wykonywany po naciśnięciu przycisku przez użytkownika. Doprowadź tę procedurę (metode)
do takiej postaci:
procedure TMainForm. btnMainClick ( Sender: TObject ) ;
begin
lblMain. Caption := 'Napis zmieniono' ;
end ;
Uruchomienie programu i naciśnięcie przycisku spowoduje zmianę napisu w etykiecie. Widzisz więc, że
poszczególne właściwości komponentów można zmieniać również w kodzie, także podczas działania aplikacji.
Umożliwia to operator — znak kropki (.):
Nazwa_Obiektu.Nazwa_Właściwości := 'Nowa wartość';
Dostęp do poszczególnych elementów odbywa się mniej więcej tak, jak to widać powyżej.
Lista wygenerowanych zdarzeń w Inspektorze obiektów
Zaznacz ponownie komponent TButton i kliknij zakładkę Events w Inspektorze obiektów. Okno Inspektora
obiektów powinno wyglądać tak, jak na rysunku 3.2.
4 z 30
2009-03-14 15:29
77983260.005.png 77983260.006.png
Delphi :: Kompendium :: Rozdział 3 - 4programmers.net
http://4programmers.net/Delphi/Kompendium/Rozdzia%C5%82_3
Rysunek 3.2. Lista zdarzeń Inspektora obiektów
Zwróć uwagę, że jedna pozycja ( OnClick ) jest już zajęta — oznacza to, że zdarzenie OnClick komponentu
btnMain jest już wygenerowane. Zostało to wykonane automatycznie po tym, jak dwukrotnie kliknąłeś przycisk.
Generowanie pozostałych zdarzeń
Korzystać możesz ze wszystkich zdarzeń, jakie oferuje Ci Delphi w obrębie danego komponentu. Przykładowo
zdarzenie OnMouseMove umożliwia Ci oprogramowanie zdarzenia przesuwania kursora nad obiektem. Innymi
słowy, możesz odpowiednio na taką sytuację zareagować.
Jak odbywa się generowanie zdarzeń z poziomu Inspektora obiektów ? Zaznacz zdarzenie, klikając je — niech
to będzie OnMouseMove . Po prawej stronie pojawi się lista rozwijalna, która na razie jest pusta. Przesuń kursor
nad białe pole — powinien zmienić swój kształt. W tym momencie kliknij dwukrotnie — spowoduje to
wygenerowanie zdarzenia OnMouseMove .
procedure TMainForm. btnMainMouseMove ( Sender: TObject ; Shift: TShiftState;
X, Y: Integer ) ;
begin
end ;
W niniejszej książce dla określenia nazw komponentów będę posługiwał się prawidłowym
określeniem z literą T na początku — np. TButton , TLabel . Jest to prawidłowa nazwa dla
komponentów VCL, chociaż wiele osób nadaje komponentom nazwy pozbawione tej litery na
początku — Button, Label.
Jeżeli wygenerowane zdarzenie pozostanie puste, tj. nie będzie zawierało żadnego kodu,
zostanie usunięte podczas kompilacji lub zapisu projektu.
Kod generowany automatycznie
Zwróć uwagę na to, że podczas gdy umieszczasz komponenty na formularzu i dokonujesz różnych zmian,
Delphi jednocześnie pracuje w tle, modyfikując odpowiednio kod źródłowy programu. Po umieszczeniu przez
Ciebie na formularzu dwóch kontrolek i wygenerowaniu zdarzenia cały kod programu przedstawia się tak, jak na
listingu 3.3.
Listing 3.3. Kod formularza po dokonaniu zmian
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMainForm = class ( TForm )
btnMain: TButton;
Label1: TLabel;
procedure btnMainClick ( Sender: TObject ) ;
private
{ Private declarations }
5 z 30
2009-03-14 15:29
77983260.007.png
Zgłoś jeśli naruszono regulamin