Newsgroup: it.comp.lang.delphi
Titolo: Cosa usare ???

Ciao a tutti,
    ho ragruppato in un'unica procedura il codice per disegnare su un canvas 
delle immagini.
Ecco la procedura
Procedure DisegnaImmagine(ImgNum : Byte);
Var S  : String;
    CK : TJvCheckBox;
    IM : TJvImage;
Begin
  S:=IntToStr(ImgNum);
  CK:=TJvCheckBox(FindComponent('IMCK'+S));
  IM:=TJvImage(FindComponent('IM'+S));
  If CK.Checked Then
  Begin
    If IM.Picture.Graphic<>Nil Then
    Begin
      // Disegno l'area dell'immagine
      WriteImage(PE.Canvas,IM,X,Y);
     End;
  End;
End;
In questa procedura in CK controllo se il checkbox e' selezionato e in IM 
l'immagine corrispondente.
Credo sia l'approccio corretto in quanto chiamo solo una volta, per entrambi 
i controlli, la funzione findcomponent.
Questa procedura funziona anche se sostituisco a CK e IM le corrispondenti 
FindComponent, in questo caso pero' le chiaamo piu' volte (per IM).
A me questa e' sembrata la soluzione migliore, cosa dite ???
L'utimo dubbio e' su CK e IM, visto che sono solo di appoggio per lavorare 
sul componente trovato, alla fine non le libero altrimenti andrei ad 
eliminare i controlli trovati. (scusate per la banalita').
Grazie e ciao, Daniele 
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4507 (20091014) __________
The message was checked by ESET NOD32 Antivirus.
http://www.eset.com

> L'utimo dubbio e' su CK e IM, visto che sono solo di appoggio per lavorare
..questa e' l'unica cosa? Non trovi che nel tuo codice manchi altro?
A.

 ..questa e' l'unica cosa? Non trovi che nel tuo codice manchi altro?
Ho passato l'ultima ora a cercare (nota il "cercare") di capire cosa puo' 
mancare (e se lo dici tu .... manca davvero).
La frustazione e' diventata massima quando mi sono reso conto di di non 
sapere cosa puo' mancare (Forse un Assigned(CK) e Assigned(IM) per essere 
certi che non sono NIL, ma dato che sono spiaccicati nel pannello ..... ci 
sono eccome se ci sono !!!!).
Porta pazienza ..... per queste piccolezze !!!


 A me questa e' sembrata la soluzione migliore, cosa dite ???
direi di si, solo una cosa, WriteImage ï¿œ comando nuovo del delphi, la 
mia versione non lo conosce.

 versione non lo conosce.
No .... tranquillo e' _LA_TUA_ procedura opportunamente modificata per i mie 
scopi ....
E' cosi'  WriteImage(DestCanvas : TCanvas; Img : TImage; StartX,StartY : 
Integer);
Il canvas e' quello di destinazione dove l'immagine viene disegnata zommata.
Ancora grazie di per tutto !!!!, Ciao, Daniele 


Qua sotto fai un cast di una cosa che potrebbe fallire:
  CK:=TJvCheckBox(FindComponent('IMCK'+S));
Ad esempio, se le checkbox smettono di chiamarsi "imck" il
findcomponent restituisce nil e scoppia tutto.
Quindi, e' buona abitudine prevedere sempre un controllo con assigned.
Ancora un dettaglio: sulla riga fai sia find che il cast.Io
separerei.
Si, vero, il codice diventa piu prolisso, ma se vai a metterci le mani
per il debug non devi impazziare a capire cosa scoppia in un riga che
fa piu' cose:
Quello che fai qua sotto ha senso solo se hai trovato la checkbox,
giusto?
  IM:=TJvImage(FindComponent('IM'+S));
Quindi, io riscriverei cosi:
var
  TempComponent: TComponent;
Begin
  S:=IntToStr(ImgNum);
  TempComponent := FindComponent('IMCK'+S);
  if (Assigned(TempComponent)) then
  begin
      CK:=TJvCheckBox(TempComponent);
      if (Assigned(ck)) and (ck.Checked) then
      begin
        TempComponent := FindComponent('IM'+S);
         if (Assigned(TempComponent)) then
         begin
           IM:=TJvImage(TempComponent);
           If IM.Picture.Graphic<>Nil Then
           Begin
             // Disegno l'area dell'immagine
             WriteImage(PE.Canvas,IM,X,Y);
           End;
.....
A.

 A.
Per lo stesso motivo si potrebbe beccare un componente che per puro caso 
si è dato il nome sbagliato, la find component lo becca, ma per essere 
sicuri che sia un TJvCheckBox ci vuole un passaggio in piu'
   if TempComponent is TJvCheckBox then
     CK := (TempComponent as TJvCheckBox)
   else
....
^_Goblin_^
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

..hai visto quante cose sono uscite?
Il tuo e' un caso abbastanza semplice ma pensa in situazioni piu
complesse come scrivere codice nel modo suggerito aiuta a prevenire
errori, access violation che sembrano incompressibili, e perdite di
tempo per capire quale e' la cosa che genera l'errore...
A.

Ciao,

Non ho davvero parole ....
Molto spesso do per scontato che certe situazioni non possano mai capitare, 
ma in effetti niente e' impossibile e, quindi, puo' succedere (devo anche 
dire che su questa linea di pensiero mi avevi gia', hem, caziato tempo 
indietro !!!).
Grazie, se puo' bastare, di tutto..... modifico subito il codice 
(spettacolare anche come avete ottimizzato il codice .... GREAT THING by 
GREAT MEN).
Alla prossima, Ciao, Daniele
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4511 (20091015) __________


 ma in effetti niente e' impossibile e, quindi, puo' succedere
il buon senso deve essere lo sprone a chiedersi "..cosa succede
se...?" e a decidere fin dove arrivare.
L'esperienza aiuta a capire meglio fin dove spingersi.
Un altra cosa importante e' la consapevolezza: "PERCHE' QUESTA COSA LA
FACCIO COSI?"
Se lo sai, ecco pronto un commento per il codice.
Serve a poco scrivere in un commento cio' che fai: quello lo si deve
capire dal codice.
La cosa importante e' il PERCHE'.
Se non lo sai, fermati e rifletti finche non trovi la risposta.
A.