Newsgroup: it.comp.lang.delphi
Titolo: GetText

Ciao a tutti,
vengo subito al problema.
Ho un DataModulo con all'interno alcuni Oggetti TQUERY e TDataSet.
Da varie form uso questi oggetti e li collego a delle DBGrid.
Logicamente le stringhe SQL degli oggetti Query cambiano a seconda della
Form richiedente.
Il problema sta nel fatto che vorrei impostare all'Evento GetText di alcuni
Field
la chiamata ad una funzione che mi modifica il layout del testo.
Logicamente essendo dinamici i field delle Query non posso impostarli a
priori.
Come potrei fare?
Es.:
    Ho un campo Numerico che identifica una data 20030410.
    Ho una funzione " GiornoMeseAnno " che mi traduce tale valore in data
(10/04/2003).
    All'evento GetText del field in questione farei:
           Text := GiornoMeseAnno(Text);
Ma non lo posso fare.
Avente qualche idea?
 
--------------------------------
Inviato via 
http://usenet.libero.it

Come potrei fare?
Ti riporto questo post di Marco Breveglieri (si Marco... ho copiato!!! ;-))
che "calza a pennello" con quello che vuoi fare.
Ovviamente adatterai il tipo di metodo al tuo scopo.
**************************************************************************
Per assegnare un gestore di evento a runtime devi semplicemente crearti un
metodo che sia compatibile col prototipo di metodo previsto per l'evento che
vuoi gestire, che si traduce nella creazione di un metodo avente i parametri
dello stesso tipo disposti nel medesimo ordine).
Ad esempio, l'evento OnClick di un TMenuItem è un puntatore ad un metodo di
tipo TNotifyEvent dichiarato così:
===
type
  TNotifyEvent = procedure(Sender: TObject) of object;
===
Dovrai quindi creare un metodo (magari per il form in cui viene creato il
menu) simile a quello riportato sotto:
===
procedure TForm1.MyMenuItemClick(Sender: TObject);
begin
end;
===
Come vedi, il metodo sopra è compatibile col tipo TNotifyEvent poichè ha i
medesimi tipi di parametri (in questo caso, un parametro solo, "Sender", di
tipo TObject).
Affinchè il tuo metodo venga eseguito quando si fa clic sul menu, dovrai
assegnare tale metodo all'evento OnClick del menu quando questo viene
creato; il tuo codice sarà simile al seguente:
===
  // ...
  MyMenu := TMenuItem.Create(Form1);
  MyMenu.OnClick := MyMenuItemClick;
  // ...
===
In questo modo, assegni il tuo gestore di evento al menu affinchè ne venga
eseguito il codice su clic.
**************************************************************************
-- 
Morde. 
morde[at]programmer[.]net

Grazie mille,
č tutto molto chiaro.
L'unico problema č che non riesco ad aggiungere il field all'oggeto query.
Es. :
     myField := TField.Create(Self);
     myField.FieldName := 'Campo1';
     myField.SetFieldType(ftInteger);
     myField.OnGetText := myGetText;
     frmDataModulo.myQuery.Fields.Add(myField);
     frmDataModulo.myQuery.SQL.Text := 'SELECT Campo1, Campo2, Campo3 FROM
PIPPO';
     frmDataModulo.myQuery.Open;
Secondo te in cosa sbaglio?


frmDataModulo.myQuery.Open;
frmDataModulo.myQuery.fieldByName('Campo1').OnGetText := myGetText;
Con una riga hai raggiunto il tuo scopo.
Rino, rino!
;)


 Rino, rino!


Perchè???
Rino, oh rino!
il segreto sta nel vino
che io bevo ogni mattino
e gia' vedo, appena alzato, 
a fine giorno il programma realizzato!
Scherzi a parte, io non bevo mai 
ma Rino, la tua mail controllar dovrai.
Non devi lavorare su Text, bensi' su Sender!
Una cosa cosi' funziona: 
procedure TfrmRicSchedaMatrice.myClientGetValue(Sender: TField; var Text:
String; DisplayText: Boolean);
begin
   Text := GiornoMeseAnno(Sender.AsString);
                          ^^^^^^^^^^^^^^^
Ciao RINO!!!


 a fine giorno il programma realizzato!
   SEI UN POETA. CHI ERA DANTE AL TUO CONFRONTO.....