stringgrid personalizada
01/03/2006
0
bom dia.
Utilizo o stringgri em meu sistema para mostrar dados cadastrados no meu banco de dados. Porém agora me deparei com a necessidade de criar um coluna no meu stringgrid que mostre uma IMAGEM.
Alguém poderia me ajudar nisso?
obrigado!
Fernando_ramos
Posts
03/03/2006
Thiago Vidal
segue um exemplo básico:
interface uses ..., Contnrs; type TForm1 = class(TForm) ... private Imagens: TObjectList; end; ... implementation procedure TForm1.FormCreate(Sender: TObject); begin Imagens := TObjectList.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin Imagens.Free; end; procedure TForm1.FormShow(Sender: TObject); var bmp: TBitmap; begin while not ClientDataSet1.Eof do begin // Durante a rotina que monta o seu StringGrid, adicione as imagens ao TObjectList bmp := TBitmap.Create; // bmp.LoadFromFile ou bmp.LoadFromStream Imagens.Add(bmp); ClientDataSet1.Next; end; end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var bmp: TBitmap; begin // Na coluna que vai desenhar os itens if (ACol = 3) then begin // Pega o bitmap de volta da lista, com o typecast bmp := TBitmap(Imagens[ARow-1]); StringGrid1.Canvas.StretchDraw(Rect, bmp); end; end;
qualquer dúvida, estou à disposição.
04/03/2006
Fernando_ramos
funcionou legal!
mas ja abusando de sua boa vontade, veja se pode me ajudar.
no caso a imagem ocupou toda a celula do stringgrid, no caso se eu quizesse apenas centralizar uma imagema na celula, seria possivel?
até por que ele esticou a imagem....fazendo com que ela perdesse a resolução!
obrigado!
04/03/2006
Edilcimar
04/03/2006
Fernando_ramos
bom....eu fiz o seguinte ajustei o tamanho da imagem pelo width e height, ficou legal...so que para ficar 100¬ eu queria alinha a imagem no centro.
pq atualmente ela esta no canto superior esquerdo!
se alguem puder ajudar!
08/03/2006
Thiago Vidal
Basta trocar o StretchDraw, pelo Draw, e calcular as coordenadas para centralizar... exemplo:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var bmp: TBitmap; x, y: Integer; begin // Na coluna que vai desenhar os itens if (ACol = 3) then begin // Pega o bitmap de volta da lista, com o typecast bmp := TBitmap(Imagens[ARow-1]); x := (Rect.Right - Rect.Left + bmp.Width) div 2; y := (Rect.Bottom - Rect.Top + bmp.Height) div 2; StringGrid1.Canvas.Draw(x, y, bmp); end; end;
desculpe pela demora... espero ter ajudado.
08/03/2006
Fernando_ramos
com certeza ajudou.
porém , antes com o StretchDraw a imagem aparecia em todos os registros, agora a imagem aparece apenas uma vez!
08/03/2006
Fernando_ramos
na verdade a impressão q da é q aparece sim..para todo registro..porém todas na mesma posição. dando a impressão de q so aparece uma vez!
31/07/2006
Dpinho
Clique aqui para fazer login e interagir na Comunidade :)