Newsgroup: it.comp.lang.delphi
Titolo: ondrawcolumncell textout senza risultato

Ho un problema nel gestire l'evento OnDrawColumnCell di una dbgrid 
associata. L'ambiente è Delphi 7 su WinXp Pro. Help...
In pratica qualsiasi strada scelga per scrivere in una cella (senza che 
vengano modificati i dati associati) non ottengo altro che la modifica 
del colore della stessa ma il testo non compare mai.
Ho seguito diversi esempi e provato io altre strade ma senza risultato. 
Un paio di varianti sono presenti come commenti.
Le uniche proprietà della dbgrid modificate sono:
Options ->
	dgEditing := False;
	dgRowSelect := True;
ParentFont := False;
DefaultDrawing := False;
procedure Tfrm.DBGDrawColumnCell(Sender: TObject;
   const Rect: TRect; DataCol: Integer; Column: TColumn;
   State: TGridDrawState);
var valore : string;
   fixRect : TRect;
   //bmpWidth : integer;
   //bitmap : TBitmap;
begin
   {bitmap := TBitmap.Create;
   bitmap.Canvas.Font.Size := 12;
   bitmap.Canvas.Font.Color :=clWhite;}
   fixRect := Rect;
   if (ZQ.FieldValues['quantita'] < 5) AND (Column.Title.Caption = 'No') 
then
   begin
      DBG.Canvas.Brush.Color:=clred;
      DBG.Canvas.FillRect(Rect);
      DBG.Canvas.Font.Color:=clBlack;
      DBG.Canvas.Font.Size := 10;
 
DBG.Canvas.Font.Name
 := 'Courier New';
      valore := IntToStr(ZQ.FieldValues['quantita'])+'x';
      //bitmap.Canvas.Rectangle(fixRect);
      //bitmap.Canvas.TextOut(10,5,valore);
      //DBG.Canvas.TextOut(fixRect.Left,fixRect.Top,valore);
      DBG.Canvas.TextRect(fixRect,5,5,valore);
      //DBG.Canvas.StretchDraw(fixRect,bitmap);
   end;
   DBG.DefaultDrawColumnCell(fixRect, DataCol, Column, State);
   //bitmap.Free;
end;
Dan

Prima che qualcuno ci perda tempo, riporto io stesso la soluzione 
(banale comunque un mio errore stupido):
   if (ZQ.FieldValues['quantita'] < 5) AND (Column.Title.Caption = 'No') 
then
   begin
      DBG.Canvas.Brush.Color:=clred;
      DBG.Canvas.FillRect(Rect);
      DBG.Canvas.Font.Color:=clBlack;
      DBG.Canvas.Font.Size := 10;
 
DBG.Canvas.Font.Name
 := 'Courier New';
      valore := IntToStr(ZQ.FieldValues['quantita'])+'x';
    DBG.Canvas.TextOut(fixRect.Left,fixRect.Top,valore);
      end
      else begin
         DBG.DefaultDrawColumnCell(fixRect, DataCol, Column, State);
end;	
In pratica chiamando la defaultdraw.. viene scritto il testo del field 
associato. Mi ha tratto in inganno il fatto che il colore della cella 
cambiava.
Un'altra soluzione interessante è:
    DrawText(DBG.Canvas.Handle, PChar(valore), Length(valore), fixRect, 
DT_WORDBREAK);
Che permette (avendo una riga piuttosto alta) di mandare a capo il testo 
nella cella.
Dan

 cambiava. [...]
Sì, se la memoria non mi inganna, la chiamata alla 
/DefaultDrawColumnCell/ esegue il "comportamento predefinito" della 
griglia, che provvede quindi a mettere uno sfondo, se serve (in base 
allo stato della cella, ad esempio se è selezionata) e poi riporta il testo.
Quando lavori con tecniche di "owner drawing", puoi ricorrere alla 
gestione predefinita se vuoi solamente integrare tale comportamento; se 
provvedi tu a disegnare tutto il necessario, non serve invocarla.
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)
     Non hai la possibilità di scaricare Turbo Delphi Explorer?
     Te lo spedisco io!! [
http://blog.marco.breveglieri.name/?p=48
]

Quando editi la cella pero' rimane bianca ?
--- posted by geoForum on 
http://www.delphiedintorni.it

 --- posted by geoForum on 
http://www.delphiedintorni.it
Non ho provato in quanto, non permetto la edit in questa dbgrid....
Dan