You are on page 1of 16

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE

Delphi. Leksykon
kieszonkowy
Autor: Waldemar Pokuta
ISBN: 83-7361-510-5
Format: B6, stron: 176

ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

W dobie pracy pod presj czasu coraz popularniejsze staj si wizualne rodowiska
programistyczne, dziki ktrym autorzy aplikacji mog szybciej i efektywniej tworzy
nowe produkty. Wrd takich rodowisk zasuonym uznaniem cieszy si Delphi.
Oparte na Pascalu rodowisko umoliwia szybkie tworzenie rnego rodzaju aplikacji
dla systemu Windows. Zaimplementowana w Delphi wersja Pascala, noszca nazw
Object Pascal, zostaa znacznie rozbudowana w porwnaniu z oryginaem posiada
wiele moliwoci, ktrych nie znajdziemy w wersji standardowej. Z tego wanie
wzgldu krtka i zwiza ciga zawierajca opis tego jzyka moe okaza si
niezwykle przydatna programistom.
Ksika Delphi. Leksykon kieszonkowy jest tak wanie cigawk. Zawiera krtkie
omwienia wszystkich klas, funkcji i procedur oferowanych przez Object Pascala oraz
zwize wprowadzenie do rodowiska Delphi. Nie stanowi podrcznika programowania,
ale raczej pomoc dla tych programistw, ktrzy poznali ju podstawy Delphi i pogbiaj
swoj wiedz.
Struktury danych
Konwersja i formatowanie danych
Operacje na cigach tekstowych
Funkcje matematyczne
Sterowanie przebiegiem programu
Operacje wejcia-wyjcia
Elementy interfejsu uytkownika
Obsuga multimediw

Spis treci
Od Autora................................................................................ 7
Wstp........................................................................................ 7
Rozdzia 1. Jzyk Object Pascal ......................................... 8
Struktura programu..................................................................................8
Struktura moduu .....................................................................................9
Deklaracje.................................................................................................10
Wyraenia ................................................................................................13
Definicje procedur...................................................................................14
Definicje funkcji.......................................................................................15
Instrukcje proste......................................................................................16
Instrukcje zoone ...................................................................................18

Rozdzia 2. Struktury danych ............................................ 25


Typy porzdkowe...................................................................................25
Typy rzeczywiste ....................................................................................30
Typ napisowy..........................................................................................33
Typy zoone ...........................................................................................34
Typy wskanikowe.................................................................................42
Typy proceduralne .................................................................................48
Typy wariantowe ....................................................................................51
Klasy .........................................................................................................54

Rozdzia 3. Konwersja i formatowanie ........................... 63


Rzutowanie typw..................................................................................63
Konwersje typw liczbowych ...............................................................66
Konwersja miar ktowych .....................................................................68
Formatowanie napisw..........................................................................69
Odczytywanie napisw..........................................................................73
Standard Unicode ...................................................................................74

Spis treci

Rozdzia 4. Napisy............................................................... 75
Podstawowe operacje .............................................................................75
Napisy koczone zerem.........................................................................79
Narzdzia MBCS.....................................................................................83

Rozdzia 5. Matematyka .................................................... 85


Arytmetyka..............................................................................................85
Trygonometria.........................................................................................89
Logika.......................................................................................................91
Generatory liczb losowych ....................................................................93
Statystyka.................................................................................................93
Biznes i finanse........................................................................................95

Rozdzia 6. Sterowanie programem .................................. 98


Procedury koczce................................................................................98
Wtki ........................................................................................................99
Procesy ...................................................................................................103
Przekierowywanie programu..............................................................105
Zdarzenia i akcje ...................................................................................106
Obsuga wyjtkw ................................................................................107

Rozdzia 7. Operacje wejcia-wyjcia ........................... 111


Pliki .........................................................................................................111
Strumienie plikowe...............................................................................121

Rozdzia 8. Obsuga systemu........................................... 128


rodowisko ............................................................................................128
Rejestr systemowy ................................................................................130
Informacja o systemie...........................................................................131
Obsuga pakietw .................................................................................131
Schowek systemowy.............................................................................132
Obiekty aplikacji ...................................................................................133
Data i czas ..............................................................................................133
Obsuga myszy......................................................................................136
Inne .........................................................................................................136

Rozdzia 9. Interfejs uytkownika.................................. 137


Okna dialogowe ....................................................................................137
Grafika....................................................................................................139
Obsuga menu .......................................................................................144
Inne komponenty..................................................................................145
4

Delphi. Leksykon kieszonkowy

Rozdzia 10. Multimedia .................................................. 147


Mikser.....................................................................................................147
Format wave..........................................................................................151
Format MIDI..........................................................................................156
Dojstik...................................................................................................160

Dodatek................................................................................ 162
Skrty klawiaturowe ............................................................................162
Sowa kluczowe.....................................................................................164
Klasy wyjtkw.....................................................................................166
Tablica znakw ASCII..........................................................................167

Skorowidz............................................................................ 169

Spis treci

Rozdzia 3. Konwersja
i formatowanie
Przedstawione w rozdziale procedury i funkcje zawarte s
w moduach: db, dbcommon, sysutils, classes i math.

Rzutowanie typw
Czasami potrzebne jest traktowanie wyrae tak, jakby naleay
do innego typu. Mona otrzyma ten efekt przez rzutowanie
typw. Np. Integer('B') pozwala traktowa znak 'B' tak,
jakby by liczb cakowit. Skadnia rzutowania jest nastpujca:
identyfikatorTypu(wyrazenie)

Jeeli wyrazenie jest zmienn, wynik nazywany jest zmienn


rzutowan, w innym wypadku jest on wartoci rzutowan.

Warto rzutowana
W rzutowaniu wartoci zarwno identyfikatorTypu jak
i wyrazenie musz nalee do typu porzdkowego, albo kade
z nich musi nalee do typu wskanikowego. Przykady rzutowania wartoci:
Integer('B')
Char(33)
Boolean(0)
TColor(2)
Longint(@Bufor)

Wynik rzutowania otrzymywany jest poprzez obcicie lub rozszerzenie wartoci wyraenia, przy czym zachowywany jest
znak wyraenia (+ lub ).

Rozdzia 3. Konwersja i formatowanie

63

Instrukcja:
I := Integer('B');

przypisuje warto Integer('B') tzn. 66 do zmiennej I.


Po rzutowaniu wartoci nie mona dopisywa kwalifikatora
(wyraenia po kropce). Rzutowanie wartoci nie moe wystpowa po lewej stronie przypisania.

Zmienna rzutowana
Mona rzutowa dowoln zmienn na dowolny typ pod warunkiem, e ich rozmiary (zmiennej i typu) s rwne i nie mieszamy typw cakowitych z rzeczywistymi (su do tego specjalne
funkcje omwione dalej). Przykady rzutowania zmiennej:
Char(I)
Boolean(Liczba)
TMojZdefiniowanyTyp(MojaZmienna)

Rzutowanie zmiennej moe wystpowa po obydwu stronach


przypisania, np.:
var c: char;
...
ShortInt(c) := 122;

przypisuje znak o kodzie ASCII 122 (z) do zmiennej c.


Mona te przeksztaci zmienn na typ proceduralny. Na
przykad majc nastpujce deklaracje:
type
var
F:
P:
L:

Funkc = function(X: Integer): Integer;


Funkc;
Pointer;
Integer;

mona dokona nastpujcych przypisa

64

Delphi. Leksykon kieszonkowy

F := Funkc(P);

//
//
Funkc(P) := F;
//
//
L := F(L);
//
//
L := Funkc(P)(L); //
//

Przypisuje warto do zmiennej


proceduralnej F
Warto zmiennej proceduralnej
przypisuje do P
Wywouje funkcj uywajc
zmiennej F
Wywouje funkcj uywajc
zmiennej P

Po rzutowaniu zmiennej moe wystpi kwalifikator (np. pole


rekordu):
type
TBajtRek = record
Lo, Hi: Byte;
end;
var
B: Byte;
W: Word;
begin
W := $4321;
B := TBajtRek(W).Lo;
TBajtRek(W).Hi := 0;
end;

Rzutowanie klas
Kontrolowanego rzutowania obiektw mona dokona operatorem as. Wyraenie:
obiekt as klasa

zwraca wskanik na obiekt, ktry jednak jest traktowany jako


obiekt typu podanego przez klasa. W czasie dziaania programu obiekt musi rzeczywicie by typu podanego przez
klasa (lub jego potomkiem) albo mie warto nil. W przeciwnym przypadku wywoywane jest przerwanie. Typowe zastosowanie operatora as pokazuje przykad:

Rozdzia 3. Konwersja i formatowanie

65

procedure TForm1.Button1Click(Sender: TObject);


begin
with Sender as TButton do
Caption := 'Nacinito';
end;

Aby wykorzysta operator as bezporednio w instrukcji, naley


wpisa:
(Sender as TButton).Caption := 'Nacinito';

Konwersje typw liczbowych


Typ Comp mona konwertowa na Double i Currency (lub
z powrotem) za pomoc:
function CompToDouble(acomp: Comp): Double;
procedure DoubleToComp(adouble: Double; var result:
Comp);
function CompToCurrency(acomp: Comp): Currency;
procedure CurrencyToComp(acurrency: Currency; var
result: Comp);

Aby przeksztaci format BCD (kada cyfra zapisana na czterech bitach) na Currency (walutowy) i z powrotem, wykorzystuje si funkcje:
function BCDToCurr(const BCD: TBcd; var Curr:
Currency): Boolean;
function CurrToBCD(Curr: Currency; var BCD: FMTBcd;
Precision: Integer=32; Decimals: Integer=4):
Boolean;

Przykadowe wykorzystanie funkcji BCDToCurr:


procedure TForm1.FormClick(Sender: TObject);
const
bcd: TBcd = (Precision: 8; SignSpecialPlaces:
128+4);
// 8 cyfr, 128-liczba ujemna, 4 miejsca po przecinku
var
c: Currency;

66

Delphi. Leksykon kieszonkowy

begin
bcd.Fraction[0] := 1*16+2;
bcd.Fraction[1] := 3*16+4;
bcd.Fraction[2] := 5*16+6;
bcd.Fraction[3] := 7*16+8;
BCDToCurr(bcd, c);
caption := FloatToStr(c);
end;

//
//
//
//

liczba
liczba
liczba
liczba

12
34
56
78

// wynik = -1234,5678

Aby przeksztaci typ Extended lub Currency na dziesitny,


mona wykorzysta funkcj:
procedure FloatToDecimal(var DecVal: TFloatRec;
const Value; ValueType: TFloatValue; Precision,
Decimals: Integer);

Wynik umieszczany jest w zmiennej DecVal i skada si z tablicy cyfr, znaku liczby i pozycji przecinka. ValueType okrela,
czy przeksztacamy typ Extended, czy Currency. Precision
i Decimals kontroluj zaokrglanie wyniku.

Typy zoone
Istnieje rwnie kilka funkcji konwertujcych proste typy na
zoone (np. rekordowe).
Rekord (w niektrych jzykach nazywany struktur) to zbir
elementw rnego typu. Kady element nazywany jest polem.
Typ TPoint definiuje pozycj na ekranie. Jest to rekord zawierajcy dwa pola wsprzdne X i Y.
Definicja tego typu wyglda nastpujco:
type TPoint = record
X: Longint;
Y: Longint;
end;

Rozdzia 3. Konwersja i formatowanie

67

Aby skonwertowa dwie liczby cakowite na typ TPoint, naley uy funkcji:


function Point(AX, AY: Integer): TPoint;

Funkcja ta suy do szybkiego wypeniania pl rekordu bez koniecznoci przypisywania wartoci kademu polu z osobna.
Mona rwnie dziki niej pomin deklaracj typu TPoint
przy wywoywaniu funkcji, ktre jako parametr przyjmuj
zmienne tego typu:
Canvas.Polygon([Point(20, 20), Point(40, 20),
Point(140, 40), Point(250, 130)]);

Analogicznie rekord TRect zawiera wsprzdne prostokta na


ekranie. Kolejne pola to wsprzdne lewego grnego i prawego dolnego naronika. Aby wypeni ten rekord danymi, mona
uy funkcji:
function Rect(ALeft, ATop, ARight, ABottom:
Integer): TRect;
function Bounds(ALeft, ATop, AWidth, AHeight:
Integer): TRect;

Druga z funkcji zamiast wsprzdnych prawego dolnego rogu


oczekuje szerokoci i wysokoci prostokta.

Konwersja miar ktowych


W Delphi wikszo funkcji wykorzystujcych miary ktowe jako
jednostki przyjmuje radiany. Jeeli chcielibymy np. wywietli
obliczony kt w stopniach lub innych jednostkach, to istnieje
kilka funkcji konwertujcych te wielkoci:
function
function
function
function
function
function

68

RadToCycle(Radians: Extended): Extended;


CycleToRad(Cycles: Extended): Extended;
RadToDeg(Radians: Extended): Extended;
DegToRad(Degrees: Extended): Extended;
RadToGrad(Radians: Extended): Extended;
GradToRad(Grads: Extended): Extended;

Delphi. Leksykon kieszonkowy

Formatowanie napisw
Liczby
Aby przeksztaci warto typu rzeczywistego na napis, moemy uy jednej z funkcji:
function FloatToStr(Value: Extended): string;
function CurrToStr(Value: Currency): string;

Jeeli chcemy mie wikszy wpyw na format utworzonego napisu, mona te wykorzysta:
function FloatToStrF(Value: Extended; Format:
TFloatFormat; Precision, Digits: Integer): string;
function CurrToStrF(Value: Currency; Format:
TFloatFormat; Digits: Integer): string;
function FormatFloat(const Format: string; Value:
Extended): string;
function FormatCurr(const Format: string; Value:
Currency): string;

Aby sformatowa napis do tablicy znakw, mona zastosowa


funkcje:
function FloatToText(Buffer: PChar; const Value;
ValueType: TFloatValue; Format: TFloatFormat;
Precision, Digits: Integer): Integer;
function FloatToTextFmt(Buffer: PChar; const Value;
ValueType: TFloatValue; Format: PChar): Integer;

Sformatowane napisy nie s koczone zerem. Funkcja jako wynik zwraca liczb znakw napisu.
Liczb cakowit moemy przeksztaci na napis reprezentujcy
liczb w systemie dziesitnym lub szesnastkowym:
function IntToStr(Value: Integer): string;
function IntToHex(Value: Integer; Digits: Integer):
string;

Rozdzia 3. Konwersja i formatowanie

69

Argumentem procedury Str moe by liczba typu cakowitego


lub rzeczywistego:
procedure Str(X [: Width [: Decimals ]]; var S);

Dodatkowo mona sformatowa wynik okrelajc


wszystkich cyfr i liczb cyfr po przecinku. Przykad:

liczb

Str(Pi:5:6, napis);

Zoone formatowanie
Kilka poniszych funkcji uywa jako argumentu napisu z wzorcem formatowania. Wzorzec ten moe zawiera w sobie zwyky
tekst i specyfikatory formatowania. Maj one nastpujc form:
%[index:][-][width][.prec]type

Specyfikator rozpoczyna si od znaku %. Na kocu musi by


okrelenie typu. Reszta jest opcjonalna i zalena od typu.
Specyfikator width okrela minimaln szeroko napisu wynikowego. Aby to osign, do napisu mog by dodane spacje.
Domylnie spacje s dodawane z lewej strony. Jeeli jednak
w formacie podano znak minusa (wyrwnanie do lewej strony),
spacje bd dodawane z prawej strony.
Specyfikator prec ma rne znaczenia dla rnych typw formatowania.
Specyfikator index zmienia porzdek odwoa do tablicy
wartoci. Na przykad funkcja:
Format('%d %d %0:d %1:d', [10, 20]);
// formatuje napis: '10 20 10 20'.

Moliwe typy zostay wymienione w tabeli 3.1.

70

Delphi. Leksykon kieszonkowy

Tabela 3.1. Oznaczenia typw w zoonym formatowaniu napisw


Typ Opis

Znaczenie specyfikatora prec

Dziesitny. Argument musi by wartoci


cakowit. Warto jest konwertowana
na napis skadajcy si z cyfr dziesitnych.

Dziesitny bez znaku. Analogiczny


jak dziesitny, ale bez znaku.
Naukowy. Argument musi by wartoci
zmiennoprzecinkow. Warto jest
konwertowana do napisu postaci:
"-d.ddd...E+ddd".

Jeeli podano prec,


to okrela on liczb wszystkich
cyfr w napisie wynikowym
(domylnie 15).

Klasyczny. Argument musi by wartoci


zmiennoprzecinkow. Warto jest
konwertowana do napisu postaci:
"-ddd.ddd...".

Jeeli podano prec,


to okrela on liczb cyfr
po przecinku w napisie
wynikowym (domylnie 2).

Gwny. Argument musi by wartoci


zmiennoprzecinkow. Warto jest
konwertowana do moliwie najkrtszego
napisu w formacie naukowym
lub klasycznym.
Numer. Argument musi by wartoci
zmiennoprzecinkow. Warto jest
konwertowana do napisu postaci:
"-d,ddd,ddd.ddd...". Formatowanie
podobne do klasycznego z wyjtkiem
obecnoci separatorw tysicznych.
Waluta. Argument musi by wartoci
zmiennoprzecinkow. Warto jest
konwertowana do napisu w postaci
walutowej. Konwersja jest przeprowadzana
z uwzgldnieniem zmiennych globalnych:
CurrencyString,
CurrencyFormat,
NegCurrFormat,
ThousandSeparator,
DecimalSeparator
i CurrencyDecimals.

Jeeli podano prec,


to okrela on liczb
znaczcych cyfr w napisie
wynikowym (domylnie 15).

Rozdzia 3. Konwersja i formatowanie

Jeeli podano prec,


to okrela on minimaln liczb
cyfr w napisie (napis bdzie
lewostronnie dopeniany
zerami).
Podobnie jak wyej.

Jeeli podano prec,


to okrela on liczb cyfr
po przecinku w napisie
wynikowym (domylnie 2).

Jeeli podano prec,


to okrela on liczb cyfr
po przecinku w napisie
wynikowym (domylnie 2).

71

Tabela 3.1. Oznaczenia typw w zoonym formatowaniu napisw


cig dalszy
Typ Opis

Znaczenie specyfikatora prec

Wskanik. Argument musi by wartoci


wskanika (adres w pamici). Warto
jest konwertowana na 8-znakowy napis
skadajcy si z cyfr szesnastkowych.

Napis. Argument musi by znakiem, napisem Jeeli podano prec,


lub wartoci typu PChar. Znak lub napis s to okrela on maksymaln
wstawiane w miejsce specyfikatora.
dugo w napisie wynikowym.

Szesnastkowy. Argument musi by


wartoci typu cakowitego. Warto
jest konwertowana na napis skadajcy si
z cyfr szesnastkowych.

Jeeli podano prec,


to okrela on minimaln liczb
cyfr w napisie (napis bdzie
lewostronnie dopeniany zerami).

Aby wykorzysta powysze opcje formatowania, mona uy


jednej z funkcji:
function Format(const Format: string; const Args:
array of const): string;
function FormatBuf(var Buffer; BufLen: Cardinal;
const Format; FmtLen: Cardinal; const Args: array of
const): Cardinal;
procedure FmtStr(var StrResult: string; const
Format: string; const Args: array of const);

Przykadowe wykorzystanie funkcji Format:


Caption := Format('Mino ju %d dni od daty twoich
urodzin', [Round(NowDateTimePicker_urodziny.Date)]);

Do formatowania napisw koczonych zerem (null-terminated)


mona wykorzysta funkcje:
function StrFmt(Buffer, Format: PChar; const Args:
array of const): PChar;
function StrLFmt(Buffer: PChar; MaxLen: Cardinal;
Format: PChar; const Args: array of const): PChar;

72

Delphi. Leksykon kieszonkowy

Odczytywanie napisw
Konwertowanie napisw na liczb nie zawsze koczy si powodzeniem. W przypadku wystpienia bdu generowany jest
wyjtek.
Aby odczyta z napisu liczb cakowit (w postaci dziesitnej
lub szesnastkowej), mona posuy si funkcjami:
function StrToInt(const S: string): Integer;
function StrToInt64(const S: string): Int64;

Aby unikn generowania wyjtku w przypadku bdu, mona


wykorzysta funkcje:
function StrToIntDef(const S: string; Default:
Integer): Integer;
function StrToInt64Def(const S: string; Default:
Int64): Int64;

Jeeli nastpi bd, zwrcona bdzie warto domylna.


W przypadku liczb zmiennoprzecinkowych mona uy funkcji:
function StrToFloat(const S: string): Extended;
function StrToCurr(const S: string): Currency;

Dla napisw koczonych zerem uyjemy funkcji:


function TextToFloat(Buffer: PChar; var Value;
ValueType: TFloatValue): Boolean;

Procedura:
procedure Val(S; var V; var Code: Integer);

moe odczytywa zarwno wartoci cakowite jak i zmiennoprzecinkowe. Jeeli Code przybierze warto rn od zera, to
nastpi bd na pozycji okrelonej przez Code.

Patrz take
Konwersje dotyczce daty i czasu znale mona w rozdziale 8. Obsuga systemu.

Rozdzia 3. Konwersja i formatowanie

73

Standard Unicode
Typ WideString reprezentuje napisy w formacie Unicode
(kady znak zapisany na 16 bitach). Odwoujc si do funkcji
COM API, czsto jestemy zmuszeni zmieni typ z AnsiString (String) na WideString:
function StringToWideChar(const Source: string;
Dest: PWideChar; DestSize: Integer): PWideChar;

Odwrotny efekt mona uzyska wywoujc:


function WideCharToString(Source: PWideChar): string;
procedure WideCharToStrVar(Source: PWideChar; var
Dest: string);
function WideCharLenToString(Source: PWideChar;
SourceLen: Integer): string;
procedure WideCharLenToStrVar(Source: PWideChar;
SourceLen: Integer; var Dest: string);

74

Delphi. Leksykon kieszonkowy

You might also like