Professional Documents
Culture Documents
rozprowadzana tylko i wycznie w formie dostarczonej przez jakiekolwiek zgody pisemnej wydawcy. Zabrania
Copyright for Polish edition by ZloteMysli.pl Data: 30.09.2006 Tytu: Programuj w Delphi i C++ Builder (fragment utworu) Autor: Mirosaw J. Kubiak
Projekt okadki: Marzena Osuchowicz Korekta: Sylwia Fortuna Skad: Anna Popis-Witkowska Internetowe Wydawnictwo Zote Myli Netina Sp. z o.o. ul. Daszyskiego 5 44-100 Gliwice WWW: www.ZloteMysli.pl EMAIL: kontakt@zlotemysli.pl Wszelkie prawa zastrzeone. All rights reserved.
SPIS TRECI
WSTP...................................................................................................................6 ROZDZIA 1. WPROWADZENIE DO PROGRAMOWANIA.......................................11
wiat algorytmw............................................................................................................11 Metody prezentacji algorytmw.....................................................................................13 Algorytm liniowy a algorytm z rozgazieniami............................................................14 Pseudojzyk.....................................................................................................................17 Na czym polega pisanie programw..............................................................................17 Programowanie strukturalne........................................................................................20 Programowanie obiektowe............................................................................................22 Jzyk programowania Pascal - rys historyczny............................................................22 Jzyk programowania Delphi programowanie wizualne..........................................23 Jzyki programowania C/C++ - rys historyczny..........................................................24 C++ Builder programowanie wizualne......................................................................25 Programowanie zdarzeniowe.........................................................................................26 Warto zapamita...........................................................................................................27
ROZDZIA 2. TWORZYMY PIERWSZY PROGRAM ...............................................30
Rozszerzenia plikw w Delphi i C++ Builder...............................................................30 Mj pierwszy program....................................................................................................31 Projekt.............................................................................................................................37 Tworzymy prost aplikacj............................................................................................37 Menu gwne i paski narzdzi.......................................................................................40 Paleta komponentw.....................................................................................................40 Tworzymy nasz pierwszy program................................................................................43 Program i jego struktura................................................................................................46 Moduy w Delphi............................................................................................................48 Preprocesor.....................................................................................................................50 Dyrektywa #include.......................................................................................................50 Dyrektywa #pragma.......................................................................................................51 Moduy w C++ Builder...................................................................................................54 Tworzymy drugi program..............................................................................................55 Komentarze.....................................................................................................................58 Tworzenie nowych programw i zapisywanie ich na dysku........................................58 Wprowadzanie programu rdowego z dysku do edytora kodu rdowego.............59 Koczenie pracy w rodowisku Delphi (lub C++ Builder) ..........................................59 Warto zapamita...........................................................................................................59
ROZDZIA 3. DEKLARACJA STAYCH I ZMIENNYCH W PROGRAMIE.............................................................................61
Identyfikatory.................................................................................................................61 Deklarujemy stae w programie.....................................................................................62 Deklarujemy zmienne w programie..............................................................................64 Sowa kluczowe...............................................................................................................68 Nadawanie zmiennym wartoci.....................................................................................69 Warto zapamita...........................................................................................................79
ROZDZIA 4. OPERACJE WEJCIA/WYJCIA CZ I......................................81
Operatory logiczne koniunkcji AND i alternatywy OR...............................................117 Instrukcje wyboru.........................................................................................................139 Pierwszy wikszy program...........................................................................................147 Warto zapamita.........................................................................................................161
ROZDZIA 7. ITERACJE......................................................................................163
Instrukcje iteracyjne.....................................................................................................163 Instrukcja for................................................................................................................164 Jak dziaa ptla for?......................................................................................................167 Operatory inkrementacji i dekrementacji...................................................................174 Poznajemy operator modulo........................................................................................179 Poznajemy operator negacji.........................................................................................182 Zmiana przyrostu zmiennej sterujcej ptl...............................................................185 Liczby Fibonacciego.....................................................................................................204 Analizujemy pozostae instrukcje iteracyjne..............................................................208 Instrukcja iteracyjna repeat (Delphi).........................................................................209 Instrukcja iteracyjna do ... while (C++ Builder).........................................................212 Schemat Hornera..........................................................................................................215 Algorytm Euklidesa......................................................................................................222 Instrukcja iteracyjna while (Delphi)...........................................................................228 Instrukcja iteracyjna while (C++ Builder)..................................................................230 Priorytety poznanych operatorw...............................................................................233 Typ wyliczeniowy.........................................................................................................234 Warto zapamita.........................................................................................................239
ZAPROSZENIE DO II CZCI KSIKI...............................................................242 DODATEK..........................................................................................................243
D1. Formatowanie acuchw tekstowych..................................................................243 D2. Wybrane systemowe procedury i funkcje konwersji typu w Delphi i C++ Builder......................................................................245 D3. Wywietlanie komunikatw..................................................................................246
Mirosaw J. Kubiak
str. 5
Mirosaw J. Kubiak
str. 6
Plik kodu rdowego Plik nagwkowy Plik formularza Skompilowany plik binarny Skompilowany plik zasobw Zapisanie ustawie pulpitu Ustawienia projektu Pliki rdowe pakietu Skompilowany pakiet Ukad pulpitu
.pas brak .dfm .dcu .res lub .dcr .dsk .dof .dpk .bpl .dst
.cpp .h lub .hpp .dfm .obj .res .dsk brak .bpk .bpl .dst
Dla celw naszej ksiki, zdecydowalimy umieci w odpowiednich katalogach pliki tworzone przez rodowisko Delphi (lub C++ Builder). Na przykad w katalogu P01 znajduj si pliki stworzone przez rodowisko Delphi (lub C++ Builder) i zwizany z nimi okrelony programistyczny problem. Dodatkowo naley stworzy katalog dla Delphi oraz dla C++ Builder, gdzie bd umieszczane wszystkie podkatalogi, np. P01 zawierajce okrelony problem programistyczny dla danego jzyka programowania.
atwo zauway, e w niektrych przypadkach rozszerzenia plikw stosowane przez rodowiska programistyczne Delphi i C++ Builder s takie same.
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 7
Mj pierwszy program
Poniej zamieszczono pierwszy program napisany w jzyku
programowania Delphi i C++ Builder. Delphi (katalog P01): unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:= 'Moj pierwszy program w Delphi'; end; end.
Mirosaw J. Kubiak
str. 8
A oto ten sam program napisany w jzyku C++ Builder (katalog P01):
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Edit1->Text="Moj pierwszy program w C++ Builder"; } //---------------------------------------------------------------------------
Prosz si nie martwi, jeli instrukcje jzyka Delphi lub C++ Builder s dla nas zupenie niezrozumiae. Ich znaczenie dokadnie poznamy w tej i w nastpnych lekcjach2. Piszc programy w Delphi (lub w C++ Builderze) bdziemy korzystali ze zintegrowanego rodowiska Delphi (lub C++ Buildera), ktre funkcjonuje w systemie operacyjnym Windows.
Jak przekonany za chwil si, wiele linijek kodu generuje samo rodowisko Delphi (C++ Builder).
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 9
Aby dobrze zapozna si z nowym rodowiskiem programistycznym, jakie oferuje Delphi lub C++ Builder, warto dokadnie zapozna si z jego podstawow filozofi. Jzyki Turbo Pascal (TP), Turbo C++ i zwizane z nimi rodowisko DOS to bardzo proste narzdzia do nauki programowania, gdzie ciar jego funkcjonowania by usytuowany na pisaniu algorytmw. Pisanie nieskomplikowanych programw wycznie do celw dydaktycznych nie sprawiao w tym rodowisku adnych trudnoci. Wad tego rodowiska by brak gotowych i wygodnych interfejsw komunikacyjnych pomidzy programem a uytkownikiem. Delphi (i C++ Builder) to wyrafinowane, nowoczesne i wizualne rodowisko programistyczne, oferujce wiele gotowych rozwiza, w ktrym naley si odnale, aby swobodnie mc w nim pisa proste lub skomplikowane aplikacje. Autor postawi sobie za zadanie poprowadzenia Czytelnika poprzez oba rodowiska programistyczne w sposb prosty, ilustrujc nauk programowania w jzykach przykadami Delphi i C++ Builder nieskomplikowanymi praktycznych programw.
Gwnym celem tej ksiki jest przyblienie obu rodowisk programistycznych, bez wnikania w ich zawioci, aby mc swobodne pisa rne programy w obu jzykach programowania nie tylko do celw dydaktycznych.
Mirosaw J. Kubiak
str. 10
Rys. 2.1. Zintegrowane rodowisko Delphi z widocznym u gry menu i palet komponentw. Poniej na rodku widnieje formularz (Form1), a z lewej strony znajduje si Object TreeView oraz Object Inspector. Edytor kodu rdowego znajduje si pod formularzem.
Rys. 2.2. Zintegrowane rodowisko C++ Builder z widocznym u gry menu i palet komponentw. Poniej na rodku widnieje formularz (Form1), a z lewej strony znajduje si Object TreeView oraz Object Inspector. Edytor kodu rdowego znajduje si pod formularzem.
Mirosaw J. Kubiak
str. 11
Zintegrowane Integrated
rodowisko Development
Delphi
(C++
Builder) skada
IDE si
(ang. m.in.
Environment)
z nastpujcych elementw:
menu gwne i paski narzdzi, palety komponentw, projektanta formularzy (ang. Form Designer), edytora kodu rdowego (ang. Code Editor), inspektora obiektw (ang. Object Inspector) wraz z oknem hierarchii komponentw oraz menedera projektw. bdziemy omawiali dokadnie tych czci skadowych
Nie
rodowiska Delphi, odsyajc Czytelnika do istniejcej bogatej literatury np. [Reisdorph, 2001, Dorobek, 2003]. Wybierzemy tylko to, co jest nam potrzebne i niezbdne do dalszej nauki pisania programw.
Rys. 2.3. Zintegrowane rodowisko Delphi z widocznym na rodku edytorem kodu rdowego, formularz znajduje si pod edytorem.
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 12
Rys. 2.4. Zintegrowane rodowisko C++ Builder z widocznym na rodku edytorem kodu rdowego, formularz znajduje si pod edytorem.
Projekt
Jest to zestaw rdowych i binarnych plikw wzajemnie ze sob powizanych, ktre po procesie kompilacji tworz jeden wykonywalny program (*.exe) lub bibliotek *.dll.
Mirosaw J. Kubiak
str. 13
1. Utwrz na dysku dowolny katalog, w ktrym bdziesz zapisywa wszystkie pliki tworzone przez Delphi (C++ Builder) dla danego projektu. 2. Uruchom Delphi (C++ Builder) w taki sposb, jak uruchamia si programy w Windows. Na ekranie monitora zobaczysz zintegrowane rodowisko Delphi (C+ + Builder). Na rodku ekranu zobaczysz okno projektanta formularzy (ang. Form Designer) o nazwie Form1. Pod nim znajduje si edytor kodu rdowego (ang. Code Editor) o nazwie Unit1.pas (Unit1.cpp). Zawarto edytora kodu, generowana przez program jest nastpujca dla: Unit1.pas unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 14
{ Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} end. Unit1.cpp
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
Delphi (C++ Builder) jest tak skonstruowany, e wszelkie zmiany dokonane na formularzu pocigaj za sob zmiany w edytorze kodu, co oznacza e edytor kodu jest cile zwizany z projektantem formularzy. Jeli teraz porwnamy nasz pierwszy program napisany w Delphi (lub C++ Builder), a przedstawiony na pocztku tej lekcji,
Mirosaw J. Kubiak
str. 15
to moemy zobaczy, ile jest naszego wkadu w projekt, a ile samego rodowiska Delphi.
4. Wybierz opcj File|Save All. Otworzy si okienko z pytaniem o nazw pliku rdowego moduu. W polu Save (Zapisz) wska utworzony przed chwil katalog. 5. W polu Nazwa pliku wpisz swoj nazw (lub pozostaw domyln) i nacinij przycisk Zapisz. 6. Teraz naley poda nazw projektu. W polu Nazwa pliku wpisz swoj nazw projektu (lub pozostaw domyln) i ponownie nacinij przycisk Zapisz. Podczas swojej pracy Delphi (i C++ Builder) tworzy szereg plikw, ktre zostay omwione wczeniej. Wspomnimy jeszcze tylko o jednym wsplnym rozszerzeniu pliku. Rozszerzenie .exe Opis Wykonywalny program wynikowy
Mirosaw J. Kubiak
str. 16
Paleta komponentw
Suy do wybierania komponentw albo innych kontrolek (np. kontrolek ActiveX) w celu umieszczenia ich na formularzu. Paleta ta skada si z wielu kart, zwanych czasami stronami. Kliknicie odpowiedniej zakadki powoduje otwarcie odpowiadajcej jej karty. W tej ksice bdziemy si posugiwali m.in. kartami Standard i Additional.
1. wybranie odpowiedniego komponentu znajdujcego si na palecie klikniciem myszy, 2. umieszczenie tego komponentu na formularzu klikniciem myszy.
Mirosaw J. Kubiak
str. 17
Mirosaw J. Kubiak
str. 18
Karta Standard Komponent Nazwa komponentu Edit liniowe pole tekstowe, suce do np. pobrania danych od uytkownika Label etykieta suca do wywietlania tekstu Button przycisk Panel pozwala komponentw na zamieszczanie innych
MainMenu pozwala na utworzenie w prosty sposb menu dla wasnej aplikacji Memo pole tekstowe suce do edycji duej iloci tekstu
Karta Additional Komponent StringGrid formularzu i wierszy Nazwa komponentu pozwala na umieszczeniu na siatki, skadajcej si z kolumn
Mirosaw J. Kubiak
str. 19
1.
2. Nastpnie na palecie komponentw klikamy mysz przycisk Button i ponownie klikamy mysz na formularzu w miejscu, gdzie chcemy, eby si on znajdowa. Nastpnie w narzdziach Object Inspectora szukamy Caption i zamiast Button1 wpisujemy sowo Zacznij. Object Inspector pokazuje waciwoci (Properties) i zdarzenia (Events), ktre zostay przypisane rnym komponentom, dajc atw moliwo zmiany ich waciwoci. 3. Z palety komponentw wybieramy komponent Edit i umieszczamy go na formularzu. W Object Inspectorze szukamy Text i usuwamy sowo Edit1. 4. Dwukrotnie klikamy na formularzu to miejsce, gdzie zosta umieszczony komponent Zacznij, aby obsuy zwizane z tym komponentem zdarzenie. W okienku Unit1.pas ukaza si dodatkowy fragment kodu widoczny w ramce poniej:
Mirosaw J. Kubiak
str. 20
Pomidzy sowami kluczowymi begin end; wpisujemy zasadniczy fragment kodu naszego programu: Edit1.Text:= 'Moj pierwszy program w Delphi';
5. Naciskajc klawisz F9 lub Run|Run, lub przycisk kompilujemy nasz program. 6. Po skompilowaniu na formularzu naciskamy przycisk Zacznij, ktry wygenerowa tekst: Moj pierwszy program w Delphi. 7. Powtarzamy wszystkie czynnoci, aby je utrwali. C++ Builder
1.
2. Nastpnie na palecie komponentw klikamy mysz przycisk Button i ponownie klikamy mysz na formularzu w miejscu, gdzie chcemy, eby si on znajdowa. Nastpnie w narzdziach Object Inspectora szukamy Caption i zamiast Button1 wpisujemy sowo Zacznij. Object Inspector pokazuje waciwoci (Properties) i zdarzenia (Events), ktre zostay przypisane rnym komponentom, dajc atw moliwo zmiany ich waciwoci. 3. Z palety komponentw wybieramy komponent Edit i umieszczamy go na formularzu. W Object Inspectorze szukamy Text i usuwamy sowo Edit1. 4. Dwukrotnie klikamy na formularzu to miejsce, gdzie zosta umieszczony komponent Zacznij, aby obsuy zwizane
Mirosaw J. Kubiak
str. 21
z tym komponentem zdarzenie. W okienku Unit1.cpp ukaza si dodatkowy fragment kodu widoczny w ramce poniej:
void __fastcall TForm1::Button1Click(TObject *Sender) { } 5. Pomidzy nawiasami klamrowymi { }; wpisujemy zasadniczy fragment kodu naszego programu: Edit1->Text="Moj pierwszy program w C++ Builder"; 6. Naciskajc klawisz F9 lub Run|Run, lub przycisk kompilujemy nasz program. 7. Po skompilowaniu na formularzu naciskamy przycisk Zacznij, ktry wygenerowa tekst: Moj pierwszy program w C++ Builder. 8. Powtarzamy wszystkie czynnoci, aby je utrwali.
Rys. 2.7. Mj pierwszy program w C++ Builderze (analogiczny rezultat otrzymamy w Delphi) katalog (P01).
Mirosaw J. Kubiak
str. 22
1. gwny plik programu oraz 2. jeden lub wicej moduw. Poniej zamieszczono struktur gwnego pliku programu.
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
3
Mirosaw J. Kubiak
str. 23
Na pocztku programu znajduje si sowo kluczowe4 program, po ktrym nastpuje nazwa programu np. Project1 zakoczona rednikiem. Deklaracja uses specyfikuje list moduw skadajcych si na program. Moduy w Delphi to pliki drugorzdne, do ktrych odwoujemy si poprzez program. Ogromn zalet rodowiska Delphi jest automatyczne generowanie pliku projektu. Aby si o tym przekona, naley uruchomi Delphi, a nastpnie klikn Project| View Source. Sekcja uses zawiera modu Forms oraz modu Unit1 z dyrektyw in specyfikujc nazw pliku zawierajc podany modu. Zapis Unit1 in 'Unit1.pas' oznacza, e modu Unit1 znajduje si w pliku Unit1.pas. Sowo kluczowe uses umoliwia zarzdzanie kompilacj i konsolidacj aplikacji. Gwny kod tej aplikacji: Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; znajduje si pomidzy sowami kluczowymi begin i end. Zarwno modu, jak i program musi zosta zakoczony kropk.
Mirosaw J. Kubiak
str. 24
Moduy w Delphi
Kady formularz zosta zdefiniowany w module. Moduy umoliwiaj definiowanie i udostpnianie zestawu podprogramw, czyli procedur i funkcji. Pusty modu, zawierajcy kod poniej, uzyskamy naciskajc File|New|Unit. unit Unit1; interface implementation end.
Modu, ktry ma swoj jednoznaczn nazw - w tym wypadku (Unit1) - skada z sekcji interface, gdzie deklaruje si wszystkie identyfikatory widoczne dla innych moduw oraz z sekcji implementation deklaracje. W module powinny zosta zadeklarowane wszystkie identyfikatory przed ich uyciem. W sekcji interface oraz w sekcji implementation mog by zadeklarowane:
zawierajcej
kod
programu
dodatkowe
stae za pomoc sowa kluczowego const, zmienne i obiekty za pomoc sowa kluczowego var, typy i klasy za pomoc sowa kluczowego type, funkcje i procedury.
Mirosaw J. Kubiak
str. 25
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------USEFORM("Unit1.cpp", Form1); //--------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //---------------------------------------------------------------------------
Mirosaw J. Kubiak
str. 26
Preprocesor
Kod programu znajdujcy si w plikach rdowych nie jest poddawany kompilacji w postaci, w jakiej moemy zobaczy w edytorze. Wersj plikw rdowych przeznaczon do kompilacji generuje mechanizm zwany preprocesorem. Przeglda on kod w poszukiwaniu instrukcji, ktre ma wykona. Tymi instrukcjami s dyrektywy preprocesora, ktre rozpoczynaj si od znaku #. Efektem pracy preprocesora jest zmodyfikowana posta kodu rdowego. Modyfikacje wykonane przez preprocesor w kodzie programu nie s widoczne i istniej jedynie podczas kompilacji. Na pocztku gwnego pliku programu znajduj si dwie dyrektywy preprocesora: #include <vcl.h> #pragma hdrstop Poniej pokrtce omwimy ich znaczenie.
Dyrektywa #include
Jej zadaniem jest doczenie do pliku o podanej nazwie do kodu rdowego. Jest ona najczciej wykorzystywana do wczania plikw nagwkowych (*.h). Oglna jej posta jest nastpujca: #include <nazwa_pliku>.
Mirosaw J. Kubiak
str. 27
Aby plik mg by doczony, musi si on znajdowa w ciece plikw nagwkowych. Zapis #include nazwa_pliku oznacza, e plik jest najpierw poszukiwany w katalogu biecym (tam, gdzie znajduje si plik rdowy projektu), a nastpnie w ciece plikw nagwkowych.
Dyrektywa #pragma
Suy do definiowania nowych dyrektyw, specyficznych dla danego kompilatora. Ta dyrektywa koczy list statycznych plikw nagwkowych (wczanych za pomoc dyrektywy include). Dyrektywa #pragma hdrstop (ang. header stop) informuje kompilator, e wanie nastpi koniec listy plikw nagwkowych, ktre maj by prekompilowane. Dyrektywa #include <vcl.h> oznacza, e do programu naley doczy pliki nagwkowe biblioteki VCL. Kady program w C, C++ oraz w C++ Builder musi zawiera w sobie przynajmniej jedn funkcj. Funkcja WinMain() jest gwn funkcj programu C++ Builder5 i kady program ma dokadnie jedn tak funkcj, nawet jeli skada si z wielu moduw. Jest ona
5
Programy pisane w C++ Builder i posugujce si klas formularza nie zawieraj funkcji void main(void) znan z jzyka C/C++ .
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 28
wywoywana jako pierwsza i zawiera w sobie zestaw kolejnych instrukcji wykonywanych przez program, zawartych pomidzy par nawiasw klamrowych { ... }. Skadnia funkcji WinMain() jest nastpujca: WINAPI WinMain(HINSTANCE AktEgz, HINSTANCE
PoprzEgz, LPSTR Parametry, int Stan), gdzie HINSTANCE w wolnym tumaczeniu oznacza uchwyty. S one niezbdne, gdy system Windows jest systemem wielozadaniowym, co oznacza, e w danej chwili moe dziaa wiele egzemplarzy danego programu. Argumenty tej funkcji maj nastpujce znaczenie: AktEgz uchwyt aktualnego egzemplarza programu, PoprzEgz uchwyt poprzedniego egzemplarza programu, Parametry acuch z parametrami wywoania programu, Stan okrela, w jakim stanie jest program. Gwny kod tej aplikacji ma posta: Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run();
Mirosaw J. Kubiak
str. 29
Skada si on z procesu inicjacji metoda 6 Initialize(), tworzenia formularza metoda CreateForm() oraz metoda Run(). Cao gwnego kodu aplikacji umieszczono w nawiasach klamrowych try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } gdzie wykorzystano obsug sytuacji wyjtkowych try catch. Jeli powyszy proces tworzenia aplikacji si nie powiedzie, to na ekranie zobaczymy komunikat w postaci wygenerowanego przez system tzw. wyjtku (ang. exception), wywietlonego przy pomocy funkcji ShowException(). Instrukcja return 0 zwraca do systemu operacyjnego kod zakoczenia dziaania programu.
6
Mirosaw J. Kubiak
str. 30
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //---------------------------------------------------------------------------
Modu, ktry ma swoj jednoznaczn nazw w tym wypadku (Unit1.cpp) skada si m.in. z dyrektyw dla preprocesora oraz funkcji __fastcall. Zanim zaczniemy korzysta z formularza, ktry jest pierwszym obiektem, musi on zosta odpowiednio zainicjowany. Umoliwia to nam specjalna funkcja skadowa, noszca tak sam nazw jak klasa,
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 31
do ktrej ten obiekt naley. Prototyp tej funkcji (nazywanej konstruktorem) z parametrami ma posta: __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)7
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7
Konwencja __fastcall (szybkie wywoanie) zapewnia, e parametry konstruktora zostan przekazane przez rejestry procesora, a peny tekst konstruktora klasy TForm1 zostanie automatycznie umieszczony w module Unit1.cpp i tam te zostanie zainicjowany.
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 32
Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:='Moj pierwszy program nie sprawil mi zadnych trudnosci'; end; end.
C++ Builder Wzbogaceni o dodatkowe informacje dotyczce struktury programu sprbujmy napisa program w C++ Builder, ktry wypisuje na ekranie komunikat: Moj pierwszy program w C++ Builder nie sprawil mi zadnych trudnosci.
Mirosaw J. Kubiak
str. 33
Jeli mamy nadal trudnoci z napisaniem takiego programu, to kompletny jego wydruk znajduje si poniej.
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { Edit1->Text="Moj pierwszy program nie sprawil mi zadnych trudnosci"; } //---------------------------------------------------------------------------
Domylnie generowana nazwa funkcji Button1Click obsugi zdarzenia (ang. event handler) skada si z nazwy obiektu Button1 i nazwy zdarzenia Click. Natomiast (TObject *Sender) to argument funkcji. TObject to klasa macierzysta, natomiast *Sender to wskanik (ang. pointer) obiektu klasy TObject. Skadnia ta opiera si na mechanizmie dziedziczenia8, a program C+
8
Mirosaw J. Kubiak
str. 34
Komentarze
W Delphi (i w C++ Builderze) komentarze moemy wstawia do programu na trzy sposoby: {To jest komentarz} (*To tez jest komentarz*) //I to tez jest komentarz, ale tylko do konca linii
Application. Zapisujemy j na dysku klikajc: File|Save lub File| Save As lub File|Save Project As lub File|Save All.
Mirosaw J. Kubiak
str. 35
Warto zapamita
Podczas tej lekcji nauczylimy si pisa proste programy w edytorze tekstw Delphi (i C++ Builder), zapisywa je do pamici zewntrznej (dysk twardy, dyskietka) oraz wczytywa wczeniej zapisane pliki z pamici zewntrznej do edytora.
1. Wszystkie programy w jzyku w Delphi rozpoczynaj si od sowa kluczowego program, po ktrym nastpuje nazwa programu. 2. Nazwa programu nie moe rozpoczyna si liczb. 3. Gwna cz programu w jzyku C++ Builder rozpoczyna si od instrukcji WinMain(). 4. Komentarze w programach bdziemy umieszczali w nawiasach {} lub uywajc znakw //. 5. Aby poprawi czytelno programw rdowych, naley oprcz komentarzy wstawi puste linie rozdzielajce
Mirosaw J. Kubiak
str. 36
niepowizane ze sob instrukcje. Gdy kompilator trafi na pust lini, to po prostu ja pominie. 6. Wszystkie programy (zawarte w tej ksice) i napisane w jzyku Delphi (lub C++ Builder) wywietlaj informacje na ekranie przy pomocy komponentw.
Mirosaw J. Kubiak
str. 37
Identyfikatory
Programy przechowuj informacje w postaci staych i zmiennych. Jeli chcemy umieci w programie stae lub zmienne, to musimy je wczeniej zadeklarowa. W zalenoci od tego, jakiego rodzaju wartoci chcemy przechowywa, na przykad liczb cakowit, liczb zmiennoprzecinkow lub liter alfabetu, to musimy uywa staych i zmiennych okrelonego typu. Typ staych i zmiennych okrela typ wartoci, jakie mog one przechowywa, jak rwnie zbir operacji matematycznych (dodawanie, mnoenie itd.), jakie moe program wykonywa na tych wartociach. W czasie tej lekcji przedstawimy, jak tworzy i wykorzystywa stae i zmienne w programach napisanych w Delphi (i w C++ Builder). Do oznaczania nazw staych, zmiennych, funkcji i innych obiektw zdefiniowanych przez S uytkownika to okrelone bdziemy cigi posugiwali znakw si identyfikatorami. alfabetu
Mirosaw J. Kubiak
str. 38
angielskiego, przy czym pierwszy musi znak by liter. Nie wolno definiowa identyfikatorw takich samych jak sowa kluczowe. A oto kilka przykadowych identyfikatorw: Poprawne dlugosc minimum maksimum_boku_a Niepoprawne 570dlugosc ?!minimum maksimum boku a
Mirosaw J. Kubiak
str. 39
oznacza, e w caym programie zostaa zadeklarowana staa o nazwie cyfra i o wartoci rwnej 10. C++ Builder Do deklarowania staych suy sowo kluczowe const (pisane wycznie maymi literami). Oglna posta deklaracji staej dla tego jzyka jest nastpujca: const typ nazwa_staej = warto; Zapis const int cyfra = 10; oznacza, e w caym programie zostaa zadeklarowana staa typu cakowitego int (ang. integer) o nazwie cyfra i o wartoci rwnej 10. Warto tak zdefiniowanej staej w obu jzykach pozostaje niezmienna w programie, a kada prba zmiany tej wartoci bdzie sygnalizowana jako bd. C++ Builder Do deklarowania staych suy sowo kluczowe const (pisane wycznie maymi literami). Oglna posta deklaracji staej dla tego jzyka jest nastpujca: const typ nazwa_staej = warto;
Mirosaw J. Kubiak
str. 40
Zapis const int cyfra = 10; oznacza, e w caym programie zostaa zadeklarowana staa typu cakowitego int (ang. integer) o nazwie cyfra i o wartoci rwnej 10. Warto tak zdefiniowanej staej w obu jzykach pozostaje niezmienna w programie, a kada prba zmiany tej wartoci bdzie sygnalizowana jako bd.
Mirosaw J. Kubiak
str. 41
var liczba : integer; W jzyku Delphi (i w C++ Builder) nazw zmiennej (jej identyfikator) ustala programista. UWAGA: nazwa zmiennej nie moe zaczyna si od cyfry. Piszc program programista moe skorzysta z (zamieszczonych poniej) nastpujcych predefiniowanych typw: Delphi Niektre typy danych s ze znakiem, a niektre bez znaku. Zmienne ze znakiem przechowuj zarwno liczby dodatnie, jak i ujemne. Zmienne bez znaku przechowuj tylko liczby dodatnie.
Tabela 3.1. Wybrane predefiniowane typy w jzyku Delphi dla aplikacji 32bitowych.
Typ danej ShortInt Byte Char WideChar SmallInt Word LongInt Int64
Rozmiar w bajtach 1 1 1 2 2 2 4 8
Zakres wartoci -128 127 0 255 0 255 0 65 535 - 32 768 32 767 0 65 535 - 2 147 483 648 2 147 483 647 od - 9 223 372 036 854 775 808
Mirosaw J. Kubiak
str. 42
do 9 223 372 036 854 775 807 Integer Cardinal LongWord Single Double Real Extended Comp 4 4 4 4 8 8 10 8 Tak samo jak LongInt 0 4 294 967 925 Tak samo jak Cardinal 1,5 x 10-45 3,4 x 1038 5,0 x 10-324 1,7 x 10308 Tak samo jak Double 3,4 x 10-4932 1,1 x 104932 od - 9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 Boolean 1 False lub True
C++ Builder W jzyku w C++ Builder wszystkie zmienne, zanim zostan uyte w programie, musz wczeniej zosta zadeklarowane. Aby zadeklarowa zmienn w programie, musimy okreli jej typ i nazw (identyfikator), przez ktr program bdzie odwoywa si do tej zmiennej. Ogln posta deklaracji zmiennej przestawiono poniej: typ_zmiennej nazwa zmiennej; Na przykad deklaracje zmiennej o nazwie liczba typu int deklarujemy w sposb nastpujcy: int liczba;
Copyright by Wydawnictwo Zote Myli & Mirosaw J. Kubiak
Mirosaw J. Kubiak
str. 43
W Tabeli 3.2 zawarto najbardziej rozpowszechnione (standardowe) typy zmiennych stosowane w jzyku w C++ Builder.
Tabela 3.2. Powszechnie stosowane typy zmiennych cakowite i rzeczywiste stosowane w jzyku w C++ Builder oraz przydzielona dla nich pami w bitach.
Typ cakowity unsigned char signed char unsigned int short signed int signed int long unsigned int long signed int
Liczba bitw 8 8 16 16 16 32 32
Przechowywane wartoci 0 255 - 128 127 0 65 535 - 32 768 32 767 - 32 768 32 767 0 4 294 967 295 - 2 147 483 648 2 147 483 647 Przechowywane wartoci 3.4*10-38 3.4*1038 1.7*10-3081.7*10308 3.4*10-4932 1.1*104932
Typ rzeczywisty float (liczby rzeczywiste) double (liczby o podwjnej precyzji) long double (liczby o wysokiej precyzji)
Liczba bitw 32 64
80
W jzyku C++ Builder mamy do dyspozycji typ logiczny bool. Jego zmienne mog przyjmowa dwie wartoci true (prawda) oraz false (fasz).
Mirosaw J. Kubiak
str. 44
Sowa kluczowe
Podczas tworzenia nazw zmiennych musimy pamita, e w obu jzykach programowania istniej pewne zarezerwowane sowa, ktre nie mog by uywane jako zmienne. Te zarezerwowane sowa to s sowa kluczowe, ktre maj specjalne znaczenie dla kompilatora. Delphi UWAGA: sowa kluczowe w jzyku Delphi moemy pisa zarwno duymi, jak i maymi literami. Umawiamy si, e w tej ksice sowa kluczowe w programach napisanych w jzyku Delphi piszemy maymi literami.
Tabela 3.3. Wybrane sowa kluczowe w jzyku Delphi.
asm
begin
case
construct- destructor div or else goto inline not record string until xor end if interface of repeat then uses file implementation label or set to var
procedure program
Mirosaw J. Kubiak
str. 45
C++ Builder UWAGA: sowa kluczowe w jzyku C++ Builder piszemy wycznie maymi literami.
Tabela 3.4. Wybrane sowa kluczowe w C++ Builder.
break const double for int protected signed template union while
Mirosaw J. Kubiak
str. 46
Delphi Do przypisania zmiennej nowej wartoci suy instrukcja przypisania oznaczona symbolem := (dwukropek i znak rwnoci). Oglna posta tej instrukcji jest nastpujca: nazwa_zmiennej := wyraenie Do wywietlania na ekranie wartoci zmiennych posuymy si np. polem Edit. Na formularzu wykonujemy nastpujce czynnoci:
1. umieszczamy na nim trzy komponenty Panel, komponenty Edit oraz dwa przyciski Button,
cztery
2. po umieszczeniu na formularzu komponentu Panel1 naley na w Object Inspectorze zmieni we waciwociach (Properties) w Caption Panel1 na Litera, Panel2 na Liczba oraz Panel3 na Pomiar, 3. po umieszczeniu na formularzu przycisku Button naley w Object Inspectorze zmieni we waciwociach (Properties) w Caption Button1 na Zacznij i Button2 na Zakocz. Ilustruje to rysunek poniej.
Mirosaw J. Kubiak
str. 47
4. nastpnie dwukrotnie klikamy na formularzu przycisk Zacznij i podpinamy zwizan z nim procedur procedur TForm1.Button1Click(Sender: TObject) z nastpujcym kodem: procedure TForm1.Button1Click(Sender: TObject); var litera : Char; liczba : Integer; pomiar : Real; begin litera:='A'; liczba:=120; pomiar:=78.231;
Mirosaw J. Kubiak
str. 48
Edit1.Text:=litera; Edit2.Text:=IntToStr(liczba); Edit3.Text:=Format('%2.2f', [pomiar]); end; 5. W ostatnim etapie dwukrotnie klikamy przycisk Zakocz i w procedurze procedure TForm1.Button2Click(Sender: TObject) umieszczamy nastpujcy kod: procedure TForm1.Button2Click(Sender: TObject); begin Edit4.Text:='Koniec programu'; end; Kilka sw wyjanienia powicimy nastpujcym linijkom kodu: Edit2.Text:=IntToStr(liczba); Edit3.Text:=Format('%2.2f', [pomiar]); Zapis Edit2.Text:=InttoStr(liczba) oznacza, e aby w polu Edit2 moga si pojawi zmienna liczba, to musi na niej zosta wykonana konwersja typu przy pomocy procedury IntToStr. Wicej informacji na temat systemowych procedur konwersji typu znajdzie czytelnik w Dodatku na kocu ksiki.
Mirosaw J. Kubiak
str. 49
Zapis Edit3.Text:=Format('%2.2f', [pomiar]) oznacza, e aby w polu Edit3 moga si pojawi zmienna pomiar typu rzeczywistego, musi ona zosta najpierw poddana formatowaniu. Wicej informacji na temat formatowania acuchw tekstowych znajdzie Czytelnik w Dodatku. Poniej znajduje si cay program napisany w Delphi (P02).
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Button2: TButton; Panel3: TPanel; Edit4: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1;
Mirosaw J. Kubiak
str. 50
implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var litera : Char; liczba : Integer; pomiar : Real; begin litera:='A'; liczba:=120; pomiar:=78.231; Edit1.Text:=litera; Edit2.Text:=IntToStr(liczba); Edit3.Text:=Format('%2.2f', [pomiar]); end; procedure TForm1.Button2Click(Sender: TObject); begin Edit4.Text:='Koniec programu'; end; end.
C++ Builder Po zadeklarowaniu zmiennej, przy uyciu operatora przypisania (oznaczonego nastpujca: nazwa_zmiennej = wyraenie znakiem rwnoci =) moemy przypisa jej odpowiedni warto. Oglna posta instrukcji przypisania jest
Mirosaw J. Kubiak
str. 51
Do wywietlania na ekranie wartoci zmiennych posuymy si polem Edit. Na formularzu wykonujemy nastpujce czynnoci:
1. umieszczamy na nim trzy komponenty Panel, komponenty Edit oraz dwa przyciski Button,
cztery
2. po umieszczeniu na formularzu komponentu Panel1 naley na w Object Inspectorze zmieni we waciwociach (Properties) w Caption Panel1 na Litera, Panel2 na Liczba oraz Panel3 na Pomiar. 3. po umieszczeniu na formularzu przycisku Button naley w Object Inspectorze zmieni we waciwociach (Properties) w Caption Button1 na Zacznij i Button2 na Zakocz. Ilustruje to rysunek poniej.
4. nastpnie dwukrotnie klikamy na formularzu przycisk Zacznij i podpinamy zwizan z nim funkcj void __fastcall
Mirosaw J. Kubiak
str. 52
TForm1::Button1Click(TObject *Sender) z nastpujcym kodem: void __fastcall TForm1::Button1Click(TObject *Sender) { char litera; int liczba; float pomiar; litera = 'A'; liczba = 120; pomiar = 78.231; Edit1->Text=litera; Edit2->Text=IntToStr(liczba); Edit3->Text=FloatToStrF(pomiar,ffNumber,4,2); } 5. W ostatnim etapie dwukrotnie klikamy przycisk Zakocz i w funkcji void __fastcall Tform1::Button2Click (TObject *Sender) umieszczamy nastpujcy kod:
Mirosaw J. Kubiak
str. 53
{ Edit4->Text="Koniec programu"; } Kilka sw wyjanienia powicimy nastpujcym linijkom kodu: Edit2->Text=IntToStr(liczba); Edit3->Text=FloatToStrF(pomiar,ffNumber,4,2); Zapis Edit2->Text=IntToStr(liczba) oznacza, e aby w polu Edit2 moga si pojawi zmienna liczba, to musi na niej zosta wykonana konwersja typu przy pomocy procedury IntToStr. Wicej informacji na temat systemowych procedur konwersji typu znajdzie czytelnik w Dodatku. Zapis typu Edit3->Text=FloatToStrF(pomiar,ffNumber,4,2) rzeczywistego, musi ona zosta poddana najpierw
oznacza, e aby w polu Edit3 moga si pojawi zmienna pomiar formatowaniu. Wicej informacji na temat formatowania acuchw tekstowych znajdzie Czytelnik w Dodatku na kocu ksiki. Poniej znajduje si cay program napisany w C++ Builder (P02).
Mirosaw J. Kubiak
str. 54
#include "Unit1.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender) { char litera; int liczba; float pomiar; litera = 'A'; liczba = 120; pomiar = 78.231; Edit1->Text=litera; Edit2->Text=IntToStr(liczba); Edit3->Text=FloatToStrF(pomiar,ffNumber,4,2); } //--------------------------------------------------------------------------void __fastcall TForm1::Button2Click(TObject *Sender) { Edit4->Text="Koniec programu"; } //---------------------------------------------------------------------------
Mirosaw J. Kubiak
str. 55
Warto zapamita
1. Identyfikator to cig znakw, z ktrych pierwszy musi by liter. Nie mona definiowa identyfikatorw takich samych jak sowa kluczowe. 2. Sowa kluczowe w jzyku Delphi moemy pisa zarwno duymi, jak i maymi literami, natomiast w C++ Builderze tylko maymi literami. 3. Jeli chcemy uywa zmiennych w programie, to musimy wszystkie je wczeniej zadeklarowa, informujc kompilator o ich nazwie i typie. 4. Oglna posta deklaracji zmiennej jest: Delphi C++ Builder
Mirosaw J. Kubiak
str. 56
Typ zmiennej okrela typ wartoci (na przykad liczba cakowita wykonywa. 5. Dla podniesienia czytelnoci programw, podczas deklarowania zmiennych naley uywa nazw znaczcych. 6. Oglna posta instrukcji przypisania jest nastpujca: Delphi nazwa_zmiennej := wyraenie C++ Builder nazwa_zmiennej = wyraenie lub zmiennoprzecinkowa), jak moe ona przechowywa, a take operacje, jakie program moe na niej
Mirosaw J. Kubiak
str. 57
Wicej praktycznych porad dotyczcych programowania w Delphi i C ++ Builder znajdziesz w penej wersji ebooka. Zapoznaj si z opisem na stronie:
http://podstawy-delphi-builder.zlotemysli.pl
Visual Basic 2005 Express i MySQL ukasz Peta Jak szybko i prosto utworzy rozbudowan aplikacje bazodanow?
Ebook "Visual Basic 2005 Express i MySQL" uczy zarwno skadni jzyka Visual Basic jak rwnie zasad tworzenia aplikacji opartych o baz danych MySQL dla systemu Windows w tym jzyku, a zosta napisany gwnie z myl o pocztkujcych programistach Wicej o tym poradniku przeczytasz na stronie: http://visual-basic.zlotemysli.pl "Nie dosyc, ze e-book, to jeszcze dodatkowo kody i przyklady aplikacji do nauki. Bardzo wartosciowy e-book. Czysto i prosto przekazana wiedza. Polecam." David 27 lat, programista