Newsgroup: it.comp.lang.delphi
Titolo: problema con TStringGrid

Salve a tutti.
Ho un problema con una TStringGrid in un mio programma.
Ambiente: Win2000 Pro + Delphi5.
In pratica ho dichiarato la griglia
public
    { Public declarations }
    Grid: TStringGrid; //Griglia di visualizzazione
    ....
    ....
All'occorrenza creo la griglia dinamicamente
Grid := TStringGrid.Create(nil);
     try
        Grid.Parent := CsvManagerMainForm;
        Grid.Align := alClient;
        Grid.ColCount := 1;
        Grid.RowCount := 2;
        Grid.FixedCols := 0;
        Grid.FixedRows := 1;
        Grid.OnSetEditText := GridChangeText;
        Grid.Options :=
[goFixedVertLine,goFixedHorzLine,goVertLine,goHorzLine,goRowSizing,goColSizi
ng,goEditing,goTabs];
     except
        Grid.Free;
     end;
Quando non serve più la distruggo
     Grid.Free;
Il problema è che se creo la griglia e scrivo SOLAMENTE la prima riga quando
la distruggo funziona tutto, mentre se aggiungo altre righe quando richiamo
il metodo Free mi da una sfilza di errori di "Access violation"!
Dove sbaglio?
Grazie, Marco.

      end;
Non condivido questo codice, anche xche nascondi i messaggi
di errore legati alle eccezioni e come lo fai un debug
se non hai un messaggio di errore che ti dice cosa
stai sbagliando?
Invece di except ueserei finally.
Prova a vedere cosa succede in questo modo.
Bye
AS
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Ciao Alberto.
Ho fatto cosě perchč se usassi finally la griglia verrebbe distrutta subito
dopo essere stata creata, mentre io, invece, dopo averla creata ci devo
lavorare. E poi gli errori me li da nella procedura in cui distruggo la
griglia e cioe' in corrispondenza del "Grid.Free".
Ciao e grazie della risposta.
Marco.

dopo essere stata creata, 
Non capisco perche':
// qui creo l'oggetto
try
  // qui ci lavoro
finally
 // qui lo distruggo
end;
La distruzione avviene comunque *dopo* la creazione
dell'oggetto e *dopo* che l'hai utilizzato.
Nel tuo codice, innanzitutto imposta il Parent del
controllo, perche' altrimenti non lo vedi, poi, prima di
distruggere la griglia imponi l'evento OnSetEditText a nil.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

 distruggere la griglia imponi l'evento OnSetEditText a nil.
Questo in effetti non sapevo potesse dare dei problemi.
Ora provo.
Grazie anche a te.
Ciao, Marco.

Ora provo.
In realta', dovresti :
1. rendere la griglia non visibile;
2. annullare l'evento OnSetText;
3. distruggere la griglia;


 3. distruggere la griglia;
WOW!! Ora funziona, grazie 1000.
Ma chissa' poi perche' se si lascia il gestore dell'evento vengono generate
le violazioni d'accesso?!
E' un bug o sono io che non capisco qualcosa?
Un ultima cosa (non voglio rubarti troppo tempo), il codice che ho
utilizzato è corretto oppure esiste un modo piu' giusto e/o elegante?
Di nuovo grazie 1000.
Ciao, Marco.

utilizzato è corretto oppure esiste un modo piu' giusto e/o elegante?
Be', l'allocazione dinamica e' da evitare quando possibile.
Nel tuo caso se ti serve realmente creare la TStringGrid a
run-time, allora e' la via giusta per farlo.


Grazie ancora per il tempo che mi hai dedicato.
Ciao e buona Pasqua.
Marco.

Sorry.
Avevo letto male il codice.



ABLS Team - 
www.abls.it
SINTESI S.r.l. - 
www.sintesi.com

 generalmente programmo affidandomi alle condizioni riportate sopra.
In pratica, da quanto ho capito, durante la distruzione (prima, dopo?)viene
generato l'evento, ma il controllo viene passato al gestore quando la
griglia e' gia' distrutta. La cosa strana e' che nel gestore ho messo un
codice che non fa ASSOLUTAMENTE riferimento alla griglia. Capirei se nel
gestore mi riferissi alla griglia, in questo caso, poichè la griglia e' gia'
stata distrutta, andrei a lavorare su un oggetto che non esiste piu'. Pero'
devo ammettere che facendo come ha detto Andrea l'errore non compare piu'.
Da quanto detto sopra sono giunto alla conclusione:
Bho?!
Se qualcuna ha qualche idea si faccia avanti per illuminare un povero
newbies perso nelle tenebre dell'ignoranza :))
Ciao, Marco.