[addon tabcontrol] TabControl
- Honza Kuchař
- Člen | 1662
Diskuse ke stránce TabControl
Ahoj, tak sem přidávám ten TabControl. Je to komponenta na
„ztabovatění“ obsahu. Prosím zatím tuto stránku nepřidávejte do
extras rozcestníku (jak je vidět, tak stránka není dopsaná). Návrhy
na vylepšení jsou vítány. Tak testujte… ;)
Editoval honzakuchar (10. 8. 2009 22:09)
- Honza Kuchař
- Člen | 1662
Jo, nad tím jsem taky přemýšlel, ale on je problém v tom, že ono to ani s tou současnou verzí nefunguje, protože Nette nepodporuje třídu HTML předanou jako druhý parametr snippetu. Ale řeším to úpravou Nette. Snad to David přidá, pak tam můžu napsat, že to pojede od nějaké revize výš. :)
- Honza Kuchař
- Člen | 1662
Jsem rád, že se líbí. Ono by to šlo (nejspíš – jQuery UI Tabs s tím měl menší problémek, asi rešitelný, ale tohle řešení mi přijde přímější) předělat i do stavu, kdy by ta úprava nemusela proběhnout. Ale když je ta úprava tak jednoduchá a je 100% zpětně kompatibilní. :)
P.S.: Upravena dokumentace. (přidáno pár upozornění na co si dát bacha + upraven text co je psán .prexem + opraveno pár chybek)
- PetrP
- Člen | 587
Pěkné ;] asi časem použiju. Jen hlasím malí bug v sortable a Opeře.
Když tab někam přetáhnu a pustím tak uskočí uplně do pryč ;]
Nedavdo jsem řešil to samé, je to chyba v jQuery UI Sortable. Projevuje se myslím když je na položkách position: relative (asi). Tak jim po přesunutí zůstane left a top, ostatní prohlížeče to skousnou Opara ne. Stačí když v události stop přidáš left a top na auto
$("#"+"tabs__jQueryUITabs").tabs({}).find(".ui-tabs-nav").sortable({ axis:'x',distance:25,stop:function(e,ui){
$(ui.item).css('left','auto');
$(ui.item).css('top','auto');
var order = $(this).sortable("toArray");
$.get("\/?tabs-order=order&do=tabs-saveTabsOrder", {"tabs-order[]":order});
// vytaženo ze zdroje dema, nechce se mi hledat v distribuci.
- Honza Kuchař
- Člen | 1662
Na ten bug se podívám. Pravda na opeře jsem to netestoval. (jen na IE 8, Moz 3.5, Chrome 2, Safari)
P.S.: Ten jsem objevil naprosto, ale naprosto killer feature, nyní podporovanou ve všech prohlížečích. Div se prostě začne chovat jako input. Video zde. Zkusím to nějak elegantně implementovat do datagridu. A ještě jedna příjemná věc (taky v ukázce), flash zprávičky se zobrazují pomocí jQuery pluginu jGrowl.
- Honza Kuchař
- Člen | 1662
Tak jsem z toho jelen. Teď už to opravdu běží nádherně i v Opeře. Ale dal bych ruku do ohně za to, že když jsem to zkoušel napodledy, tak se mi ten tab jakoby nechtěl zařadit zpátky. (vrátil se mi vždy zpět na výchozí pozici) Možná bylo někde něco v cache. Už je to OK. A díky za perfektní bug report! ;)
//EDIT: Opera verze 9.64 (aktuální)
Editoval honzakuchar (14. 8. 2009 0:08)
- marek-m
- Člen | 66
nechapem preco, naistaloval som si tento component pod win, a hadze mi to chybu v template na riadku 25, presnejsie Call to a member function startTag() on a non-object – TabControl.phtml.php Line: 25, aj v deme
PHP 5.2.6
pracujem prevazne pod linuxom, a tam mi to vsetko v poho bezi, nieco som nenainstaloval, resp. nepovolil nejaku kniznicu vo win?
dalej som si vsimol chybycku, co nemusi byt sposobene tymto komponentom – ked pouzivate moduly a prezentery, nefunguje mod lazy /nacitavam, nacitavam a nic...../ — ako keby si ajax nevedel poradit s „:“ – samozrejme v pripade ze nemate mod_rewrite a ze ste mimo defaultneho zobrazenia. Ak pouzijem mod no ajax, ide to, ak neclenim na moduly a prezentery, ale priamo prezenter, ide to.
- Honza Kuchař
- Člen | 1662
Proč to vyhazuje ten startTag() nevím. (je to normální HTML objekt) Já dělám pod Windows, takže se spíš divím, že to není naopak.
Moduly jsem netestoval to jest pravda. (nikdy jsem je ani nepoužil protože ani nevím přesně jak je použít) Až bude trošku času, tak se na to podívám. Zkus si zkontrolovat, co ti to vygenerovalo za odkazy.
- marek-m
- Člen | 66
odkaz je klasika /?tabs-tab=help&do=tabs-select&presenter=Config%3AMeasure, nieco taketo mi vypise firefox /3.5/ po kliku {state:{id:null,tabs-tab:help}} v kode, Windows ma Vistu, a naistalovany nejaky VAMP server – co pouzivas konkretne ty – instalujes samostatne apache2, php, mysql? V Linuxe je to bez problemov… Inak super komponent
Editoval marek-m (17. 8. 2009 8:03)
- Honza Kuchař
- Člen | 1662
Mám normálně stažený XAMPP. Nechtělo se mi s tím drbat po jednom.
A fungují ti vůbec snippety obecně? Máš správně zavináčovou magii?
- marek-m
- Člen | 66
aj ja som si naistaloval xampp, vo windowse mi vsak nejde ani demo – asi ta blba VISTA, error riadku 25 – co by som vsak az tak neriesil, pod linuxom len presunem demo na iny modul:prezender – a to mi nejde, ak mam vsak len prezenter – cize neclenim to na modul prezenter, ide vsetko ok, sranda je, ze ak na tvrdo nastavim prezenter=Default:default – ide to, co vsak urcite ma suvis s routovanim,
„demo:“ http://demo.camea.sk/ marek-heslo
menu – skuska
Editoval marek-m (17. 8. 2009 12:14)
- Honza Kuchař
- Člen | 1662
diky za demo. Mas to pekne. ;) Ale teda fakt nevim co to zpusobuje. Zkusim si to projit. Ale teď mam fakt malo času. Prazdniny za chilu konci a potom už nebude čas něco psát. Mám odevzdávat jeden projekt. :( A ještě jedna věc, David říkal cosi o tom, že bude nějak kompletně překopávat snippety, tak nevím, ale asi bych počkal. Zatím než se to vyřeší to používej v tom modu_no_ajax. (tam kde to nejede) Fakt je to tedka blbe.
P.S.: K čemu jsou vlastně dobré ty moduly?
Ad. Win momentálně jsem na Win Vista – PHP 5.2.8 a funguje vše ok.
Editoval honzakuchar (18. 8. 2009 9:17)
- marek-m
- Člen | 66
Modul – kvoli prehladnosti programu /predstav si modul administracia a modul stranky/, ale predpokladam, ze tam budem skor problem v Nette, ak to mozem tvrdit – ako som si vsimol ajax mi nefunguje pri pouziti modulu ani na datagrid, takze ako keby nette nevedel urcit prezenter — co sa mozem aj mylit, zaujimave, ze ked hodim na tvrdo neidentifikovany modul:prezenter, vyhodi mi to chybu do logu – nenasiel som prezenter. Nejde vsak o zasadnu chybu, mozno by sa to dalo obist routovanim /mozno/. Win si neskor poriesim, Bohvie ake mam vo Viste blokacie, alebo nastavenia.
- Honza Kuchař
- Člen | 1662
Je dosti možné že kombinace moduly + nové šablony s AJAXem nefungují. A máš správně vyřešenou zavináčovou magii?
- PetrP
- Člen | 587
marek-m napsal(a):
Modul – kvoli prehladnosti programu /predstav si modul administracia a modul stranky/, ale predpokladam, ze tam budem skor problem v Nette, ak to mozem tvrdit – ako som si vsimol ajax mi nefunguje pri pouziti modulu ani na datagrid, takze ako keby nette nevedel urcit prezenter — co sa mozem aj mylit, zaujimave, ze ked hodim na tvrdo neidentifikovany modul:prezenter, vyhodi mi to chybu do logu – nenasiel som prezenter. Nejde vsak o zasadnu chybu, mozno by sa to dalo obist routovanim /mozno/. Win si neskor poriesim, Bohvie ake mam vo Viste blokacie, alebo nastavenia.
Je to Presenter, ne Prezenter ;] Takle se s toho chudáci začátečníci zblázní až se budou snažit vytvořit svůj DefaultPrezenter ;]
- Honza Marek
- Člen | 1664
Honza, nebudeš to předvádět na PS? Zatím jsem se na to sám nepodíval, ale zdálky to vypadá zajímavě.
- Honza Kuchař
- Člen | 1662
@-> Já si to myslel :-D
Honza M. > Poslední sobota: Ouch, rád bych se objevil, ale přeji jenom je mi 16 a naši mě do Prahy nepustí. Takže uvidíme. Ale pro zájemce mám další video . Něvíte někdo kdy má být v Brně?
- Ondřej Brejla
- Člen | 746
Pokud bude srpnová PS v Praze, pak v Brně by měla být nejspíš v září, pokud se bude dodržovat střídání.
- Honza Kuchař
- Člen | 1662
Pak fajn. Ale to se snad podaří vymyslet už zase něco dalšího.
P.S.: Pokud chceš pochopit co přesně ty zavináče dějají a jak to vůbec funguje (doporučuji), tak si přečit tenhle příspěvek: https://forum.nette.org/…iewtopic.php?…
- vlki
- Člen | 218
Zdravím Honzo,
primárně dík za komponentu. Je fakt expresní:) Jen jsem teď našel takovou nejasnost.
V tabu mám DataGrid
s akcemi, které jdou mimo taby. Odkazy
se ale nevytvoří, protože se link volá na
PresenterComponent
.
Pro reprodukovatelnost:
// v tovarnicce tabu na DataGrid
public function createTabDataGrid($name, Tab $tab)
{
...
$dg->addAction('Akce', 'NejakyPresenter:akce', clone $icon->class('icon icon-detail'));
...
}
Což se neprovede, protože to hleda komponentu
nejakypresenter
.
Změnil jsem tedy řádek 171 ve třídě Tab
…
// původně
$link = parent::link($destination, $args);
// nový
$link = $this->presenter->link($destination, $args);
… a funguje parádně. Co tím parent::
bylo zamýšleno?
- Honza Kuchař
- Člen | 1662
Je to spíš feature. Protože handlery nemusí být až v presenteru, ale
mohou být i v nějaké podkomponentě, tak si můžeš nastavit
(handlerComponent
), na kterém objektu se bude volat funkce
link().
Bylo to celé myšleno tak, že si v obsahu Tab
u normálně
zavolám link signal!
a on mi to vygeneruje odkaz nejdřív na
Tab::signal!
pokud se mu to nepodaří, tak vygeneruje odkaz na
TabControl->handlerComponent->link();
Kde
handlerComponent
je jako výchozí, rodič
TabControl
u, ale můžeš si ho změnit.
Ale protože jsem s stále v Nette začátečník, tak se ptám: Existuje i nějaké elegantnější řešení? Šlo o to, že třeba datagrid bude zaregistrován ve stromu kompoponent až někde hluboko (Presenter->TabControl->Tab->DataGrid), ale signály se nesmí směřovat na Presenter->TabControl->Tab ale na Presenter což je rodič TabControlu. Takže jako výchozí nastavení je, že se odkazy generují na rodičovskou komponentu TabControlu.
→ Tak se dívám, že v Tab
žádné handlery nejsou, takže
se ani nemusím pokoušet vygenerovat odkaz na Tab
.
(v současné revizi je to dvojité generování odkazu
odstraněno)
- vlki
- Člen | 218
To jo, ale pomocí parent::
? To je rodič komponenty z hlediska
návrhu, ale ne aplikace. Co tam radší dát
$link = $this->parent->parent->link($destination, $args);
Dvakrát to tam je, protože se to volá z Tab
. Poprvé rodič
Tab
je TabControl
a pak rodič TabControl
tvá komponenta.
Taky nechápu, proč je na řádku 170 ten test
private function _link(PresenterComponent $obj,$destination, $args = array())
{
if($obj === $this)
když je to v metodě link
voláno jako:
return $this->_link($this,$destination, $args);
Tzn. test vždy projde… Něco mi uniká? Nehledě na to, že v tomhle
případě se nevygeneruje InvalidLinkException
, kterou by jsi
odchytil, ale InvalidArgumentException
při hledání té
komponenty. Na handlerComponent by tedy vůbec nedošlo…
EDIT: Nějak mi blblo načítání tabů. Chvilku jsem si s tím hrál a
nakonec to vyřešil tak, že jsem odmazal start a konec toho obalovacího
snippetu content
, co je v TabControl.phtml
. Nette to
pak bralo jako jeden snippet a vždy přepsalo všechno. Teď už mi ty snippety
chodí pěkně zvlášť a v pohodě. Tobě to s tím obalovacím
snippetem jede?
Editoval vlki (19. 8. 2009 2:23)
- Honza Kuchař
- Člen | 1662
Mě to funguje krásně. Máš v Nette upravený
SnippetHelper
?
parent::
z hlediska návrhu byl v pořádku, i když teď už
tam není, protože jsem nenašel žádný rozumný důvod, proč by se měl
generovat nějaký odkaz na Tab
(že by přímo v něm byl
nějaký handler).
if($obj === $this)
vychází z historie vývoje. Dnes už taky
není potřeba. Ta funkce _link()
se měla používat ještě
malinko jinak. Aktuálně už žádná taková funkce není
Stáhni si novou revizi. (lehce jsem to odbalastil)
- Honza Kuchař
- Člen | 1662
Tak od teď můžete vracet v továrníčce na obsah tabu i cokoliv
s ITemplate
Jen mě tak napadlo. Myslíte, že by mělo smysl, jako takouvou zkratku
udělat něco ve stylu
$tab->content = "template:%appDir%/templates/neco/neco.phtml"
.
Že bych kvůli šabloně nemusel psát továrničku. (tedy pokud má
statický obsah)
- Honza Kuchař
- Člen | 1662
Tak se na to dívám. A vidím, že ten TabControl by vlastně ani tak nemusel být TabControl, ale spíše MenuControl. A z něho by se potom dědilo a přepsala by se sablona callbacky pro přesouvání tabů.
Nicméně menu v rámci presenteru – mno nevím. Mělo by to výhodu, že by se dalo udělat něco jako http://romansklenar.cz/…d-dialog.png, ale fungovalo by to s i bez JS. Vlastně by byli jakoby 3 sekce z toho 2 by byli skryté a byli by nad datagridem. A vždy by se jedna zobrazila. Bez JS by se obsah normálně přepl, jako to teď dělají taby.
Prosím o přečtení toku mých myšlenek a jejich kritiku
- blacksun
- Člen | 177
S továrničkou na šablonu bych až takový problém neviděl, zbytečně bych to nezapleveloval dalšími specifiky.
Narazil jsem na dva problémky při použití TabConrolu a to tyto:
DataGid tvořím přes továrničku metodou getComponentPersonsDataGrid.
V metodě pro naplnění tabu volám
<?php
function createTabPersons($name,Tab $tab)
{
$grid = $this->getComponent('personsDataGrid');
return $grid->render();
}
?>
Pokud bych vracel přímo komponentu $grid bez volání render(), skončí mi to výjimkou, že komponenta není registrována k Tabu.
Lze nějak přiřadit komponentu k Tabu, když ji vytvářím přes továrničku?
Druhá část dotazu je k použití šablony v tabu. Pokud použiju výše uvedené získání gridu v továrničce tabu, tak je to ok, ale pokud použiju tento zápis
<?php
function createTabPersons($name,Tab $tab)
{
$templatePersons = new Template;
$templatePersons->setFile(Environment::expand("%appDir%/templates/tabs/persons.phtml"));
$templatePersons->registerFilter('Nette\Templates\CurlyBracketsFilter::invoke');
return $templatePersons;
}
?>
a v šabloně je jen @{control personsDataGrid}, spadne mi to na výjimce Call to a member function getWidget() on a non-object.
hasSnippets na daném tabu mám zaplé.
Je potřeba ještě nějak ohnout šablonu, abych v ní mohl použít widget? Potřeboval bych pod datagrid právě doplnit do tabu ještě další věci.
Díky za případnou radu.
P.S. Až při podrobném pročtení vlákna jsem si všiml, že Honzovi je 16, tak i z tohoto pohledu klobouk dolů ;)
Editoval blacksun (7. 10. 2009 17:41)
- Honza Kuchař
- Člen | 1662
- TabControl si componentu zaregistruje sám, pokud ještě není
zaregistrována. (stačí ji v vrátit returnem)
Lze nějak přiřadit komponentu k Tabu, když ji vytvářím přes továrničku?
Napadá mě akorát odregistrovat a poté teprv předat TabControlu. (nejjednoduší je to udělat to tím returnem)
Call to a member function getWidget() on a non-object.
Je docela logické. Widget se překládá jako$control->getWidget(xxx);
. Ale v šabloně, která je tvořena pomocínew Template;
se žádná taková proměnná neregistruje. Registruje se až zde: https://api.nette.org/…rol.php.html#95 Tzn. Template vytvářet buť jako control->createTemplate nebo si potřebnou proměnnou předat.Potom napiš jestli ti ta komponenta v té template bude fungovat. Sám jsem to nezkoušel a myšleno to bylo spíše jako, když mám nějaký delší text. ;) (Nicméně nad tím přemýšlím a fungovat by to snad mohlo, ale jen díky továrničkám. Ale myslím, že bude problém s vykreslováním. Mno vyzkoušej a uvidíš.)
- blacksun
- Člen | 177
- To odregistrování pomocí $this->removeComponent() a pak vrácení returnem funguje ok, narazil jsem na to náhodou a pak si to i napsal ;)
- S tou šablonou jsem zkusil pár věcí, ale nepovedlo se mi to rozjet. Když ji vytvořím přes $this->createComponent() kde $this je presenter, tak mi pak nefungují ostatní taby. Když zkusím přes $tab->createComponent() v továrničce na tab, tak to nefunguje.
Když použiju v továrničce tabu šablonu přes new Template, tak do ní si mohu předat datagrid přes komponentu. Jediné, co mi v tomto případě nefungovalo byly flashmessage od datagridu, které ale asi musím v šabloně sám vykreslit (?)…
Přemýšlím, že pokud bych chtěl mít v tabu nějakou složitější šablonu včetně komponent apod, bylo by lepší vytvořit nad tím komponentu např. dle návodu z QuickStartu a tu pak tabu předat.
Jinak co jsem zkusil vlastně mimoděk tak je více TabControlů v sobě a to funguje ;)
- Honza Kuchař
- Člen | 1662
Jinak co jsem zkusil vlastně mimoděk tak je více TabControlů v sobě a to funguje ;)
Tak to je fajn, to jsem nezkoušel.
S tou šablonou jsem zkusil pár věcí, ale nepovedlo se mi to rozjet. Když ji vytvořím přes $this->createComponent() kde $this je presenter, tak mi pak nefungují ostatní taby. Když zkusím přes $tab->createComponent() v továrničce na tab, tak to nefunguje.
Myslíš $this->crateTemplate()
ne?
- blacksun
- Člen | 177
Jj, chybka, $this->createTemplate();
Momentálně bojuju s tím, že pokud použiju tento kód pro vytvoření tabu
<?php
function createTabPersons($name,Tab $tab)
{
$templatePersons = $this->createTemplate();
$templatePersons->setFile(Environment::expand("%appDir%/templates/tabs/test.phtml"));
$templatePersons->pDG = $this->getComponent('personsDataGrid');
return $templatePersons;
}
?>
a v šabloně pouze kód @{!$pDG->render()}, tak se datagrid vykreslí, posílá signály, ale nefunguje jejich zpracování :-(
<?php
function handlePersonsActions(SubmitButton $button)
{
$form = $button->getParent();
$grid = $this->getComponent('personsDataGrid');
$grid->flassMessage('test');
$grid->invalidateControl();
}
?>
hodí err 500..
Když tab není přes šablonu, ale přímo vrácen od presenteru odpojený datagrid, tak to funguje:
<?php
function createTabPersons($name,Tab $tab)
{
$pDG = $this->getComponent('personsDataGrid');
$this->removeComponent($pDG);
return $pDG;
}
?>
Je to celý nějaký magický, nedaří se mi do toho proniknout tak, jak bych potřeboval.
- blacksun
- Člen | 177
Proč je vlastně důležité vracet komponentu v továrničce tabu přes return?
Respektive v čem je rozdíl, pokud komponentu vrátím jakožto objekt (zařadí se do stromu pod daný tab?) a když ji nechám připojenou k presenteru a v továrničce na tab ji vrátím vyrenderovanou?
V druhém případě mi totiž fungují flashmessage datagridu po akci.. Možná zase někde nějaké zavináče..
- Honza Kuchař
- Člen | 1662
Updatoval jsem příklad, ukázka (TabControlu v TabControlu) + (template s TabControlem v TabControlu). Tzn. máš tam tu komponentu (s podporou ajaxu) v template.
- JakubKohout
- Člen | 92
Přemejšlím jak navěsit VisualPaginator na TabControl … normálně se mi v klidu vykreslí ale na ajaxovou odpověď vrací:
{"state":{"visualPaginator-page":2}}
A přitom metoda loadState ve visualPaginatoru obsahuje $this->invalidateControl(); takže by měla refreshnout všechny snippety ne ?
Any idea jak to vyřešit? :)
Editoval dRaGen (13. 10. 2009 0:57)
- Matúš Matula
- Člen | 257
Ahoj, Tabcontrol volam zo sablony cez @{control tabs}
Kod tovarnicky:
<?php
function createComponentTabs($name) {
$tc = new TabControl($this,$name);
$tc->mode = TabControl::MODE_LAZY;
$tc->sortable = false;
$tc->loaderText='Načítávam...';
$t = $tc->addTab('mostVisited');
$t->header = 'Najčítanejsie';
$t->contentFactory = array($this, 'getMostVisitedArticles');
$t->hasSnippets = true;
$t->select();
$t = $tc->addTab('mostCommented');
$t->header = 'Najkomentovanejsie';
$t->contentFactory = array($this, 'getMostCommentedArticles');
$t->hasSnippets = true;
return $tc;
}
?>
chcel by som po selectnuti daneho tabu ulozit jeho ‚id‘ do session a podla nej vzdy oznacit po reloade stranky naposledy oznaceny tab. Da sa to nejako jednoducho? Vdaka
- Honza Kuchař
- Člen | 1662
getTab()
vrací jméno aktivního tabu
→ tady to ulož kam chceš
pomocí select()
ho můžeš vybrat
Pořadí tabů se dá měnit pomocí fcí: loadTabsOrder()
a
saveTabsOrder()
P.S.: Ten $t->select()
fakt funguje? Já bych řekl, že pak
nemůže jít změnit tab ne?
P.P.S.: To pamatování posledního vybraného tabu se zdá být užitečné → píšu na TODO.
- Matúš Matula
- Člen | 257
honzakuchar napsal(a):
getTab() vrací jméno aktivního tabu
→ tady to ulož kam chceš pomocí select() ho můžeš vybrat
Pořadí tabů se dá měnit pomocí fcí: loadTabsOrder() a saveTabsOrder()
Dik, skusim
P.S.: Ten
$t->select()
fakt funguje? Já bych řekl, že pak nemůže jít změnit tab ne?
Nene, nefunguje, to tam ostalo este po testovani.
P.P.S.: To pamatování posledního vybraného tabu se zdá být užitečné → píšu na TODO.
Super
- Matúš Matula
- Člen | 257
Ahoj, neviem, ci to patri sem, ale skusim..
Generovany link pre oznacenie tabu je v xhtml nevalidny .. namiesto entity
&
dava do adresy samotny &
.
Da sa to niekde nastavit/opravit?
- bazo
- Člen | 620
ahoj,
narazil som na par problemov pri tabcontrole
skusam pridat tab pri nejakej akcii, napr ked chcem editovat clanok
<?php
public function handleEditArticle()
{
$tab = $this["tabs"]->addTab('edit');
$tab->header = 'Edit';
$tab->contentFactory = array($this, 'createComponentFormEditArticle');
$this['tabs']->select('edit');
}
?>
toto funguje fajn, formular sa vykresli, naplni datami, tab sa prepne, ale pri odoslani formu na novom tabe sa zavola tabs-tab=edit&do=tabs-edit-edit-submit, co vyhodi error The signal receiver component ‚tabs-edit-edit‘ is not found.
zabudol som na nieco alebo to tak nejde?
a este po spracovani toho formu by som chcel ten tab odstranit, je na to nejaka metoda?
Dik za pomoc!
Editoval bazo (29. 11. 2009 0:39)
- Honza Kuchař
- Člen | 1662
Rad bych poslouzil ale bohužel to implementace nedovoluje, a ani kdybych cely TabControl přepsal, tak fakt nevim, jak bych to udelal. Takže fakt nevim. (tohle by se mi samozřejmě hodilo taky)
//EDIT: Něco mě napadlo.
Editoval honzakuchar (29. 11. 2009 9:52)