background image

P RO JE KT O WANI E   O BI E KT O WE  – 

ûZLF]HQLD ODERUDWRU\MQH

 

TEMAT 3: Borland Delphi – podstawy tworzenia aplikacji cz. 3.

 

 

TEMAT 3: Borland Delphi – podstawy tworzenia aplikacji cz. 3. 

 

1. 

7ZRU]HQLH SDVND ] QDU] G]LDPL 

'R WZRU]HQLD SDVND ] QDU] G]LDPL VáX*\ NRPSRQHQW ToolBar ] ]DNáDGNL Win32. Przyciski dodajemy na pasku, 

NRU]\VWDMF ] PHQX SRGU F]QHJR NRPSRQHQWX ToolBar. 'R WDN XWZRU]RQ\FK SU]\FLVNyZ PR*QD SRGSLü OLVW  REUD]NyZ

]D SRPRF NRPSRQHQWX ImageList. 

 

Zadanie aplikacji: a

SOLNDFMD Z\ZLHWOD RNQR GR ZSLV\ZDQLD WHNVWX L WZRU]\ SDVHN ] QDU] G]LDPL GR NRSLRZDQLD 

wklejania i wycinania tekstu. 

• 

1D IRUP  ZVWDZ NRPSRQHQW\ Memo ] ]DNáDGNL Standard, ToolBar i ImageList ] ]DNáDGNL Win32. 

• 

Wyselekcjonuj ToolBar

L SUDZ\P SU]\FLVNLHP P\V]\ SU]HMG( GR PHQX

SRGU F]QHJR D QDVW SQLH Z\ELHU] F]WHURNURWQLH New Button;  
w ten sposób dodajemy przyciski do paska ToolBar

• 

Wyselekcjonuj ImageList,

SUDZ\P SU]\FLVNLHP P\V]\ SU]HMG( GR PHQX

SRGU F]QHJR D QDVW SQLH Z\ELHU] ImageListEditor L XWZyU] OLVW  REUD]NyZ QD

WZRU]RQH SU]\FLVNL QDU] G]LRZH 

ƒ

ZFLQLM SU]\FLVN Add, 

ƒ

wybierz z foldera: Borland Shared\Images\Buttons 

REUD]NL NWyUH V

symbolami operacji wycinania, wklejania, kopiowania, czyszczenia, 

ƒ

SRWZLHUG( SU]\FLVNLHP Yes SRG]LDá REUD]ND QD GZD PQLHMV]H L Z\NDVXM GUXJL 

] SRZVWDá\FK REUD]NyZ  ELWPDS\ Z NDWDORJX PDM UR]PLDU\ ZL NV]H QL* SU]\MPRZDQH SU]H] OLVW  ImageList), 

ƒ

]DWZLHUG( OLVW  SU]\FLVNLHP OK. 

• 

Ustaw dla komponentu ToolBar

ZáDFLZRü Images, Z\ELHUDMF ] OLVW\ Z\ERUX QD]Z  utworzonej listy obrazków. 

• 

'R ND*GHJR SU]\FLVNX XWZyU] G\PHN REMDQLDMF\ G]LDáDQLH 

• 

6SUDZG( G]LDáDQLH DSOLNDcji. 

 
2. Korzystanie z pola Memo. 

Komponent Memo –

WR SROH WHNVWRZH VáX*FH GR Z\NRQ\ZDQLD RSHUDFML QD WHNFLH 

3RGVWDZRZH PHWRG\ L ZáDFLZRFL NRPSRQHQWX Memo: 

CutToClipboard – metoda wycinania wyselekcjonowanego tekstu do schowka, 
CopyToClipboard – metoda kopiowania wyselekcjonowanego tekstu do schowka, 
PasteFromClipBoard – 

PHWRGD ZNOHMDQLD WHNVWX ]H VFKRZND Z PLHMVFX SRáR*HQLD kursora, 

ClearSelection – metoda odznaczenia tekstu, 
Clear –

PHWRGD F]\V]F]HQLD ]DZDUWRFL SROD Memo, 

Lines –

ZáDFLZRü W\SX RELHNWRZHJR 76WULQJV  OLVWD áDFXFKyZ  GRW\F]\ OLQLL WHNVWX  

7X ]DVWRVRZDQR GZLH PHWRG\ WHM ZáDFLZRFL 

— Lines.LoadFromFile (nazwa

 6WULQJ  áDGRZDQLH ]DZDUWRFL SOLNX R QD]ZLH danej parametrem nazwa 

do pola Memo

— Lines.SaveToFile (nazwa: String) zapisywanie

]DZDUWRFL SROD Memo w pliku  

o nazwie danej parametrem nazwa

 

Zadanie aplikacji:

SRSU]HGQLD DSOLNDFMD X]XSHáQLDQD MHVW SURFHGXUDPL REVáXJL SROD 0HPR UHDOL]XMF\PL NRSLRZDQLH

Z\FLQDQLH L ZNOHMDQLH WHNVWX 3RQDGWR GR DSOLNDFML GRGDZDQ\ MHVW SDVHN QDU] G]LRZ\ ]DZLHUDMF\ WU]\ SU]\FLVNL

V\PEROL]XMFH RSHUDFMH QD SOLNX &]\WDM =DSLV] &]\ü :FLQL FLH SU]\FLVNX Zapisz, powoduje zapisanie w pliku 
tekstowym o nazwie moj.txt

]DZDUWRFL SROD 0HPR :FLQL FLH SU]\FLVNX &]\ü powoduje wyczyszczenie pola Memo. 

Przycisk Czytaj 

ZF]\WD GR SROD 0HPR ]DZDUWRü SOLNX moj.txt

• 

2WZyU] SRSU]HGQL DSOLNDFM  

• 

Dla zdarzenia OnClick przycisków ToolButton wpisz procedury: 

ƒ

dla przycisku Wytnij: 

Memo1.CutToClipboard; 

ƒ

dla przycisku Wklej: 

Memo1.PasteFromClipboard; 

ƒ

dla przycisku Kopiuj: 

Memo1.CopyToClipboard; 

ƒ

dla przycisku 

:\F]\ü zaznaczone: 

Memo1.ClearSelection.

 

• 

8UXFKRP DSOLNDFM  :SLV] GR SROD Memo tekst, wyselekcjonuj klawiszami Shift + 

 

L Z\SUyEXM G]LDáDQLH

SU]\FLVNyZ ] SDVND QDU] G]LRZHJR 

• 

'R SDVND QDU] G]LRZHJR GRGDM VHSDUDtor i kolejne trzy SU]\FLVNL V\PEROL]XMFH RSFMH CzytajZapisz, &]\ü. 

6SRVyE WZRU]HQLD RSLVDQ\ MHVW Z SRSU]HGQLP üZLF]HQLX 

• 

W zmiennych globalnych dodaj: 

const st:string = 'c:\moj.txt';

  

 VWDáD W\SRZDQD  LQDF]HM OLWHUDá   

] QD]Z SOLNX 

• 

Dla zdarzenia OnClick przycisków ToolButton

ZSLV] WUHü SURFHGXU 

dla przycisku Czytaj: 

Memo1.Lines.LoadFromFile(st);

  

 ]DáDGRZDQLH GR SROD 0HPR ]DZDUWRFL SOLNX 

dla przycisku Zapisz

: Memo1.Lines.SaveToFile(st);

  

 VFKRZDQLH GR SOLNX ]DZDUWRFL SROD 0HPR 

dla przycisku 

&]\ü

: Memo1.Clear;

  

 Z\F]\V]F]HQLH ]DZDUWRFL SROD 0HPR 

• 

6SUDZG( G]LDáDQLH DSOLNDFML 
 

background image

 

 6WURQ\ ] ]DNáDGNDPL 
3.1.

6WURQ\ ] ]DNáDGNDPL GOD SDVNyZ QDU] G]LRZ\FK 

Komponentem prezentowanym tutaj jest PageControl

 6áX*\ RQ GR WZRU]HQLD VWURQ ] ]DNáDGNDmi na formie, notesu  

] ]DNáDGNDPL OXE VWURQ ] SDVNDPL QDU] G]LRZ\PL 3U]HGVWDZLRQR WX VSRVyE tworzenia stron przez wykorzystanie menu 

SRGU F]QHJR NRPSRQHQWX 
 
Zadanie aplikacji:

 

DSOLNDFMD MHVW UR]V]HU]HQLHP SRSU]HGQLHM DSOLNDFML 3DVNL QDU] G]LRZH ToolBar XPLHV]F]RQH V QD

VWURQDFK ] ]DNáDGNDPL 1DSLV\ QD ]DNáDGNDFK 2SHUDFMH QD WHNFLH,  ZapisOdczyt. 7UHFL SURFHGXU Z\ZRá\ZDQ\FK

SU]H] SU]\FLVNL V G]LDáDQLD QD SROX Memo, DQDORJLF]QH MDN Z SRSU]HGQLP üZLF]HQLX

 

• 

1D IRUPLH XPLHü NRPSRQHQW Memo oraz komponent PageControl  

] ]DNáDGNL Win32 VáX*F\ GR WZRU]HQLD VWURQ ] ]DNáDGNDPL 

• 

8WZyU] GZLH VWURQ\ QRWDWQLND Z QDVW SXMF\ VSRVyE 

ƒƒ wyselekcjonuj PageControl, 

ƒƒ XDNW\ZQLM PHQX SRGU F]QH  SUDZ\ SU]\FLVN P\V]\  

ƒƒ wybierz New Page

• 

W ObjectInspectorze wybierz kolejno TabSheet1, TabSheet2 i ustaw 

ZáDFLZRFL Caption ]DNáDGHN QD SRND]XMFH VL  QD ]DNáDGNDFK

2SHUDFMH QD WHNFLH Zapis i Odczyt

• 

8PLHü QD VWURQLH SLHUZV]HM NRPSRQHQW ToolBar i utwórz przyciski 

QDU] G]LRZH s\PEROL]XMFH NRSLRZDQLH Z\FLQDQLH L ZNOHMDQLH Wekstu. 

• 

1D GUXJLHM VWURQLH QRWDWQLND XWZyU] GUXJL SDVHN QDU] G]LRZ\ ] SU]\FLVNDPL GR RWZLHUDQLD pliku i zapisu do pliku. 

• 

:SLV] SURFHGXU\ REVáXJL GOD SU]\FLVNyZ ] SDVNyZ QDU] G]LRZ\FK 

• 

:\SUyEXM G]LDáDQLH 

 
3.2. 

1RWDWQLN ] ]DNáDGNDPL W\SX :LQ 3.1. 

Ten typ not

DWQLND E\á SRZV]HFKQLH VWRVRZDQ\ Z SRSrzedniej wersji programu dla Win 3.11. Obecnie stosowany jest typ 

oparty na PageControl,

QDWRPLDVW RSLVDQ\ QL*HM QRWDWQLN PR*QD ]EXGRZDü SRG NWHP LQQHJR W\SX ]DNáDGHN 

Komponenty tu zaprezentowane to NoteBook – do tworzenia stron notesu, i TabSet –

GR WZRU]HQLD ]DNáDGHN 

3RGVWDZRZH ZáDFLZRFL L PHWRG\ NRPSRQHQWX NoteBook: 

ActivePage – 

ZáDFLZRü RNUHOD QD]Z  VWURQ\ DNW\ZQHM 

PageIndex – 

ZáDFLZRü RNUHOD LQGHNV VWURQ\ QRWDWQLND 

Refresh – 

PHWRGD SRZRGXMH RGZLH*DQLH notatnika. 

3RGVWDZRZH ZáDFLZRFL NRPponentu Tabset: 

TabIndex – 

RNUHODMFD LQGHNV ]DNáDGNL 

 

Zadanie aplikacji: 

DSOLNDFMD SUH]HQWXMH WU]\VWURQLFRZ\ QRWDWQLN ] ]DNáDGNDPL 3DVWZDMiastaRzeki. Wybór danej 

]DNáDGNL XZLGRF]QL RGSRZLHGQL VWURQ  QRWDWQLND, gdzie w polu Memo Z\SLVDQH E G QD]Z\ NLONX SDVWZ PLDVW OXE
rzek. 

• 

8PLHü QD IRUPLH NRPSRQHQW Bevel ] ]DNáDGNL Additional (dla zaznaczenia 
wyp

XNáRFL  L XVWDZ MHJR ZáDFLZRü: Style  na bsRaised. 

• 

Na komponencie Bevel

XPLHü ] ]DNáDGNL Win 3.1 komponent\ ZHGáXJ

SRQL*V]HJR V]NLFX 

ƒƒ NoteBook – strona notesu 

ƒƒ TabSet – ]DNáDGND QRWHVX 

• 

Wyselekcjonuj TabSet,

NOLNQLM QD ZáDFLZRü 7DEV L ZSLV] QDSLV\

SRND]XMFH VL  QD ]DNáDGNDFK 3DVWZD 0LDVWD 5]HNL 

• 

Wyselekcjonuj NoteBook,

Z\ELHU] ZáDFLZRü Pages i nazwij trzy strony 

notatnika: pierwsza, druga, trzecia,

Z\ELHUDMF ]D ND*G\P UD]HP przycisk Add (XVX SR]\FM  Default). 

• 

Ustaw dla komponentu NoteBook

ZáDFLZRü ActivePage na pierwsza. 

• 

8PLHü QD VWURQLH SLHUZV]HM NRPSRQHQW Memo, NOLNQLM RERN ZáDFLZRFL Lines i wpisz tam w kolejnych liniach 

QD]Z\ NLONX SDVWZ :áDFLZRü Enabled dla pola Memo ustaw na False. 

• 

3RZWyU] GZD SRSU]HGQLH SXQNW\ GOD NROHMQ\FK VWURQ QRWDWQLND ZSLVXMF odpowiednio nazwy miast i rzek. Ustaw 
ponownie dla komponentu NoteBook

ZáDFLZRü ActivePage na pierwsza. 

• 

Wpisz dla zdarzenia OnClick komponentu TabSet

QDVW SXMF SURFHGXU   V\QFKURQL]DFMD VWURQLF QRWDWQLND  

] ]DNáDGNDPL  

procedure TForm1.TabSet1Click(Sender: TObject); 
begin 

Notebook1.PageIndex := Tabset1.TabIndex; 
Notebook1.Refresh; 

end; 

• 

Sp

UDZG( G]LDáDQLH QRWDWQLND 

 

4. Komponent StringGrid –

Z\SHáQLDQLH WDEHOL 

background image

Komponent StringGrid

VáX*\ GR Z\ZLHWODQLD áDFXFKyZ Z WDEHOL GZXZ\PLDURZHM SU]\SRPLQDMFHM DUNXV]

NDONXODF\MQ\ 3RGVWDZRZH ZáDFLZRFL 

Cells[AColARow

 ,QWHJHU@ W\S 6WULQJ ZáDFLZRü RGGDMFD Z SRVWDFL áDFXFKD ]DZDUWRü NRPyUNL ZVND]DQHM

parametrami, 

Cols[Index

 ,QWHJHU@ W\S 76WULQJV ZáDFLZRü RGGDMFD Z SRVWDFL WDEOLF\ áDFXFKyZ NROXPQ  o numerze Index

Rows[Index

 ,QWHJHU@ W\S 76WULQJV ZáDFLZRü RGGDMFD Z SRVWDFL WDEOLF\ áDFXFKyZ ZLHUV] o numerze Index

ColCount 

W\S /RQJLQW ZáDFLZRü RGGDMFD OLF]E  NROXPQ 

RowCount 

W\S /RQJLQW ZáDFLZRü RGGDMFD OLF]E  ZLHUV]\ 

 

Zadanie aplikacji: dziennik elektroniczny –

DSOLNDFMD WZRU]\ QRWDWQLN QDSLV\ QD MHJR ]DNáDGNDFK V QD]ZDmi 

SU]HGPLRWyZ 1D ND*GHM VWURQLH QRWDWQLND XPLHV]F]RQD MHVW WDEHOND ] OLVW RVyE Z JUXSLH ,VWQLHMH PR*OLZRü ZSLV\ZDQLD

RFHQ DOH RFHQ\ ZSLV\ZDQH GR WDEHOL QLH V ]DSDPL W\ZDQH 6SRVyE ]DSLVX GR SOLNX omawiany jest Z F] FL GRW\F]FHM
plików. 

• 

Wykorzystuj

F NRPSRQHQW PageControl zbuduj notatnik o liczbie stron 

UyZQHM OLF]ELH SU]HGPLRWyZ NWyUH FKFHV] ZSLVDü GR G]LHQQLND 1DSLV\ QD

]DNáDGNDFK SRZLQQ\ E\ü QD]ZDPL SU]HGPLRWyZ 

• 

Na pierwszej stronie notatnika wstaw komponent StringGrid

] ]DNáDGNL 

Additional. Ob

HMU]\M MHJR ZáDFLZRFL L ]GDU]HQLD =QDMG(  

w Helpie typ TStringGrid

L ]DSR]QDM VL  ] RSLVHP ZáDFLZRFL Cells, 

RowCount, ColCount. 

ƒƒ Ustaw w ObjectInspectorze ZáDFLZRFL NRPSRQHQWX StringGrid: 

Align  

alClient

 WDEHOD E G]LH Z\SHáQLDü FDá VWURQ

notatnika 

ColCount  

6 // liczba kolumn 

FixedCols 

 2

 OLF]ED ]DPUR*RQ\FK NROXPQ  VWDOH ZLGRF]QH EH] PR*OLZRFL edycji) 

RowCount   10 // liczba wierszy w tabeli = liczba uczniów w grupie 

ƒƒ 5R]ZL OLVW  ZáDFLZRFL Options  SU]H] SRGZyMQH NOLNQL FLH  L XVWDZ 

goEditing  

7UXH  XPR*OLZL WR ZSLV\ZDQLH ZDUWRFL GR WDEHOL 

goColSizing  

7UXH  ]PLDQD UR]PLDUyZ V]HURNRFL NROXPQ\ 

goColMoving  

7UXH  PR*OLZRü SU]HQRV]HQLD NROXPQ 

goRowMoving 

7UXH  PR*OLZRü SU]HQRV]HQLD ZLHUV]\ 

goTabs  

7UXH  SU]HPLHV]F]DQLH VL  SR NRmórkach klawiszem Tab 

• 

7DN SU]\JRWRZDQ WDEHO  SU]HNRSLXM QD LQQH VWURQ\ QRWDWQLND Z\NRU]\VWXMF ] PHQX Edit\Copy, Edit\Paste  
(w ObjectInspectorze

Z\ELHU] RGSRZLHGQL VWURQ  L ]D]QDF] M P\V]N . 

• 

3U]HMG( GR HG\FML PRGXáX L SR F] FL Implementation wpisz pURFHGXU   Z\SHáQLD RQD ZDUWRFL SRF]WNRZH
pojedynczej tabeli): 

procedure pisztab(var s:TStringGrid); 
var i: integer; 
begin 

with s do 
begin 

 

 

 WZRU]HQLH QDJáyZND WDEHOL ZáDFLZRü &HOOV SRELHUD OXE RGGDMH ZDUWRü HOHPHQWX WDEHOL 

Cells[0,0] := 'NR'; 

 

 

Cells[1,0

@   1D]ZLVNR L LPL 

 

Cells[2,0 ] := 'Data'; 
Cells[3,0 ] := 'Ocena za okres'; 

// ustawienie numerów w tabeli 

for i := 1 to 20 do 

Cells[0,i ] := IntToStr(i); 

// wpisanie nazwisk osób w grupie 

Cells[1,1] := 'Nowak Anna'; 
Cells[1,2] := 'Kowalska Alicja'; 

&HOOV>@  1RZLVND (ZD 

 

Cells[1,4] := 'Maj Anna'; 

end; 

end; 

• 

:\VHOHNFMRQXM IRUP  L GOD ]GDU]HQLD OnActivate ZSLV] SURFHGXU  Z\SHáQLDMF WDEHONL notesu: 

procedure TForm1.FormActivate(Sender: TObject); 
begin 

pisztab(StringGrid1); 
pisztab(StringGrid2); 
pisztab(StringGrid3); 
pisztab(StringGrid4); 
pisztab(StringGrid5); 
pisztab(StringGrid6); 

end; 

• 

8UXFKRP DSOLNDFM  L VSUDZG( MHM G]LDáDQLH 

ƒƒ VSUDZG( PR*OLZRü ZSURZDG]DQLD GDQ\FK 

ƒƒ SRZL NV] V]HURNRü NROXPQ\ SU]H]QDF]RQHM QD GDW  UR]VXZDMF QDJáyZHN NROXPQ\ P\V] 

background image

ƒƒ VSUDZG( G]LDáDQLH NODZLV]D Tab i NODZLV]\ VWU]DáHN SR ]DWZLHUG]HQLX HG\FML NODZiszem Enter, 

ƒƒ VSUDZG( *H Z\NRU]\VWXMF NODZLV] F2 PR*QD SRSUDZLü ZSLVDQ\ WHNVW 

ƒƒ VSUDZG( PR*OLZRü SU]HQRV]HQLD P\V] ZLHUV]\ L NROXPQ WDEHOL  FKZ\WDMF QDJáyZHN NROXPQy lub NRPyUN   

z numerem wiersza). 

background image

Zadania 
 

Zadanie 10 

=EXGXM DSOLNDFM  SU]HGVWDZLDMF QRWDWQLN NWyUHJR ]DGDQLHP E G]LH 

D  SUH]HQWDFMD Uy*Q\FK VW\OyZ OLQLL EU]HJRZHM 

E  SUH]HQWDFMD Uy*Q\FK VW\OyZ Z\SHáQLDF]D 
 
Wskazówka
 
Zbuduj notatnik dowolnego typu.

1D ]DNáDGNDFK QRWDWQLND XPLHü QD]Z\ D QD NDUWDFK NV]WDáW SURVWRNWD Z\NRU]\VWXMF

komponent Shape. 
 
Zadanie 11 
Zastosuj komponent StringGrid

GR Z\ZLHWOHQLD WDEOLF]NL PQR*HQLD ] ]DNUHVX RG O GR 10. 

 
Zadanie 12
 

=EXGXM SRGU F]Q\ NDONXODWRU. W tabelce powLQQ\ E\ü F\IU\ L ]QDNL G]LDáD – Z\ELHUDP\ F\IU\ L G]LDáDQLH SU]H] NOLNQL FLH

P\V] D Z RNLHQNX HG\F\MQ\P SRND]XMH VL  Z\QLN G]LDáDQLD 
 
Wskazówka
 

:\SHáQLM F\IUDPL WDEHON  NRPSRQHQWX StringGrid. Wykorzystaj zdarzenie OnSelectCell dla odbioru wyselekcjonowanej 
komórki.