18. Správce souborů II
  1. 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:

  2. 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.
  3. 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).
  4. 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.


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

  6. 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).
  7. 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.
18. Správce souborů II