Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: ffabio - Maggio 26, 2016, 12:17:56 pm

Titolo: Viewing a memo field type in dbgrid
Inserito da: ffabio - Maggio 26, 2016, 12:17:56 pm
Ciao ragazzi sto cercando di visualizzare un campo memo in una dbgrid .

Ho un campo note, mi piacerebbe visualizzarlo tutto magari con le scol bar per poterlo
leggerlo.

Ho trovato questo codice : ma mi da errore Dec (R.Bottom, 2);
identifier not foud R ????

qualcuno ha qualche idea ???

Procedure TForm1.DBGrid1DrawColumnCell (Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
A: TRect;
begin
A: = Rect;
Dec (R.Bottom, 2);
if Column.Field = Table1Memo Then
begin
if not (in gdSelected State) then
DBGrid1.Canvas.FillRect (Rect);
DBGrid1.Canvas.TextRect (R, R.Left, R.Top,
Table1Memo.AsString, Integer (AlignmentFlags_WordBreak));
end;
end;
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: Stilgar - Maggio 26, 2016, 01:20:26 pm
Prova a rinominare la variabile a in r 😊
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: xinyiman - Maggio 26, 2016, 01:20:55 pm
Consiglio spassionato, evita come la peste i memo dentro una grid. Sono brutti da vedere e difficili da gestire. Piuttosto fai un cast del campo e fallo diventare un varchar di mille caratteri ad esempio.
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: ffabio - Maggio 26, 2016, 02:03:01 pm
xinyiman dici ???? ma riesco a fare la cella piu' corta su piu' righe e scorrevole ???
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: xinyiman - Maggio 26, 2016, 02:06:10 pm
Questo non te lo so dire. non ne ho mai avuto necessità. Altrimenti metti una TMemo fuori dalla griglia e la popoli al cambio di riga della griglia. Poi quando ottieni un onchange sulla TMemo automaticamente ne salvi il contenuto nel campo che visualizzi attraverso la memo. Non è elegantissimo ma fa il suo lavoro dignitosamente e così non ti serve neanche il cast
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: Stilgar - Maggio 26, 2016, 10:29:38 pm
Come è andato il cambio della variabile?
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: ffabio - Maggio 27, 2016, 08:37:44 am
Ciao Stilgar ma .... si quella era ok

poi mi dava errore su Table1Memo ..... :-\ :-\ :-\ :-\
e non saprei cosa vuole ... mi rimane sempre il dubbio di come sarebbe venuto.


Adesso provo seguire la strada di xinyiman .
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: Stilgar - Maggio 27, 2016, 01:51:39 pm
Citazione
poi mi dava errore su Table1Memo .....

Che errore ti dava?
Titolo: Re:Viewing a memo field type in dbgrid
Inserito da: Avogadro - Maggio 28, 2016, 06:02:11 am
" evita come la peste i memo dentro una grid. Sono brutti da vedere e difficili da gestire"

Concordo.

Personalmente io risolvo così: non metto i campi meno nella dbgrid, setto la medesima  a "read only" e per l'editing mi poggio su una form dove utilizzo l'oggetto memo per editare i campi in cui è richiesto molto testo.

Questo approccio si è rivelato molto piu' comodo che stare li a fare editing nelle stiminzite righe della dbgrid.

E' possibile gestire sia l'ampiezza, sia l'altezza delle righe di una dbgrid in maniera tale che il testo sia intermente visibile ed editabile a run-time  e se serve posso postare il codice che ho usato; purtuttavia questo approccio, seppur comodo, diventa pesanate quando si hanno molti record da scorrere , per applicazioni in remoto la cosa diventa ingestibile se non si ha una rete adeguata.

In sintesi: mettere sulla db grid solo i campi essenziali (e magari metterla read only per prevenire modifiche accidentali dei dati); per l'edit poggiarsi su una form che si apre a run time usando in essa i componenti dell' ide che sono molto comodi, memo* e scroll box compresi.

Unica difficoltà: ho problemi con il rich text; sulla libreria RX di Delphi c'era un buon componente rich text ma non trovo la versione per Lazarus.

Saluti


* per passare il testo dal campo al memo e viceversa basta "vedere" entrambi come una stringa di caratteri.