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