Newsgroup: it.comp.lang.delphi
Titolo: Modificazione dei metodi nell'ereditarietà.

Ciao,
Scusate la poca esperienza. Mi stavo chiedendo se è possibile far si
che nell'ereditarietà di una classe.
Nello specifico caso TTreeView, sia possibile far si che l'evento
onclick non venga ereditato.
Ho già ereditato la classe in MyTTreeView e aggiunta alla Palette
Sample. Ho fatto vari tentativi di ridefinizione del metodo ma non
riesco ad ottenere il risultato desiderato.
Vi chiedo quindi se è possibile.
Ciao
Alessandro

 Vi chiedo quindi se � possibile.
Non credo sia possibile con Object Pascal. Delphi implementa una certa
ortodossia nella OOP, per cui se esiste un metodo nella classe antenata
esiste anche in quella discendente.
Inoltre, credo ci sia un problema nella tua definizione, ovvero un
evento non viene ereditato in maniera tecnica, cio� un evento � soltanto
un puntatore a metodo dichiarato nella classe. Generalmente, la VCL
implementa qualcosa del genere, ovvero, un metodo protetto DoClick che
viene chiamato quando arriva all'oggetto il messaggio windows del click
del mouse. DoClick verifica se la propriet� OnClick � assegnata ed in
caso positivo viene chiamato il metodo assegnato all'evento OnClick.
Per� potresti dare uno sguardo alla classe antenata (in genere preceduta
da custom nel nome) e derivarne una tua dando visibilit� soltanto alle
propriet� che ti interessano. Nel caso di TTreeview non so se questo sia
possibile perch� se non ricordo male era un wrapper ad un controllo windows.
Antonio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Mozilla - 
http://enigmail.mozdev.org
iEYEARECAAYFAkoegioACgkQYSsm1R1/E7xV2gCeNII/BLzh31snEhbRKQXTTbVQ
WfEAnjw19Psjl+7G6gGXZlDkrLFrMSa6
=UOjr
-----END PGP SIGNATURE-----


Ciao.
Non mi e' chiaro che cosa vuoi ottenere: vuoi che nell0bject inspector
non si veda l'evento OnClick del tuo MyTreeView?
Devi mettere la proprieta' OnClick nella sezione public invece che
published
in modo che non sia visibile dall'inspector.
Naturalmente questo non significa che l'evento sia sparito: in
generale tutte
le proprieta' e metodi della classe antenata sono presenti anche in
tutte
le classi derivate. Tra l'altro e' un principio base della OOP che se
derivi lo fai per aggiungere e non per togliere :)
ciao
Giacomo

 onclick non venga ereditato.
perche?
A.


Grazie delle precisazioni.
Forse la domanda era posta male, anzi malissimo.
Purtroppo ho appena iniziato a masticare questo fantastico
linguaggio.
Intendevo dire come faccio a cambiare il comportamento in relazione a
un evento ?
Es. col doppio click sul TTreeView ottengo l'espansione o
collassamento di un nodo.
Se ridefinisco l'evento nella mia classe derivata MyTreeView, posso
variare il comportamento impedento che il nodo venga espanso o
collassato?

 onclick non venga ereditato.
Quando definisce la nuova classe dichiari private la property
    property OnClick;
TMyClass =  class(TTreeView)
private // o strict private
    property OnClick;
    property OnDblClick;
public
   ....
end;
Ciao,
Gianpiero
https://sourceforge.net/projects/wiilauncher/

 collassato?
Presumo ci siano metodi pi� consoni, se l'effetto da ottenere � questo.
In ogni caso, se vuoi "bloccare" l'accesso all'evento /OnClick/, ti 
sconsiglio di ereditare direttamente da *TTreeView* e spostare poi la 
propriet� a un livello diverso di visibilit�, poich�... non funziona, 
proprio per i principi del paradigma della programmazione ad oggetti.
Eredita da *TCustomTreeView*, invece, e sposta nella sezione *published* 
solo le propriet� e gli eventi dei quali vuoi consentire l'accesso.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

     property OnClick;
Non puoi "abbassare" la visibilit� di un membro di una classe ereditata 
se questo ha una visibilit� maggiore nella classe base.
