Newsgroup: it.comp.lang.delphi
Titolo: Il Sender di una procedura chiamata d a un evento... chi è?

Ciao a tutti.
abbiate pietà, ma sono alle prime armi, faccio ancora confusione tra 
classi e oggetti... d'altra parte ho iniziato da un mesetto scarso e 
purtroppo l'help del kylix fa un po pena...
espongo il quesito:
ho un array di TImage (tumb)
mentre creo in un ciclo i vari oggetti TImage inserisco anche 
l'assegnazione dell'evento del doppio clik (Come suggeritomi da CA75 
l'altro giorno - grazie ancora)
...
    case tipo of
    1:
    begin...
...tumb[ref] := TImage.Create(pan[ref]);
    tumb[ref].Parent := pan[ref];
    tumb[ref].SetBounds(5, 5, DT - 10, DT - 10);
    tumb[ref].Stretch := True;
    tumb[ref].Picture.LoadFromFile(path + '/' + nome);
    tumb[ref].OnDblClick := evento;...
    ...
finito il tutto definisco la procedura "evento"
procedure TForm1.evento (Sender: TObject);
begin
self.Hide;
Form2.Show;
**********
end;
Allora, la cosa cosi com'è funziona a meraviglia, se non fosse che ho la 
necessità di sapere QUALE immagine è stata doppiocliccata :D
pensavo di poter definire una procedura con variabili ma accetta solo 
Sender: TObject
Eppure chi ha scaturito tutto nn dovrebbe essere tumb[numero]???
io pensavo di poter scrivere (al posto di ******)
Sender.proprietà di Tumb[n] che è una TImage...
invece se è un TObject possiede solo le proprietà di un TOBject...
è un enigma...
--------------
cosa dovrei fare:
dovrei riuscire a passare un paio di parametri al form 2
come prima cosa in assoluto il n° corrispondente dell'array xche devo 
accedere al nome dell'immagine in modo da visualizzarla nel secondo form
e poi sicuramente il n° di "case" che chiama "evento".
Ho paura di rompere un po troppo, anche link di tutorial vanno 
benissimo, (ho provato a scandagliare l'ng ma nn ho trovato niente in 
proposito)
ciao e grazie :)
Fox

fai confusione con vb che usa gli array di controlli.
presumo che tu sappia che puoi fare un cast per avere l'oggetto vero e
proprio che ti ha generato l'evento:
procedure QualcosaDbClick(sender: TObject);
begin
  With TImage(Sender) do begin
   ...
  end;
end;
Per disntinguere quale TImage ti ha generato l'evento puoi ricorrere a 2
sistemi...
1) Usare la roprietà tag come fosse l'indice per gli array di controlli
usati da vb
In questo modo puoi scrivere una cosa del tipo:
procedure QualcosaDbClick(sender: TObject);
begin
  With TImage(Sender) do begin
    case Tag of
      1: ShowMessage('Timage1');
      2: ShowMessage('Timage2');
    end;
end;
2) Basarti sul name dell'oggetto
Come sopra solo che non puoi usare un case..of .
Ma la soluzioni + radicale, semplice, pulita e lineare sarebbe avere una
routine per ogni evento dblclick di ogni timage.
Avere un case..of  aumenta le difficolta nella lettura del codice, e quando
poi devi fare dei test e delle operazioni di debug, la leggibilità del
codice è decisamente importante.
In pratica, se il numero di TImage che gestisci è fisso e poi in un generico
evento dblclick devi mettere una case of, a cosa serve avere una sola
routine dblclick?
Bye
A.

 Come sopra solo che non puoi usare un case..of .
Sono d'accordo con tutto....
--
ilvcclx_!!!

 routine dblclick?
no, no, io purtroppo sto tentando di fare un visualizzatore di immagini 
tipo acdsee, quindi ogni directory può avere n immagini,
quindi presumo di essere sulla strada giusta...
Cmq, se faccio doppio click su una jpeg tutto funziona, si nasconde il 
form e mi appare l'altro con l'immagine massimizzata, adesso mi rimane 
da gestire il caso in cui clicco sopra una gif (TAnimate, che siccome 
non ha l'evento OnDblClick gli ho schiaffato sopra un Timage vuoto e 
trasparente che supporta il doppio click... x la serie "Se nn è la 
montagna che va a Maometto...")
oppure se clicco una directory...
Seguite la mia idea:
io so che il TImage è contenuto dall'omonimo panel (tumb[ref] appartiene 
a pan[ref] che viene anch'esso creato un paio di roghe prima nel ciclo)
se io associo 1 al Tag del pan[ref] quando è "directory" e 2 quando è 
"gif"...
il Tumb essendo figlio di pan, dovrebbe ereditare anche il Tag di pan...
quindi tumb dovrebbe avere 2 Tag, uno che ho associato come = a ref cosi 
conosco il n° dell'array che chiama e l'altro contenente il "tipo"
ad es. se chiamasse il doppio click tumb[2] che rappresenta una gif avrò:
Tag (di pan) = 2
Tag (di tumb) = 2
e avrei risolto i miei problemi
O no?
(Sono ben accetti vari consigli)
Grazie ancora di tutto!
Fox
p.s.
è troppo bello programmare!!! :D