• 0
Sign in to follow this  
McBlade

[resolvido] Dúvida Sobre Objects Do Stringgrid

Question

Olá pessoal. Estava eu testando a propriedade Objects do StringGrid do Delphi 2007 (Trial) e atribui da seguinte forma:

StringGrid1.Objects[1,1] := BitBtn1;

Objects espera um TObject e BitBtn1 é um TObject... Contudo o botão não aparece no Grid. Embora se eu parar o mouse debugando no Objects[1,1] o Delphi me mostra exatamente os dados do BitBtn1. Maaaaaaaaasssssss (Sempre tem um "mas"), quando eu altero o Caption do BitBtn1 (Visual) o Objects[1,1] também muda...

então o Objects[1,1] virou um ponteiro do BitBtn1 só pela atribuição que eu fiz?

E se eu quisesse fazer aparecer o botão no grid aproveitando o Objects... Sem ter que fazer Rect := StringGrid1.CellRect[1,1]?

Obs.: Já tentei passar Parent e não funcionou

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 0

McBlade, acho que não vou ajudar muito, mas vou fazer alguns comentários mesmo assim.

Olá pessoal. Estava eu testando a propriedade Objects do StringGrid do Delphi 2007 (Trial) e atribui da seguinte forma:

StringGrid1.Objects[1,1] := BitBtn1;

Objects espera um TObject e BitBtn1 é um TObject... Contudo o botão não aparece no Grid. Embora se eu parar o mouse debugando no Objects[1,1] o Delphi me mostra exatamente os dados do BitBtn1. Maaaaaaaaasssssss (Sempre tem um "mas"), quando eu altero o Caption do BitBtn1 (Visual) o Objects[1,1] também muda...

então o Objects[1,1] virou um ponteiro do BitBtn1 só pela atribuição que eu fiz?

Exato. Objects guarda um TObjecs que é a classe base de todas (ou de pelo menos 99,9%) as outras classes existentes no Delphi. Com sua atribuição, você guardou uma cópia do ponteiro para a classe TButton (endereço da instância alocada para seu botão).

E se eu quisesse fazer aparecer o botão no grid aproveitando o Objects... Sem ter que fazer Rect := StringGrid1.CellRect[1,1]?

Obs.: Já tentei passar Parent e não funcionou

O que exatamente você pretende fazer?

O uso do parent funciona no sentido em que você vai ter o botão colocado dentro da área do componente StringGrid, mas isso parece meio estranho e pode ter efeitos colaterais.

O que já vi por aí (em artigos na net) é que o componente é sim desenhado dentro da célula do grid. Como é feito para mostrar bitmap's, checkbox, ....

Share this post


Link to post
Share on other sites
  • 0

Então Micheus, eu sei desenhar um componente "dentro" de uma StringGrid. Mas é que eu pensei que essa propriedade Objects facilitadia o desenho de um BitBtn, por exemplo, dentro da StringGrid sem ter que fazer...

TheRect := StringGrid1.CellRect(1,1);
BitBtn1.Left := StringGrid1.Left + TheRect.Left;
BitBtn1.Top := StringGrid1.Top + TheRect.Top;
BitBtn1.Height := TheRect.Bottom - TheRect.Top;
BitBtn1.Width  := TheRect.Right - TheRect.Left;

Há de convir que isso é chato... se eu passasse StringGrid1.Objects[1,1] := BitBtn1; e a célula assumisse / desenhasse o botão nela seria muito interessante.... ;)

Share this post


Link to post
Share on other sites
  • 0

McBlade, é meio chato sim, mas se buscar na net, é capaz de achar um componente que já faça isto.

Se você utiliza D7, a título de exemplo, dê uma olhada neste componente - NextGrid. Eu já havia citado ele lá na sessão de Links. No canto inferior esquerdo da janela você vai achar um demo, dê uma olhada no que ele tem. É um StringGrid lindo de se ver. Mas como nem tudo é perfeito e por esta versão ser gratuita, não tem justamente opção para botão. :(

Abraços

Share this post


Link to post
Share on other sites
  • 0

Hahaha... Na empresa onde eu trabalho nós desenvolvemos um componente baseado no StringGrid... ele tem até Add :D

Mas era mesmo curiosidade minha quando eu vi o D2007...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this