2017-05-31 7 views
1

problème en utilisant l'image à partir d'une liste de TImage pour dessiner un glyphe sur une cellule de données dans DBGrid:delphi image cellule DBGRID dessin fond noir

Je mettais une image bmp d'un « crochet » à la place du texte " Terminé "dans une cellule de données particulière. Cela fonctionne, mais il y a toujours de la couleur noire dans les parties de la cellule qui ne sont pas couvertes par l'image. J'ai essayé d'agrandir la taille de pixel de l'image bmp pour la faire correspondre à la taille de la cellule, mais il semble toujours redimensionner l'image pour moi. En utilisant Delphi 10.2, n'était pas un problème en D7?

ont essayé beaucoup de combinaisons de définir les couleurs d'arrière-plan, les couleurs de crayon et du pinceau, etc. Voici un exemple simple d'un code de tentative:

procedure TFUpRepWS.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
    DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin 
    with Column do begin 
    if ((FieldName = 'Done') and (Field.AsString = 'x')) then begin 
    //below shows black outside of check mark image in the cell 
     ImageList1.Draw(DBGrid1.Canvas,Rect.Left,Rect.Top,0) 
    end 
    else DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State); 
    end; 
end; 

Répondre

2

Faites la peinture cellule par défaut DefaultDrawColumnCell toujours. Cela garantira que la cellule ressemblera aux autres. Puis dessinez l'image. Essayez ceci:

procedure TFUpRepWS.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; 
    DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin 
    with Column do 
    begin 
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); 
    if ((FieldName = 'Done') and (Field.AsString = 'x')) then 
     ImageList1.Draw(DBGrid1.Canvas, Rect.Left, Rect.Top, 0); 
    end; 
end; 

Je suppose que ce que vous avez décrit se produit parce qu'il n'y a pas de code qui peint le fond de la cellule.