Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi - zrušenie nastavení z "odchádzajúceho" TabSheet pri prepnutí na nový TabSheet

Na formulári mám PageControl. Ten obsahuje niekoľko TabSheet a na každom TabSheet je jeden DBGrid. V rámci aplikácie mám jeden DataSource, ktorý chcem podľa potreby priraďovať DBGridom a 2 Query. Jeden je pracovný a druhý pre zobrazenie v DBGrid. Mám takýto problém:

Pri prepnutí TabSheet potrebujem zrušiť prepojenie DBGridu, ktorý bol doteraz zobrazený, urobiť zmeny a priradiť nový DBGrid. Tejto postupnosti odpovedá TabSheet.OnExit, PageControl.OnChange a TabSheet.OnEnter. Zistil som však, že OnExit sa nikidy nevyvolá a miesto toho sa mi 2x zavolá OnChange a potom sa 1x zavolá OnEnter. Ako mám teda dosiahnuť zrušenie prepojenia DBGridu s DataSource, keď sa pri prepnutí nevyvolá OnExit?

Předmět Autor Datum
TabSheet.OnShow ?
pme 15.02.2007 18:00
pme
Tým tvojím OnShow si mi dodal myšlienku a ja som ju zrealizoval. Samozrejme, že OnShow je blobosť,…
msx. 15.02.2007 18:30
msx.
To je to delphi bastlenie/lepenie A modlit sa aby ina verzia Win neposlala messages v inom poradi :-…
MM.. 15.02.2007 19:40
MM..
Chceš povedať, že C++ to urobí lepšie? Momentálne mi to funguje. V čom teda programuješ ty? //Nebe…
msx. 15.02.2007 20:25
msx.
Preco do toho pleties C++? C++ je jazyk. Tvoje problemy su spojene s lepenim nejakych komponentov ne…
MM.. 15.02.2007 20:38
MM..
Použij událost TPageControl.OnChange - vypukne při vlezení do ucha, TPageControl.ActivePage ukazuje…
Rce 15.02.2007 22:16
Rce
Lenže, ak nastavím nový SQL príkaz, tak ak budem mať v DBGride definované názvy stĺpcov a nebude sed…
msx. 15.02.2007 22:34
msx.
Na každý list (TTabSheet) objektu TPageControl můžeš přece nacpat mříž, jakou potřebuješ - klidně na…
Rce 15.02.2007 23:20
Rce
Vidíš, to nie je zlý nápad. Vzájomné posúvanie by nebolo na zahodenie. poslední
msx. 15.02.2007 23:51
msx.

Tým tvojím OnShow si mi dodal myšlienku a ja som ju zrealizoval.

Samozrejme, že OnShow je blobosť, ale napadlo ma, že možno OnHide a je to tak. Poradie je takéto:

1. PageControl.OnChange / Sender = Form, na ktorom je PageControl, ktorý obsahuje TabSheety, ktoré sa menia

2. TabSheet.OnHide / Sender = TAbSheet, ktorý sa opúšťa

3. PageControl.OnChange / Sender = PageControl, na ktorom sú TabSheet, ktoré sa menia

4. TabSheet.OnShow / Sender = TAbSheet, ktorý sa zobrazí

Ďakujem za pomoc.

Edit: Pri PageControl.OnChange musím testovať hodnotu Sender, aby som nevymenil databázu skôr, ako bude vyvolané OnHide.

Chceš povedať, že C++ to urobí lepšie? Momentálne mi to funguje.

V čom teda programuješ ty?

//Neber ako provokáciu, len by toho bolo už na mňa priveľa, keby to nešlo. Už som sa stretol s nefukčným tlačením formulára cez TForm.Print. Na mojom počítači tlačilo celý formulár na druhom len polovicu.:-/

Edit: Kúpil som si knihu Microsoft Visual C# krok za krokom (sú aj dobré internetové výuky, ale kniha je kniha) a chcem sa ho naučiť tiež. Láka ma viac akko C++. O C# si čo myslíš?

Preco do toho pleties C++? C++ je jazyk. Tvoje problemy su spojene s lepenim nejakych komponentov nejakej kniznice, tak ak sa chces bavit tak o nejakych knizniciach.

Chceš povedať, že C++ to urobí lepšie?

nie, C++ neurobi nic. Urobi to lepsie programator ktory nelepi nejake "zahadne" komponenty. Dialog s tab-mi je trivialna vec ktoru ide urobit aj s cistym WinAPI (to je aspon detailne popisane v MSDN)...

P.S. ak uz to chces robit tak ako si to robil, tak bezpecne je urobit to v jednej fcii (nieco odpajas ak bolo predtym pripojene - precitas si nejaky stav(pripojene/odpojene) a odpojis ak bolo pripojene, predtym ako to pripojis inde, vsetko moze byt v jednom evente - v tom ktory zobrazuje nove veci). Ide aj trochu o datovy model atd. Delphi zvadza k lepeniu bez rozmyslu.

Použij událost TPageControl.OnChange - vypukne při vlezení do ucha, TPageControl.ActivePage ukazuje na ucho, do kterého se právě vlezlo. Pro opuštění ucha použij TPageControl.OnChanging - vypukne při odchodu z ucha, TPageControl.ActivePage ukazuje na právě opouštěné ucho. Já osobně bych s mřížema nic nedělal extra. Na každém uchu bych si je nastavil podle potřeby a když uživatel překlikne na jiné ucho, nechal bych ty mříže v pozadí osudu, ať si žijou jak chtějí - obvykle nic špatného neprovedou.

Na každý list (TTabSheet) objektu TPageControl můžeš přece nacpat mříž, jakou potřebuješ - klidně na každý list jinou a klidně svázanou s jinou tabulkou nebo jiným SQL. Tedy co list, to jiná mříž. Tím se nebudou ovlivňovat. Záleží co děláš. Někdy je žádoucí, aby se mříž na jiném listě (spojená se stejnou tabulkou/SQL) ale s jinými sloupci pohybovala stejně.

Zpět do poradny Odpovědět na původní otázku Nahoru