Obrigado por visitar a devmedia.com.br!

Precisamos de você para divulgar nossos vídeos e cursos gratuitos para a comunidade.

Se você gosta da devmedia.com.br por favor dê-nos o seu clique para o Google+ e ajude outros desenvolvedores ao redor do mundo.



Obrigado por seu apoio!
Equipe DevMedia

sair sem compartilhar (x)
DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:

Fórum DevMedia


Autor
Mensagem
Informações sobre o chamado:
Criado em: 3/9/2010 8:59:22 AM
Status deste chamado: Concluído (mensagens novas após conclusão)
Última ação ref. este chamado: Chamado resp. pelo usuario
  Ver histórico do chamado
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385592   Postado em: 3/9/2010 8:59:22 AM

  De fato um componente bem interessante e util, mas sobre o componente eu queria fazer 2 situações para o mesmo,a primeira é clicar com botão esquerdo do mouse e chama um formulário para aquele determinado registro clicado e a segunda é clicar com o botão direito em um registro e abrir um popupmenu e modifica-lo,no primeiro caso, o componente funciona, ao clicar ele aponta para o registro desejado, mas já no segundo caso, ele só pega o primeiro registro ou algum outro que eu tenha clicado antes com o botão esquerdo do mouse, resumindo, como faço para acessar aquele registro do DBCtrlGrid usando o botão direito do mouse?
ERILEY VILAGRANDE BARBOSA
 
 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
#ID: 385595   Postado em: 3/9/2010 9:22:23 AM
Este é o padrão tanto do dbgrid, como do dbctrlgrid, você seleciona o registro e depois faz alguma operação com ele, se você abre uma tabela,vem sempre por padrão o primeiro registro selecionado, caso contrario você tem que seleciona-lo usando o botão esquerdo do mouse ou as setas do teclado.

 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385607   Postado em: 3/9/2010 10:35:01 AM
Mas no caso eu ja realizei teste com o DBGrid e ao clicar com o botao direito em outro registro o foco vai para este registro desejado, sem ter clicado com o botão esquerdo neste registro, com o DBCtrlGrid tentei a mesma situação e não deu certo, quero saber se falta algo a configurar ou se tem como fazer o foco ir para aquele registro via código mesmo.
 

 
ERILEY VILAGRANDE BARBOSA
 
 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
#ID: 385611   Postado em: 3/9/2010 11:15:06 AM
Acho que não tem como setar via código, infelismente você vai ter de conviver com isso, mas porque você está usando o dbctrlgrid?

 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385622   Postado em: 3/9/2010 1:10:27 PM
Uso ele para controle de quartos  para um sistema de motel, de acordo com o número de registros no banco, porque é para 2 estabelecimentos com números de quartos diferentes, usando o mesmo sistema mas com banco de dados independentes. A idéia seria clicar com o botão esquerdo e abrir um formulário para cadastrar o cliente naquele quarto, no DBCtrlGrid já coloquei ele fazendo controle de quarto, Disponível,Ocupado ou Manutenção, mas para colocar em manutenção(Limpeza ou desativado) eu queria abrir uma PopupMenu com a opção de colocar em manutenção o quarto clicado com o botão direito. Não queria ter que abrir um outro formulário para o usuário escolher qual quarto vai por em manutenção. Exigência do cliente foi simplificar ao máximo. ERILEY você tem alguma outra sugestão de como proceder com esta idéia?

 
ERILEY VILAGRANDE BARBOSA
 
 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
#ID: 385628   Postado em: 3/9/2010 2:16:47 PM

Deu um pouco de trabalho, mas acho que tenho a solução para você.

Eu coloquei um panel dentro da primeira linha do dbctrlgrid, limpei o caption e coloquei o Align Alclient para este panel.
Depois coloquei os componentes dentro do panel.
Depois liguei o popupmenu ao panel.
Depois no evento onmousemove do panel, coloquei o seguinte código:
var
  Pt : TPoint;
begin
  Application.ProcessMessages;
  {Obtém o point no centro do Button1}
  Pt.x := panel1.Left + (panel1.Width div 2);
  Pt.y := panel1.Top + (panel1.Height div 2);
  {Converte Pt para as coordenadas da tela }
  Pt := ClientToScreen(Pt);
  Pt.x := Round(Pt.x * (65535 / Screen.Width));
  Pt.y := Round(Pt.y * (65535 / Screen.Height));
  {Simula o pressionamento do botão esquerdo do mouse}
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
  { Simula soltando o botão esquerdo do mouse }
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
end;
 
Mas atenção só funcionara se estiver em cima do panel, aqui deu certo tente ai.
Você só terá de explicar para o seu cliente que ele deve clicar na parte cinza do componente.

 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385631   Postado em: 3/9/2010 3:09:21 PM
Esta quase la, o click com o botão direito funciono, mas a outra parte de clicar com o botão esquerdo esta sendo ativado junto com ele por simular o pressionamento, que no caso eu utilizo ele para abrir um formulário para inserir o cliente no quarto,como poderia ser feito o controle diferenciando? tem como? o duplo click também é acionado, tentei aqui e não consegui.

 
ERILEY VILAGRANDE BARBOSA
 
 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
#ID: 385636   Postado em: 3/9/2010 3:47:29 PM

O panel possui o evento onDblClick. Pode utiliza-lo para exibir o formulário.


 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385638   Postado em: 3/9/2010 3:57:57 PM
mas no onMouseMove com o mouse se mexendo ele sai clicando, dando mais de um  click em cima do componente e com isso da o efeito de duplo click

 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385639   Postado em: 3/9/2010 4:00:28 PM
mas no onMouseMove com o mouse se mexendo ele sai clicando, dando varios em cima do componente e com isso da o efeito de duplo click

 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385640   Postado em: 3/9/2010 4:00:30 PM
mas no onMouseMove com o mouse se mexendo ele sai clicando varias vezes em cima do componente e com isso da o efeito de duplo click

 
ERILEY VILAGRANDE BARBOSA
 
 


País: Brasil
Estado: RS
Cidade: Alegrete
Mensagens: 700
#ID: 385642   Postado em: 3/9/2010 4:05:44 PM
Bom então você não vai poder utilizar um evento de mouse e sim de teclado:
Apenas vai ter de orientar seu cliente a teclar enter no dbctrlgrid, no evento onkeypress do dbctrlgrid ou do panel, digite:
if key = #13 then
    ShowMessage('Teste');
 
Altere a propriedade KeyPreview para True do form
 
Obs.: consegui fazer funcionar tudo sem o panel, direto no dctrlgrid:
procedure TFrmSeuForm.DBCtrlGrid1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
  Pt : TPoint;
begin
  Application.ProcessMessages;
  {Obtém o point no centro do Button1}
  Pt.x := DBCtrlGrid1.Left + (DBCtrlGrid1.Width div 2);
  Pt.y := DBCtrlGrid1.Top + (DBCtrlGrid1.Height div 2);
  {Converte Pt para as coordenadas da tela }
  Pt := ClientToScreen(Pt);
  Pt.x := Round(Pt.x * (65535 / Screen.Width));
  Pt.y := Round(Pt.y * (65535 / Screen.Height));
  {Simula o pressionamento do botão esquerdo do mouse}
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, Pt.x, Pt.y, 0, 0);
  { Simula soltando o botão esquerdo do mouse }
  Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, Pt.x, Pt.y, 0, 0);
end;
 
procedure TFrmSeuForm.DBCtrlGrid1KeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
    ShowMessage('Teste');
end;

 
Renan Gouvea Novais Vaz
 

País: Brasil
Estado: MG
Cidade: Muriaé
Mensagens: 16
#ID: 385649   Postado em: 3/9/2010 4:44:07 PM
deu certo obrigado, depois quando não houver outras prioridades no sistema, eu tente fazer algumas modificações e faça mais testes.

 
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03