Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: mizar - Luglio 17, 2015, 06:38:25 pm

Titolo: Visualizzare una variabile in un form
Inserito da: mizar - Luglio 17, 2015, 06:38:25 pm
Non so se è una banalità, ma non riesco a venirne fuori  :-[ (che sia il caldo?)

Supponiamo di avere una normale variabile di tipo string dichiarata nella sezione public di un form (o di un'altra unit "usata" dal form) che viene aggiornata in maniera asincrona.

Come si fa a mostrarla sul form ?

Non la si può assegnare semplimente alla Caption di una label o al Text di una editbox poichè il valore mostrato non terrebbe conto dell'aggiornamento asincrono della variabile stessa.
Occorrerebbe passare il puntatore, ma come si fa ?

Grazie fin d'ora.
Titolo: Re:Visualizzare una variabile in un form
Inserito da: nomorelogic - Luglio 18, 2015, 10:38:27 am
dovresti dichiarare la variabile come property, ad esempio dichiarandola così:

Codice: [Seleziona]
public
  property Variabile: string read FVariabile write SetVariabile;

a questo punto usa la combinazione di tasti: Ctrl+Shift+C
verranno creati:
- una variabile FVariabile
- una procedura SetVariabile

ora, in SetVariabile puoi fare l'aggiornamento come vuoi:

Codice: [Seleziona]
procedure TForm1.SetVariabile(AValue: string);
begin
  if FVariabile=AValue then Exit;
  FVariabile:=AValue;
  Caption:=FVariabile;
end;
Titolo: Re:Visualizzare una variabile in un form
Inserito da: mizar - Luglio 18, 2015, 11:05:59 am
Il problema è che il codice che aggiorna la variabile non è / non voglio che sia a conoscenza dell'esistenza del form (disaccoppiamento Business Logic dalla presentazione) e quindi manca la possibilità di chiamare una procedura definita nel form o anche di "dire" al form di aggiornarsi, ovvero di ridisegnare il componente.

Ho "risolto" cmq usando un MemDataSet, un DataSource e un DBText.
La business logic aggiorna un campo del MemDataSet e il resto viene da solo.

Probabilmente ho usato un cannone per sparare a un moscerino  :) , ma dato che sono presenti altri dataset nella business logic non credo di aver appesantito più di tanto.