stringgrid personalizada
Amigos,
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!
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
Curtidas 0
Respostas
Fernando_ramos
01/03/2006
pessoal?
alguém!
alguém!
GOSTEI 0
Thiago Vidal
01/03/2006
uma alternativa que talvez possa funcionar para você, seria criar um TObjectList, que contém TODOS os bitmaps que precisam ser desenhados, a vantagem do ObjectList, é que ele já libera a memória (Free) de todos os objectos automaticamente quando é destruído.
segue um exemplo básico:
qualquer dúvida, estou à disposição.
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.
GOSTEI 0
Fernando_ramos
01/03/2006
amigo.
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!
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!
GOSTEI 0
Edilcimar
01/03/2006
neste caso basta diminuir a largura da coluna do stringgrid onde está a imagem
GOSTEI 0
Fernando_ramos
01/03/2006
na verdade..a imagem assume o tamanho da celula....ou seja mesmo eu diminuindo a celula ela fica com o tamanho da celula, e suponhamos q eu nao possa diminuir a celula!! sacaram!!
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!
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!
GOSTEI 0
Thiago Vidal
01/03/2006
no caso a imagem ocupou toda a celula do stringgrid, no caso se eu quizesse apenas centralizar uma imagema na celula, seria possivel?
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.
GOSTEI 0
Fernando_ramos
01/03/2006
amigo.
com certeza ajudou.
porém , antes com o StretchDraw a imagem aparecia em todos os registros, agora a imagem aparece apenas uma vez!
com certeza ajudou.
porém , antes com o StretchDraw a imagem aparecia em todos os registros, agora a imagem aparece apenas uma vez!
GOSTEI 0
Fernando_ramos
01/03/2006
amigo.
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!
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!
GOSTEI 0
Dpinho
01/03/2006
Estou utilizando a rotina acima, ficou como eu queria com o dbstringgrid, so falta eu ter a condição de colocar dois dbtext na celula, alguem sabe como fazer isto
GOSTEI 0