-
Mnoho r∙zn²ch aplikacφ C++ Builderu pot°ebuje pracovat se seznamem znakov²ch
°et∞zc∙. Tyto seznamy jsou prvky v okn∞ seznamu nebo kombinovanΘho okna,
°ßdky textu v komponent∞ Memo, seznam podporovan²ch pφsem, apod. P°esto╛e
aplikace pou╛φvajφ tyto seznamy r∙zn²m zp∙sobem, C++ Builder poskytuje
spoleΦnΘ rozhranφ prost°ednictvφm objektu nazvanΘho seznam °et∞zc∙. Seznam
°et∞zc∙ pou╛φvßme i prost°ednictvφm Inspektora objekt∙. Vlastnost seznamu
°et∞zc∙ se zde zobrazuje hodnotou TStrings ve sloupci hodnot. Kdy╛
zde dvojit∞ klikneme je zobrazen Editor seznamu °et∞zc∙, ve kterΘm m∙╛eme
editovat, p°idßvat nebo ru╣it °ßdky.
K zji╣t∞nφ poΦtu °et∞zc∙ v seznamu pou╛φvßme vlastnost Count.
Je to vlastnost urΦenß pouze pro Φtenφ. Jeliko╛ indexy pou╛φvanΘ v seznamu
°et∞zc∙ zaΦφnajφ od nuly, je hodnota Count o jedniΦku v∞t╣φ ne╛
index poslednφho °et∞zce v seznamu. Nap°. aplikace m∙╛e zjistit, kolik
r∙zn²ch pφsem je aktußln∞ podporovßno obrazovkou, p°eΦtenφm vlastnosti
Count
objektu seznamu pφsem (seznam jmen v╣ech podporovan²ch pφsem), tj. Screen->Fonts->Count.
Seznam °et∞zc∙ mß indexovanou vlastnost nazvanou Strings, kterou
si m∙╛eme p°edstavit jako seznam °et∞zc∙. Nap°. prvnφ °et∞zec v seznamu
je Strings[0]. ╪et∞zce do seznamu lze p°idßvat dv∞ma zp∙soby. Jednß
se o p°idßnφ na konec seznamu a vlo╛enφ do seznamu na urΦen² index. K p°idßnφ
°et∞zce na konec seznamu volßme metodu seznamu Add p°idßvajφcφ parametr
jako nov² °et∞zec. K vlo╛enφ °et∞zce do seznamu volßme metodu
Insert.
Mß dva parametry: index na kter² chceme °et∞zec vlo╛it a vklßdan² °et∞zec.
Vytvo°te aplikaci obsahujφcφ komponentu Memo a tlaΦφtko. P°i
stisku tlaΦφtka zapi╣te do komponenty Memo jmΘna v╣ech obrazovkou
podporovan²ch pφsem.
-
Se seznamem °et∞zc∙ m∙╛eme provßd∞t je╣t∞ °adu dal╣φch operacφ. ╚asto pot°ebujeme
zjistit pozici (index) °et∞zce v seznamu (nebo zjistit existenci °et∞zce).
K lokalizaci °et∞zce v seznamu pou╛φvßme metodu seznamu IndexOf.
Metoda p°ebφrß °et∞zec jako sv∙j parametr a vracφ index nalezenΘho °et∞zce
nebo -1 nenφ-li °et∞zec nalezen. Tato metoda pracuje pouze s kompletnφmi
°et∞zci (parametr se musφ cel² p°esn∞ shodovat s cel²m °et∞zcem v seznamu).
Nap°. nßsledujφcφ p°φkaz zji╣╗uje zda soubor WIN.INI je v seznamu
soubor∙ v komponent∞ FileListBox:
if (FileListBox1->Items->IndexOf("WIN.INI")
> -1) ...
╪et∞zec v seznamu m∙╛eme p°esunout na jinou pozici. K p°esunu °et∞zce
v seznamu volßme metodu seznamu Move, kterß mß dva parametry: souΦasn²
index prvku a index, na kter² prvek chceme p°esunout. Pro zru╣enφ °et∞zce
v seznamu volßme metodu seznamu Delete a p°edßme ji index ru╣enΘho
°et∞zce. Jestli╛e index ru╣enΘho °et∞zce neznßme, pou╛ijeme metodu IndexOf
k jeho zji╣t∞nφ. Nap°. p°φkazy, kterΘ p°idßme do na╣φ p°edchozφ aplikace
m∙╛eme ze seznamu pφsem odstranit pφsmo Curier New:
if (Memo1->Lines->IndexOf("Courier New")
> -1)
Memo1->Lines->Delete(Memo1->Lines->IndexOf("Courier
New"));
Kopφrovßnφ kompletnφho seznamu °et∞zc∙ z jednoho seznamu do jinΘho,
provedeme p°i°azenφm zdrojovΘho seznamu cφlovΘmu seznamu. Nap°.
Memo1->Lines = ListBox1->Items;
Tφm p°epφ╣eme °et∞zce cφlovΘho seznamu. Jestli╛e chceme p°idat seznam
°et∞zc∙ na konec jinΘho seznamu, volßme metodu
AddStrings seznamu,
ke kterΘmu p°idßvßme a jako parametr p°edßme seznam °et∞zc∙, kter² chceme
p°idat. Nap°.
Memo1->AddStrings(ListBox1->Items);
Kdy╛ kopφrujeme °et∞zce mezi lokßlnφmi prom∞nn²mi, pou╛φvßme k zabrßn∞nφ
neoΦekßvan²m v²sledk∙m metodu Assign t°φdy TString. Jestli╛e
jednodu╣e p°i°adφme jeden °et∞zec jinΘmu pomocφ lokßlnφ prom∞nnΘ, pak prom∞nnß
nenφ kopie °et∞zce a p∙vodnφ objekt °et∞zce je ztracen. Nßsledujφcφ p°φklad
ukazuje chybn² a sprßvn² zp∙sob kopφrovßnφ °et∞zc∙ pomocφ lokßlnφch prom∞nn²ch:
TFont *f = new TFont();
f = Form1->Font;
// chybnΘ
f->Assign(Form1->Font);
// sprßvnΘ
Dopl≥te p°edchozφ aplikaci o komponentu ListBox, do kterΘ p°i
stisku dal╣φho tlaΦφtka p°ekopφrujete v╣echny °et∞zce z komponenty Memo,
kterΘ obsahujφ ve svΘm textu CE.
-
Pomocφ cyklu lze prochßzet jednotliv²mi °et∞zci seznamu. Do p°edchozφ aplikace
p°idejte dal╣φ tlaΦφtko, jeho╛ stiskem provedeme p°evod °et∞zc∙ v komponent∞
Memo
na velkß pφsmena. Pro p°evod °et∞zce na velkß pφsmena lze pou╛φt metodu
UpperCase
t°φdy AnsiString.
-
ProcviΦovßnφ pou╛φvßnφ seznam∙ °et∞zc∙ budeme provßd∞t v aplikaci, kterß
bude vytvß°et anglickΘ v∞ty. Nejprve si ukß╛eme aplikaci bez pou╛itφ seznam∙.
ZaΦneme novou aplikaci. K hornφmu okraji formulß°e umφstφme komponentu
Label,
ve kterΘ budeme vypisovat vytvß°enΘ v∞ty. Na zb²vajφcφ plochu formulß°e
umφstφme vedle sebe t°i komponenty GroupBox a zm∞nφme jejich Caption
na ?Prvnφ objekt, ?,Umφst∞nφ a ?Druh² objekt. Na
lev?. GroupBox (s titulkem Prvnφ objekt) vlo╛φme nad sebe
4 voliΦe s texty: ?The book, ?,The pen, ?,The pencil a ?The chair.
Prost°edn?. GroupBox bude obsahovat 3 voliΦe
s texty: ?on, ?,under a ?near. Prav?. GroupBox
bude obsahovat voliΦe s texty: ?the table, ?,the big box, ?,the carpet
a ?the computer. V╣echny t°i hornφ voliΦ?. V╣echny t°i hornφ Label zv∞t╣φme pφsmo a jeho Caption zm∞nφme
na ?The book is on the table.. Tento text budeme ovlßdat voliΦi. V╣echny
voliΦe budou mφt stejnou obsluhu udß?. OnClick. Obsluha
bude tvo°ena p°φkazy:
AnsiString Veta;
int I;
for (I = 0; I < GroupBox1->ControlCount;
I++)
if (((TRadioButton*)GroupBox1->Controls[I])->Checked)
Veta=Veta+((TRadioButton*)GroupBox1->Controls[I])->Caption;
Veta = Veta + " is ";
for (I = 0; I < GroupBox2->ControlCount;
I++)
if (((TRadioButton*)GroupBox2->Controls[I])->Checked)
Veta=Veta+((TRadioButton*)GroupBox2->Controls[I])->Caption;
Veta = Veta + " ";
for (I = 0; I < GroupBox3->ControlCount;
I++)
if (((TRadioButton*)GroupBox3->Controls[I])->Checked)
Veta=Veta+((TRadioButton*)GroupBox3->Controls[I])->Caption;
Label1->Caption = Veta + ".";
Aplikace je hotova, m∙╛eme ji vyzkou╣et.
-
Zm∞≥te p°edchozφ aplikaci tak, ╛e krajnφ komponenty GroupBox nahradφte
komponentami ListBox. Umo╛nφ nßm to pou╛itφ vφce slov. Do obou komponent
vlo╛φme tato slova: big box, book, carpet, chair,
computer,
desk,
floor,
pen,
pencil,
small
box,
sofa a table (m∙╛eme je vlo╛it pouze do jednΘ komponenty
a v obsluze
OnCreate formulß°e p°ekopφrovat tento seznam do druhΘho
seznamu). Aby se zlep╣ila pou╛itelnost nastavφme u obou komponent ListBox
vlastnost Sorted na true. Slova jsou uvedena bez Φlen∙. Dopl≥ujte
je p°i vytvß°enφ v∞ty. Vybran² prvek v seznamu je urΦen hodnotou vlastnosti
ItemIndex.
Prove∩te tuto zm∞nu aplikace sami.
-
V aplikaci provedeme dal╣φ zm∞nu. VybranΘ slovo v prvnφm seznamu odstranφme
z druhΘho seznamu a slovo vybranΘ v druhΘm seznamu odstranφme z prvnφho
seznamu. Po zm∞n∞ v²b∞ru v n∞kterΘm seznamu op∞t odstran∞nΘ slovo do seznamu
vrßtφme. Je nutno si tedy odstran∞nß slova zapamatovat. Do soukromΘ Φßsti
deklarace formulß°e vlo╛φme polo╛ky (pro zapamatovßnφ odstran∞n²ch slov):
AnsiString String1, String2;
Dal╣φ problΘm, kter² musφme vy°e╣it je ten, ╛e na zaΦßtku nenφ v ╛ßdnΘ
komponent∞ ListBox vybrßna polo╛ka. V obsluze OnCreate formulß°e
tedy vlo╛φme do polo╛ky String1, resp. String2 °et∞zec book,
resp. table (odpovφdß to p∙vodn∞ zobrazenΘ v∞t∞), tato slova zru╣φme
v p°φslu╣n²ch seznamech (String1 v ListBox2 a String2
v Listbox1) a v seznamech je vybereme. V aplikaci dßle umo╛nφme
p°idßvßnφ dal╣φch slov. Na formulß° umφstφme editaΦnφ ovladaΦ a tlaΦφtko
s textem P°idej. Po stisku tlaΦφtka zjistφme, zda editaΦnφ ovladaΦ
nenφ prßzdn² nebo zda neobsahuje slovo, kterΘ je ji╛ obsa╛eno v n∞kterΘm
seznamu a pokud tyto podmφnky jsou spln∞ny, pak obsah editaΦnφho ovladaΦe
vlo╛φme do obou seznam∙ (po vlo╛enφ musφme op∞t vybrat pou╛itß slova ve
v∞t∞; tzn. nalΘzt v ka╛dΘm seznamu pou╛itΘ slovo a vybrat je). P°i nevhodnΘm
obsahu editaΦnφho ovladaΦe zobrazte okno zprßv s oznßmenφm chyby. Vytvo°te
tuto aplikaci sami.
-
Seznam °et∞zc∙ lze snadno ulo╛it do textovΘho souboru (SaveToFile)
a op∞t jej zavΘst nebo jej zavΘst do jinΘho seznamu (LoadFromFile).
Jako parametr u t∞chto metod se pou╛φvß jmΘno souboru. Nap°. nßsledujφcφ
k≤d zavßdφ soubor C:\WinNT\Win.Ini do komponenty Memo a vytvß°φ
zßlo╛nφ kopii souboru Win.BAK:
AnsiString FileName = "C:\\WinNT\\Win.Ini";
Memo1->Lines->LoadFromFile(FileName);
Memo1->Lines->SaveToFile(ChangeFileExt(FileName,
".BAK"));
Upravte p°edchozφ aplikaci tak, aby slova pou╛itß v seznamu byla p°i
spu╣t∞nφ aplikace naΦtena z textovΘho souboru slova.txt, vytvo°ena
kopie tohoto souboru (slova.old) a p°i uzav°enφ aplikace (nap°.
v obsluze udßlosti OnDestroy formulß°e) op∞t zapsßna do slova.txt
(do seznamu jsme mohli n∞jakΘ slovo p°idat). Vytvo°te takΘ pot°ebn² textov²
soubor. Aplikaci vyzkou╣ejte.
-
Na╣i aplikaci nynφ zm∞nφme takto: V prvnφm seznamu umo╛nφme vφcenßsobn²
v²b∞r (nebudeme takΘ ji╛ odstra≥ovat pou╛itß slova ze seznam∙). Vφcenßsobn²
v²b∞r umo╛nφme nastavenφm vlastnosti MultiSelect na true.
VybranΘ prvky nynφ zjistφme testovßnφm pole Selected. Nap°. zji╣t∞nφ
poΦtu vybran²ch polo╛ek provedeme p°φkazy:
int PocetVybr = 0;
for (int I = 0; I < ListBox1->Items->Count;
I++)
if (ListBox1->Selected[I]) PocetVybr++;
Tuto zm∞nu prove∩te sami. Sna╛te se, aby vytvß°enΘ v∞ty vypadaly takto:
The
book is ..., The book, and the computer are .... The book,
the computer, and the pen are .... Uv∞domte si, ╛e v seznamu nemusφ
b²t vybrßn ╛ßdn² prvek (v tomto p°φpad∞ vytvo°te v∞tu zaΦφnajφcφ
Nothing
is ...).
-
V dal╣φ aplikaci se podrobn∞ji seznßmφme s komponentou ComboBox
(tato komponenta zabφrß mΘn∞ mφsta ne╛ ListBox). Vlastnostφ Style
m∙╛eme m∞nit chovßnφ kombinovanΘho ovladaΦe. Jsou zde tyto mo╛nosti: csDropDown
(umo╛≥uje p°φmou editaci a na po╛ßdßnφ zobrazuje seznam), csDropDownList
(neumo╛≥uje editaci, pouze v²b∞r ze seznamu), csSimple (umo╛≥uje
p°φmou editaci a seznam zobrazen nenφ), csOwnerDrawFixed a csOwnerDrawVariable
(seznamy s u╛ivatelsky definovan²mi zobrazenφmi).
V nßsledujφcφ aplikaci si ukß╛eme pou╛itφ prvnφch t°φ z t∞chto styl∙.
ZaΦneme s v²vojem novΘ aplikace. Na formulß° umφstφme t°i komponenty ComboBox
a tlaΦφtko s textem P°idej. Do seznamu °et∞zc∙ ka╛dΘ komponenty
ComboBox
vlo╛φme asi 20 jmen a nastavφme jejich vlastnosti Sorted na true.
U prvnφho kombinovanΘho ovladaΦe nastavφme vlastnost Style na csDropDown.
Vytvo°φme je╣t∞ obsluhu udßlosti OnClick tlaΦφtka
P°idej:
if ((ComboBox1->Text!="")&&(ComboBox1->Items->IndexOf(ComboBox1->Text)<0))
ComboBox1->Items->Add(ComboBox1->Text);
Jestli╛e u╛ivatel stiskne tlaΦφtko, pak text zadan² do kombinovanΘho
ovladaΦe (je-li n∞jak²) je p°idßn do seznamu, samoz°ejm∞ za p°edpokladu,
╛e tam ji╛ nenφ.
U druhΘho kombinovanΘho ovladaΦe nastavφme vlastnost Style na
csDropDownList.
Nep°i°adφme mu ╛ßdnou obsluhu udßlosti. Pou╛ijeme jej pro experimentovßnφ
s automatick²mi vyhledßvacφmi technikami. Stiskneme-li klßvesu s n∞jak²m
pφsmenem, bude vybrßn prvnφ °et∞zec v seznamu, zaΦφnajφcφ tφmto pφsmenem.
Stiskem klßves se ╣ipkou nahoru nebo dol∙ se m∙╛eme v seznamu pohybovat
bez nutnosti jej otev°φt. Tyto postupy lze pou╛φt i u ostatnφch kombinovan²ch
ovladaΦ∙.
T°etφ kombinovan² ovladaΦ (vlastnost Style nastavφme na csSimple)
p°idß do seznamu nov² prvek p°i stisku klßvesy Enter. Vytvo°φme pro n∞j
tuto obsluhu udßlosti OnKeyPress (stisknutφ klßvesy):
if (Key == VK_RETURN)
if((ComboBox3->Text!="")&&(ComboBox3->Items->IndexOf(ComboBox3->Text)<0))
ComboBox3->Items->Add(ComboBox3->Text);
Tφm je v²voj tΘto aplikace dokonΦen. Vyzkou╣φme chovßnφ jednotliv²ch
kombinovan²ch ovladaΦ∙.
-
╚asto seznam °et∞zc∙ pou╛φvßme jako souΦßst n∞jakΘ komponenty a nemusφme
tedy vytvß°et seznam sami. M∙╛eme ale takΘ vytvo°it seznam °et∞zc∙, kter²
nenφ p°i°azen ╛ßdnΘ komponent∞. Pokud vytvo°φme sv∙j vlastnφ seznam, nesmφme
zapomenout po ukonΦenφ prßce s nφm, jej op∞t uvolnit. Existujφ dva r∙znΘ
zp∙soby pou╛φvßnφ seznamu: seznam, kter² aplikace v jednΘ metod∞ vytvo°φ,
pou╛ije a zru╣φ a seznam, kter² aplikace vytvß°φ, pou╛φvß p°i b∞hu a zru╣φ
jej p°ed sv²m ukonΦenφm.
Pokud seznam °et∞zc∙ pot°ebujeme pouze v jednΘ metod∞, pak jej m∙╛eme
vytvo°it, pou╛φt a zru╣it na jednom mφst∞. Je to bezpeΦn² zp∙sob pou╛φvßnφ
objektu seznamu °et∞zc∙. Proto╛e objekt seznamu °et∞zc∙ alokuje pam∞╗ pro
samotn² seznam a jeho °et∞zce, je d∙le╛itΘ chrßn∞nφ alokace pomocφ bloku
try..catch
k zaji╣t∞nφ, ╛e objekt uvolnφ svoji pam∞╗ i kdy╛ vznikne v²jimka. Implementace
krßtkodobΘho seznamu tedy vypadß takto: Vytvo°φme objekt seznamu °et∞zc∙,
v Φßsti try bloku try..catch jej pou╛φvßme a v Φßsti catch
a po celΘm bloku jej uvolnφme. Nßsledujφcφ obsluha udßlosti reaguje na
stisknutφ tlaΦφtka vytvo°enφm seznamu °et∞zc∙, jeho pou╛itφm a zru╣enφm:
void __fastcall TForm1::Button1Click(TObject
*Sender)
{
TStrings *TempList = new TStringList();
// vytvo°enφ objektu seznamu
try
{
// pou╛itφ seznamu °et∞zc∙
}
catch (...)
{
delete TempList; // zru╣enφ
objektu seznamu
throw;
// obnovenφ v²jimky
}
delete TempList; // zru╣enφ objektu
seznamu, kdy╛ v²jimka nenastala
}
-
Jestli╛e seznam °et∞zc∙ pot°ebujeme kdykoliv p°i b∞hu aplikace, je nutno
jej vytvo°it ihned po spu╣t∞nφ aplikace a uvolnit jej p°ed ukonΦenφm aplikace.
To vy°e╣φme takto: Do t°φdy hlavnφho formulß°e aplikace p°idßme polo╛ku
typu TStringList, v konstruktoru hlavnφho formulß°e vytvo°φme objekt
seznamu °et∞zc∙, k deklaraci t°φdy hlavnφho formulß°e p°idßme destruktor
a v tomto destruktoru seznam °et∞zc∙ uvolnφme (p°ed zastavenφm aplikace).
V nßsledujφcφ aplikaci se pokusφme vytvo°it seznam se sou°adnicemi
kliknutφ my╣i a na zßv∞r aplikace tento seznam zapφ╣eme do souboru. ZaΦneme
v²vojem novΘ aplikace. Formulß° z∙stane prßzdn². Jako ve°ejnou polo╛ku
formulß°e p°idßme:
TStringList *SeznamKliknuti;
Konstruktor formulß°e bude tvo°ena p°φkazem:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
SeznamKliknuti = new TStringList();
}
Obsluha OnMouseDown bude p°idßvat informace o kliknutφ do seznamu:
SeznamKliknuti->Add("Kliknutφ na " + IntToStr(X)
+ ", " + IntToStr(Y));
Zb²vß je╣t∞ vytvo°it destruktor formulß°e. Deklaraci destruktoru musφme
p°idat do ve°ejnΘ Φßsti deklarace t°φdy formulß°e a tento destruktor bude
tvo°en p°φkazy:
__fastcall TForm1::~TForm1()
{
SeznamKliknuti->SaveToFile(ChangeFileExt(Application->ExeName,".LOG"));
delete SeznamKliknuti;
}
Zde zapφ╣eme seznam do souboru. JmΘno tohoto souboru bude vytvo°eno
ze jmΘna aplikace, ve kterΘm p°φponu zm∞nφme na LOG (pokud nep°ejmenujeme
aplikaci, pak to bude soubor PROJECT1.LOG). V destruktoru takΘ seznam uvolnφme.
Tφm je aplikace hotova. Vyzkou╣ejte ji a pokuste se zjistit jak pracuje.
-
Mimo seznamu °et∞zc∙ ulo╛en²ch ve vlastnosti Strings m∙╛e seznam
obsahovat takΘ seznam objekt∙ (p°esn∞ji °eΦeno seznam ukazatel∙ na objekty),
kterΘ jsou ulo╛eny ve vlastnosti Objects. Vlastnost Objects
je takΘ indexovanß, je to indexovan² seznam objekt∙. Jestli╛e pou╛φvßme
°et∞zce v seznamu, nemusφme mφt takΘ objekty; seznam ned∞lß nic s objekty,
pokud k nim specificky nep°istupujeme. C++ Builder pouze dr╛φ informaci
o objektu a my s nφ pracujeme. N∞kterΘ seznamy °et∞zc∙ p°idanΘ objekty
ignorujφ (proto╛e pro n∞ nemajφ v²znam). Nap°. seznam °et∞zc∙ v komponent∞
Memo neuklßdß p°idanΘ objekty. P°esto╛e vlastnosti Objects m∙╛eme
p°i°adit libovoln² typ objektu, Φasto pou╛φvßme bitovΘ mapy. D∙le╛itΘ je
zapamatovat si, ╛e °et∞zec a objekt tvo°φ pßr. Pro ka╛d² °et∞zec je p°i°azen
objekt; implicitn∞ objekt je NULL. Seznam °et∞zc∙ nevlastnφ p°i°azenΘ objekty,
tzn. uvoln∞nφ objektu seznamu neuvol≥uje objekty p°i°azenΘ °et∞zc∙m.
Prßci s objekty provßdφme obdobn∞, jako prßci s °et∞zci. Nap°. k jednotliv²m
objekt∙m p°istupujeme indexacφ vlastnosti Objects a to stejn∞ jako
u vlastnosti Strings. Pro p°idßnφ, vlo╛enφ a lokalizaci objektu
pou╛φvßme metody AddObject, InsertObject a IndexOfObject.
Metody Delete, Clear a Move pracujφ s prvkem seznamu
jako s celkem, tzn. zru╣enφ prvku ru╣φ jak °et∞zec, tak i odpovφdajφcφ
odkaz na objekt. Metody LoadFromFile a SaveToFile operujφ
pouze s °et∞zci, nebo╗ pracujφ s textov²mi soubory. Pro p°i°azenφ objektu
k existujφcφmu °et∞zci p°i°adφme objekt vlastnosti Objects se stejn²m
indexem. Nap°. jestli╛e seznam °et∞zc∙ jmΘna Ovoce obsahuje °et∞zec
jablko
a chceme mu p°i°adit objekt bitovΘ mapy nazvan² JablkoBitmap pou╛ijeme
nßsledujφcφ p°φkaz:
Ovoce->Objects[Ovoce->IndexOf("jablko")]
= JablkoBitmap;
Objekt m∙╛eme takΘ p°idat souΦasn∞ s °et∞zcem. Nap°.
Ovoce->AddObject("jablko", JablkoBitmap);
Nelze ale p°idat objekt bez odpovφdajφcφho °et∞zce.
-
Pokuste se vytvo°it aplikaci, ve kterΘ budete zobrazovat obrßzky bitov²ch
map. Zadßte jmΘno souboru bitovΘ mapy, zobrazφte ji a budeme moci zadat
zobrazenφ dal╣φ bitovΘ mapy. SouΦasn∞ budete vytvß°et seznam jmen soubor∙
zobrazen²ch bitov²ch map a samotn²ch objekt∙ bitov²ch map (m∙╛eme jej pova╛ovat
za seznam historie) a volbou v tomto seznamu op∞t zobrazte p°φslu╣nou bitovou
mapu (bez op∞tovnΘho naΦφtßnφ ze souboru). Pozor, ka╛dou bitovou mapu musφme
naΦφst na jinΘ mφsto v pam∞ti (vytvo°it pro nφ nov² objekt Image).