-
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.