Dnes: 18. ledna 2018    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    Datový sklad
    Tento pojem poprvé formuloval koncem 80. let William Inmon jako strategii přístupu k datům určeným pro rozsáhlé analýzy. V případě datového skladu hovoříme o historických, časově rozlišených, agregovaných, průběžně rozšiřovaných datech uspořádaných pro podporu potřeb managementu.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Mřížka ve FoxPro počtvrté


    [Vývoj] - V seriálu Mřížka ve FoxPro se v necelé desítce pokračování věnujeme problematice gridu – tedy mřížky – ve stále velmi populární databázové a vývojové platformě. Charakteristické pro celý seriál je orientace na praktické příklady. Dnes se podíváme na to, jak můžeme přidat tooltip nad hlavičku sloupce mřížky.



    Třída Header nemá vlastnost ToolTipText, přesto někteří uživatelé vyžadují tooltipy nad hlavičkou sloupce mřížky. Dnešní tip ukáže jak to zařídit pro verze VFP 3.0-7.0, neboť od verze VFP 8.0 mají vlastnost ToolTipText všechny vizuální objekty.

    Použil jsem způsob, kdy objekt třídy Timer testuje objekt pod ukazatelem myši.

    Má to dvě výhody:

    • toto lze použít na mřížky, které mají nastaveno ColumnCount = -1
    • nemusí se vkládat kód do objektu headerX či do vlastních odvozených tříd

    Vlastní výkonný kód je uložen v události Timer(), pro generování výsledného tooltipu se volá metoda SetToolTip().

    Tooltip je zobrazen pomocí dynamického objektu třídy shape (je kompletně průhledný o velikost 3x3 pixely).

    Jak to pracuje?
    Jak to tedy celé funguje?

    • Timer nejdříve zjistí pomocí funkce SYS(1270) objekt pod ukazatelem myši.
      loObj=SYS(1270)
      

    • Pokud to není objekt nebo to není objekt třídy Column (toto je nejhlouběji uložená třída v mřížce, která výše uvedená funkce vrací), vymaže se interní informace o posledním sloupci, nad kterým se pohybovala myš.

      Pokud byl již Shape vytvořen, skryje se.

      * Pokud to není objekt, nebo není třídy column
      IF !(TYPE("loObj")="O" AND ;
                !ISNULL(loObj) AND UPPER(loObj.BaseClass)="COLUMN")
      
         * Pokud existuje, tím se zabrání tomu, 
         * aby shape neblikal (zobrazil,skryl,zobrazil)
         IF !ISNULL(This.LinkObj)
      
            * Pak otestuj, zda není aktivní ten shape
            loParent=EVAL(This.LinkObj+".Parent.Parent")
            IF TYPE("loObj")="O" AND !ISNULL(loObj) AND ;
               UPPER(SYS(1272,loObj))==;
                  UPPER
      (SYS(1272,EVAL("loParent."+This.ShapeName)))
               * Pokud je, pak je vse OK
               RETURN
            ENDIF
            * Pokud to není Shape, pak Shape skryj
            STORE .F. TO ("loParent."+This.ShapeName+".Visible")
         ENDIF
      
         This.LinkObj=.NULL. && Vyčisti vlastnost
         RETURN && Vypadni
      ENDIF
      

    • Pak se snaží najít objekt základní třídy Header. Pokud ho nenajde, vyskočí ven, jinak pokračuje dál.

      * Nyní musím identifikovat, zda jsem nad headerem
      FOR lii=1 TO loObj.ControlCount
          * Je to objekt třídy header ?
          IF UPPER(loObj.Controls(lii).BaseClass)="HEADER"
             * ANO
             loHeader=loObj.Controls(lii)
             EXIT && Ukonči smyčku
          ENDIF
      NEXT
      
      IF lii>loObj.ControlCount && Pokud nic nenašel (třeba tam není)
         RETURN && Vypadni ven
      ENDIF
      

    • Dále se testuje, zda je ukazatel myši na místem, kde je hlavička sloupce. Používá se na to funkce OBJTOCLIENT(). Tato funkce převádí pozici (i velikost) objektu na pozice vůči formuláři. Pro určení pozice myši na formulářem se používají funkce MCOL() a MROW(), kde první parametr je název formuláře a druhý je 3 (vrácená pozice je v pixelech). Pokud je myš mimo hlavičku, objekt Shape se skryje (byl-li) a vymaže s interní odkaz o posledním sloupci.

      IF !(BETWEEN(MROW(Thisform.Name,3),OBJTOCLIENT(loHeader,1),;
         OBJTOCLIENT(loHeader,1)+OBJTOCLIENT(loHeader,4));
         AND;
         BETWEEN(MCOL(Thisform.Name,3),OBJTOCLIENT(loHeader,2),;
         OBJTOCLIENT(loHeader,2)+OBJTOCLIENT(loHeader,3)))
         * Ne, jsem mimo
      
         * Pokud existuje
         IF !ISNULL(This.LinkObj)
      
            STORE .F. TO (This.LinkObj+;
                ".Parent.Parent."+This.ShapeName+".Visible")
         ENDIF
         This.LinkObj=.NULL.
         RETURN && Vypadni
      ENDIF
      

    • Pokud je myš nad tím samým místě (v rámci hlavičky), pak se přesune objekt Shape na nové místo a nic více se neděje.

      * Pokud už nějaký objekt aktivoval
      IF !ISNULL(This.LinkObj)
         * Pak musis provest test na stejné objekty
         IF UPPER(SYS(1272,loObj))==UPPER(SYS(1272,EVAL(This.LinkObj)))
            * Je to ten samý sloupec, přesuň Shape na nové místo
            loShape=EVAL("loParent."+This.ShapeName) && Přeber objekt
            loShape.Move(MCOL(Thisform.Name,3)-1,;
               MROW(Thisform.Name,3)-1,3,3)
            RETURN
         ENDIF
      ENDIF
      

    • Zapíše se odkaz na aktuální sloupec.

      This.LinkObj=UPPER(SYS(1272,loObj)) && Ulož si cestu k objektu
      

    • Pokud objekt Shape neexistuje, pak se založí a nastaví se mu průhledný styl.

      IF TYPE("loParent."+This.ShapeName)="U"
         loParent.AddObject(This.ShapeName,"_shpTipHeader")
         loShape=loParent.Controls(loParent.ControlCount)
      
         * Žádný okraj, průhledné pozadí, průhledný okraj
         loShape.ZOrder(0) && Posuň ho dopředu
      ELSE
         loShape=EVAL("loParent."+This.ShapeName) && Přeber objekt
      ENDIF
      

    • Následně se mu (Shapeu) nastaví vlastnost ToolTipText pomocí metody SetToolTip(), pozice,velikost a zobrazí se.

      * Ulož cestu ke sloupci také na Shape pro přesměrování událostí
      loShape.LinkObj=UPPER(SYS(1272,loHeader))
      
      * Nastav tooltip
      loShape.ToolTipText=This.SetToolTip(loObj)
      
      * Nastav pozici a velikost, přesně pod myš
      * Musí se také počítat s tím, 
      * že grid může být součástí konteinerové třídy
      * V tom případě se odečítají pozice Top a Left parenta 
      * objektu od pozice myši nad formulářem
      loShape.Move(MCOL(Thisform.Name,3)-OBJTOCLIENT(loParent,2) -1,;
                   MROW(Thisform.Name,3)-OBJTOCLIENT(loParent,1)-1,3,3)
      
      loShape.Visible=.T. && Zobraz Shape
      

    • Metoda SetToolTip() přebírá parametr, který ukazuje na sloupec pod ukazatelem myši.

      LPARAM loObj
      * loObj - Objekt Sloupce
      RETURN "Můj ToolTip: "+loObj.Name+"("+loObj.ControlSource+")"
      

    Nutné podmínky
    Jaké jsou nutné podmínky?

    • Název (vlastnost Name) formuláře musí odpovídat PUBLIC referenci formuláře (DO FORM TEST LINKED NAME TEST)
    • V událostech Activate() a Deactivate() formuláře je nutno povolit (Activate()) a zakázat (Deactivate()) timer

    K dispozici je ke stáhnutí program s třídou tmrTipHeader, ukázkovým formulářem a tabulkou.

    Související články:
    Mřížka ve FoxPro poosmé (21.07.2005)
    Mřížka ve FoxPro posedmé (11.07.2005)
    Mřížka ve FoxPro pošesté (04.07.2005)
    Mřížka ve FoxPro popáté (28.06.2005)
    Mřížka ve FoxPro potřetí (06.06.2005)
    Mřížka ve FoxPro podruhé (24.05.2005)
    Mřížka ve FoxPro poprvé (17.05.2005)

    ( Celý článek! | Autor: Martin Jindra | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1548 hl.)
    Do 1 000,- Kč 
     (1068 hl.)
    Do 10 000,- Kč 
     (999 hl.)
    Do 25 000,- Kč 
     (1378 hl.)
    Do 50 000,- Kč 
     (1016 hl.)
    Do 75 000,- Kč 
     (1178 hl.)
    Více než 75 000,- Kč 
     (1019 hl.)

    Celkem hlasovalo: 8206


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Leden  >>
    PoÚtStČtSoNe
    1234567
    891011121314
    15161718192021
    22232425262728
    293031    

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena