-
PokraΦujeme ve v²voji aplikace sprßvce soubor∙. P°eta₧enφ prvku m∙₧e zjednoduÜit
u₧ivateli manipulaci s objekty formulß°e. M∙₧eme p°etßhnout celou komponentu
nebo n∞kter² prvek z komponenty. Nßsledujφcφ k≤d obsluhuje udßlost stisknutφ
tlaΦφtka myÜi v okn∞ seznamu soubor∙ zahßjenφm ta₧enφ a to pouze bylo-li
stisknuto levΘ tlaΦφtko myÜi:
void __fastcall TFMForm::FileListMouseDown(TObject
*Sender,
TMouseButton
Button, TShiftState Shift, int X, int Y)
{
if(Button==mbLeft)
{
if (dynamic_cast<TFileListBox *>(Sender)!=0) {
if(dynamic_cast<TFileListBox *>(Sender)->ItemAtPos(Point(X,Y),
True) >=0)
dynamic_cast<TFileListBox *>(Sender)->BeginDrag(False);
}
}
}
Kdy₧ nynφ spustφme naÜi aplikaci, vidφme, ₧e m∙₧eme p°etahovat prvek
z okna seznamu soubor∙, ale kurzor stßle indikuje, ₧e prvek nelze nikam
umφstit. Nßsledujφcφ k≤d zp∙sobφ akceptovßnφ ta₧enΘho prvku adresß°ov²m
oknem pouze tehdy, je-li ta₧en z okna seznamu soubor∙:
void __fastcall TFMForm::DirectoryOutlineDragOver(TObject
*Sender,
TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
if (dynamic_cast<TFileListBox
*> (Source)) Accept = True;
}
Kdy₧ ovladaΦ indikuje, ₧e m∙₧e akceptovat ta₧en² prvek, musφme definovat
zp∙sob obsluhy vlo₧enφ prvku. K zpracovßnφ vklßdanΘho prvku, vytvo°φme
obsluhu udßlosti OnDragDrop pro ovladaΦ akceptujφcφ prvek.
void __fastcall TFMForm::DirectoryOutlineDragDrop(TObject
*Sender,
TObject *Source, int X, int Y)
{
if (dynamic_cast<TFileListBox
*> (Source)!=0)
ConfirmChange("Move",
FileList->FileName,
DirectoryOutline->Items[DirectoryOutline->GetItem(X, Y)]->FullPath);
}
P°eta₧enφ mß nynφ stejn² efekt jako pou₧itφ File | Move, ale
u₧ivatel nem∙₧e m∞nit jmΘno souboru. Kdy₧ operace ta₧enφ konΦφ, a to bu∩
vlo₧enφm prvku nebo uvoln∞nφm tlaΦφtka myÜi nad ovladaΦem neakceptujφcφm
ta₧en² prvek, C++ Builder zasφlß udßlost OnEndDrag zp∞t ovladaΦi,
ze kterΘho byl prvek ta₧en. V naÜφ aplikaci jeÜt∞ vytvo°φme obsluhu udßlosti
OnEndDrag
okna seznamu soubor∙ tak, aby byl aktualizovßn obsah aktußlnφho adresß°e:
void __fastcall TFMForm::FileListEndDrag(TObject
*Sender,
TObject *Target,
int X, int Y)
{
if (Target
!= NULL) FileList->Update();
}
Tφm je v²voj aplikace sprßvce soubor∙ ukonΦen.
-
P°idejte do p°edchozφ aplikace n∞jakou dalÜφ Φinnost (nap°. kopφrovßnφ
soubor∙ p°eta₧enφm myÜφ p°i stisknutΘ klßvese Ctrl).
-
Pokuste se vytvo°it aplikaci pro prohlφ₧enφ obrßzk∙ (viz nßsledujφcφ obrßzek).
Komponentou DriveComboBox zvolφme diskovou jednotku, komponentou
DirectoryListBox
urΦφme adresß° a v komponent∞ FileListBox vybereme zobrazovan² soubor.
Soubory zobrazovanΘ v FileListBox urΦφme filtrem zadan²m v komponent∞
FilterComboBox.
TlaΦφtkem Full View zobrazφme okno pro zobrazenφ obrßzku v plnΘ
velikosti (vytvo°φme dalÜφ formulß°, kter² bude obsahovat pouze komponentu
Image
zv∞tÜenou na cel² formulß°, ve kterΘ obrßzek zobrazφme). ZnaΦkou
Stretch
urΦujeme, zda obrßzek bude v normßlnφ velikosti nebo zda zaplnφ celou plßnovanou
plochu. ZnaΦkou View as Glyph urΦφme, zda ukßzat, jak bitovß mapa
bude zobrazena na demonstraΦnφch tlaΦφtkßch.
-
V dalÜφ aplikaci se seznßmφme s vytvß°enφm vφcestrßnkov²ch dialogov²ch
oken. ZaΦneme v²voj novΘ aplikace a na formulß° umφstφme komponentu StatusBar
a komponentu PageControl (zv∞tÜφme ji na celou plochu formulß°e).
Novou strßnku na ovladaΦ PageControl p°idßme volbou New Page
v mφstnφ nabφdce ovladaΦe. Vytvo°φme t°i novΘ strßnky a zm∞nφme jejich
jmΘna na Prvnφ, Druhß a T°etφ. Na jednotlivΘ strßnky
vlo₧φme r∙znΘ ovladaΦe. Vytvo°φme jeÜt∞ obsluhu udßlosti OnChange
ovladaΦe
PageControl s nßsledujφcφm obsahem:
char buf[3];
StatusBar1->SimpleText
= "Page index: " +
AnsiString(itoa(PageControl1->ActivePage->PageIndex,
buf, 10));
Aplikace je hotova m∙₧eme ji vyzkouÜet. Tφmto zp∙sobem je mo₧no vytvo°it
vφcestrßnkovΘ dialogovΘ okno (my jsme vytvo°ili hlavnφ formulß°, ale jeho
obsah bychom mohli pou₧φt jako obsah n∞jakΘho dialogovΘho okna). Ka₧dß
strßnka m∙₧e obsahovat jinΘ ovladaΦe (pokud mßme mnoho ovladaΦ∙, pak je
m∙₧eme umφstit na menÜφ plochu).
-
Podφvßme se jeÜt∞ na jednu aplikaci. Jednß se ji₧ o vytvo°enou aplikaci,
kterß umo₧≥uje pou₧φvat r∙znΘ nßstroje C++ Builderu. Pro jednotlivΘ nßstroje
usnad≥uje nap°. zadßvßnφ parametr∙ p°φkazovΘho °ßdku a usnad≥uje pou₧φvßnφ
t∞chto nßstroj∙. Aplikaci si stßhn∞te a vyzkouÜejte
jak pracuje. ProhlΘdn∞te si takΘ jak jsou naprogramovßny n∞kterΘ Φinnosti.
Pokuste se zjistit, k Φemu tyto jednotlivΘ nßstroje lze pou₧φt.