Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Delphi TCollectionItem a udalosti

Pracujem na vlastnej komponente(Toolbar podporujúci 32 bitové alfa transparentné ikony). Komponenta je odvodená z TCustomControl-u a obsahuje inštanciu potomka TCollection v published časti(tzn. že sa zobrazuje v Object Inspectore), Jednotlivé tlačítka sú potomkami TCollectionItem a v tom je kameň úrazu. Každý buton má vlastné eventy(OnClick atd) no pri pokuse o vytvorenie obslužnej procedúry(v Object Inspectore) mi prostredie vyhodí výnimku "Cannot create a method for an unnamed component." Samozrejme že inštancia triedy TCollectionItem nemôže mať názov keďže neni potomkom TComponent. Skúšal som vytvoriť property Name a generovať názov komponenty v konštruktore, ale nepomohlo to. Vie mi niekto poradiť čo s tým?

Předmět Autor Datum
Moc sa do delphi nevyznam ale OnClick podla mna nemozes vytvorit na Tcollectionitem, ale len na trie…
MM.. 22.09.2006 21:29
MM..
TCollection s TCollectionItems je takove lepsi pole zaznamu, vytvorene pomoci objektu.
Jan Fiala 23.09.2006 06:20
Jan Fiala
Jasné že TCollectionItem nemôže sám o sebe obslúžiť správu windows o kliknutí na inštanciu inej trie…
xmx 23.09.2006 09:54
xmx
Zavola onclick buttonu, ale IMHO nie OnClick triedy TCollectionItem, button musi mat nejaku vlastnu…
MM.. 23.09.2006 21:17
MM..
Bežne sa podobné situácie riešia tak že každý button je kontrol(odvodený od TControl), ktorý odchytá… poslední
xmx 24.09.2006 17:05
xmx
Otazkou je, zda jsi zvolil spravny pristup. Podle mne by bylo lepsi pouzit misto TCollection v tomto…
Jan Fiala 23.09.2006 06:18
Jan Fiala
Hneď to skúsom dík.
xmx 23.09.2006 09:41
xmx

Moc sa do delphi nevyznam ale OnClick podla mna nemozes vytvorit na Tcollectionitem, ale len na triede ktora definuje samotny button, alebo na triede odvodenej od nejakeho okna, resp. niecoho co dostava Windows messages (TCollection je ak to spravne chapem len subor nejakych objektov v pamati). Ale neviem mozno sa mylim.

Jasné že TCollectionItem nemôže sám o sebe obslúžiť správu windows o kliknutí na inštanciu inej triedy ako potomka TControl. Lenže ten klik odchytí už toolbar a ak zistí že bol kurzor nad oblasťou buttonu potom toolbar zavolá udalosť OnClick toho buttonu.

Bežne sa podobné situácie riešia tak že každý button je kontrol(odvodený od TControl), ktorý odchytáva správy.

Moje (netradičné) riešenie je nasledovné: Keď kliknem na hociaké miesto na toolbare, odchytí správu toolbar keď toolbar zistí že súradnice kurzoru sa nachádzali nad buttonom zavolá sa event buttonu(button som spravil ako nevizuálnu komponentu takže správy odchytávať nemôže), žiaden button(odvodený od triedy TControl) tam ale v skutočnosti nie je, vpodstate button len nesie informáciu o vlastnostiach ale všetku prácu za neho vykonáva toolbar. Ono to aj funguje.

Problém je v časti vizuálneho návrhu v IDE. IDE mi nechce dovoliť automaticky vytvoriť obslužnú procedúru eventu buttonu pretože button nemá žiaden názov(keďže nie je odvodený od triedy TComponent ktorá obsahuje property Name) IDE si nevie vycucať z prsta na základe čoho má vygenerovať názov obslužnej procedúry. A musím ju teda vytvárať ručne.

Mám taký pocit že to budem musieť celé prerobiť a namiesto TCollection použijem TList, a button odvodím od TComponent.

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