Newsgroup: it.comp.lang.delphi
Titolo: [d5][d6] derivare un componente e non gestire un certo evento

ciao a tutti, se volessi derivare il componente TLabel e farlo diventare 
TRettaLabel e fare in modo che quando entra nell'onclick se non mi interessa 
gestirlo passarlo al componente sotto del mio (ad esempio un altro 
TRettaLabel oppure un altro oggetto che si trova sotto di questo), come 
posso fare?
Simo 

Simone P. ha scritto:

Sarà colpa mia, ma personalmente non ho capito nulla. :-)
Potresti esemplificare? ;-)
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 posso fare?
Dipende da cosa intendi fare, chiarisci meglio.
Se intendi demandare la gestione del click a qualsiasi altro componente,
non ti serve la derivazione, basta invocare direttamente l'evento del
componente destinatario passandogli come sender il tuo compoennte che
riceve il click.
Esempio:
procedure TForm1.Label1Click(Sender: TObject);
begin
  Button1Click(Sender);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  // se voglio discriminare chi mi ha chiamato testo il sender
  if (sender as tcomponent).Name = 'Label1' then GestisciClickLAbel1
  else Gestisciclickbutton1;
end;
-- 
Morde

io devo creare a runtime più componenti TXXXX (dove XXXX sarà label, timage, 
o quello che mi viene meglio per fare una retta!!)... il problema è che il 
componente è rettangolare mentre io ho necessità di gestire il click solo 
sul segmento disegnato su di esso. nel caso il click non sia sul segmento 
vorrei lanciare la gestione del click del componente sottostante, però come 
faccio a sapere qualè???
Simo 

 faccio a sapere qualè???
Guarda che stai sbagliando approccio: ci sono dei componenti specifici per
il disegno vettoriale/grafico, stai cercando di usare componenti pensati
per altri scopi.. prova a cercare con google su questo stesso ng si e'
parlato spesso di componenti per il disegno di grafici, vettoriale, ecc...
Ciao
-- 
Morde

si possono applicare anche sopra a delle immagini jpeg?
simo 

Simone P. ha scritto:

Ti hanno suggerito più volte quali sono gli approcci e i controlli 
ideali per fare quanto chiedi... ma sembra che tu voglia evitarli a 
tutti i costi, per poi proporre problemi che - seguendo quelle scelte - 
non avresti mai avuto. :-)
Il mio suggerimento è quello di creare un nuovo controllo grafico, che 
erediti da *TGraphicControl*, e ridefinire (override) il metodo /Paint/ 
per implementare le funzionalità di disegno che provvedono a tracciare 
nell'area del controllo stesso i segmenti su cui devi lavorare.
Ridefinisci poi i metodi che vengono invocati dalla classe base quando 
l'utente effettua un clic sul controllo (/MouseDown/, /MouseUp/, ...) e, 
in base alle coordinate, determina qual è il segmento che è possibile 
selezionare nel punto cliccato (si tratta di matematica e geometria, non 
di un problema prettamente Delphi) e modifica lo stato del controllo 
stesso (mantenuto su apposite variabili, come liste - di segmenti - e 
altri flag e registri accessori) chiamando /Invalidate/, se serve, per 
indicare a Windows che è necessario ridisegnare, quando possibile, il 
tuo controllo (che poi riconduce all'invocazione di /Paint/).
Con un controllo grafico, puoi facilmente gestire tutte queste 
problematiche incorporandole all'interno di un'unica classe, senza 
troppa fatica.
Se hai problemi di "flickering" (sfarfallio), ti basta ereditare da una 
classe che implementa un controllo grafico più potente, come quella 
disponibile nel package *Graphics32* che più volte ho citato.
L'uso congiunto di controlli compositi, sovrapposti, con spostamento di 
eventi dall'uno all'altro e altre "pratiche" di questo tipo, secondo me, 
confondono solo le idee, richiedono più tempo per essere implementate e 
provocano più effetti collaterali se comparati con la soluzione 
proposta, secondo me.
Ciao,
   Marco.


ok allora meglio provare la tua soluzione
Simo