Newsgroup: it.comp.lang.delphi
Titolo: TStringGrid, ValueListEditor oppure?

Come sapete (o dovreste sapere :-p) programmo da non molto in delphi e
dopo svariati anni di VB finalmente ho avuto l'occasione di fare il
grande salto, e per questo mi capita di fare domande da perfetto niubbo.
In questo caso mi servirebbe un consiglio sul componente da usare, dato
che non conosco in maniera approfondita tutti i controlli di delphi:
per chi conosce VB, mi servirebbe una specie di FlexGrid.
Vi dico subito quello che devo ottenere cosě magari avete anche qualche
idea alternativa: devo mostrare una serie di stringhe, disposte su 2 (o
3) colonne e devo permettere all'utente di modificare solo l'ultima
colonna. Giusto per precisare, le prime due colonne conterrebbero un
path e un nome di un file, mentre la terza (editabile) contiene un nome
di file. In sostanza compaiono in questa griglia dei file che per la mia
applicazione risultano errati e devo obbligare l'utente a cambiare il
nome del file, di conseguenza effettuando anche dei controlli.
Pensavo di usare la TStringGrid ma ci sono 2 limitazioni abbastanza
pesanti: le colonne fisse non possono essere ridimensionate dall'utente
e non mi sembra di aver visto degli eventi utili per la gestione e
validazione delle stringhe modificate. O meglio, c'č l'OnSelEditText, ma
viene scatenato alla pressione di ogni tasto mentre a me farebbe comodo
una specie di OnEnterCell e OnExitCell.
In alternativa pensavo di utilizzare il ValueListEditor che ha l'evento
OnValidate ma supporta al massimo 2 colonne.
Altre idee?
grazie
Lis
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 Altre idee?
Dimenticavo: senza usare controlli di terze parti ma solo quelli
standard di Delphi


 effettuando anche dei controlli.
potresti, all'ingresso in una cella, semplicemente visualizzare una
dialog di selezione del file da cui l'utente puo' selezionare i file
disponibili. Eventualmente, metti nella cella, prima che sia scelto un
file, un pulsante per attivare il dialog o, semplicemente, dei puntini
Saluti
Paolo Arosio

 file, un pulsante per attivare il dialog o, semplicemente, dei puntini
Per il momento sto facendo in un altro modo ancora: ho creato una
scrollbox in cui inserisco i 3 controlli che mi servono per ogni item
(path e nome file cone TStaticText e altro nomefile come TEdit). Il
tutto sormontato da un THeader con cui gestisco gli eventuali
ridimensionamenti di tutti i controlli.
Ho però un problema di un'eccezione che si solleva quando chiudo il
form, quasi sicuramente perchè creo gli oggetti ma poi non li distruggo.
Ho provato quindi a mettere nel metodo destroy del form un ciclo per
cancellare tutti gli oggetti che ho creato in precedenza:
iCount := ScrollBox.ControlCount - 1;
for i := iCount downto 1 do
  ScrollBox.Controls[i].Free;
Se lascio il downto fino a 1 la procedura termina correttamente ma
comunque mi da in seguto l'eccezione. Se invece faccio il downto a 0 mi
da un'eccezione anche all'interno della destroy (evidentemente perchè il
componente[0] è il THeader che non creo a run-time)
Sapreste dirmi dove sto sbagliando?


 Sapreste dirmi dove sto sbagliando?
Non ti so dire con certezza in quanto non specifichi il codice per la
creazione a runtime degli oggetti (se non ho capito male).
Se l'owner dei tuoi oggetti è la form o lo scrollbox non hai problemi
di distruzione esplicita. Alla chiusura dell'applicazione questi
oggetti vengono distrutti dal proprio owner.
Ciao
Antonio

 oggetti vengono distrutti dal proprio owner.
Il codice con cui creo ogni oggetto è questo:
NewEdit := TEdit.Create(Self);
with NewEdit do begin
  AutoSize := False;
  Height := 21;
  Hint := 'pippo';
  Name := 'b' + IntToStr(iCount);
  Parent := ScrollBox;
  ShowHint := True;
  Tag := i;
  Top := ((iCount - 1) * Height);
  Text := 'pluto';
end;
ScrollBox.InsertComponent(NewEdit);
il tutto all'interno di un ciclo.
La struttura è questa:
Mdi Form --> Mdi Child --> Dialog Modale che contiene la mia ScrollBox
in cui creo questi oggetti.
Nella procedura contenuta nella MdiChild apro la dialog in questo modo:
frmError := TFrmFileErrorList.Create(Self);
frmError.ShowModal;
frmError.Free;
Qualche idea? grazie
Lis


 frmError.Free;
Questo blocco lo proteggerei in un try..finally.
Ciao
Antonio

 Questo blocco lo proteggerei in un try..finally.
Sì, bè...per il momento è scritto così perchè per fare le prove l'ho
'infilato' in un metodo a caso.
grazie
Lis