Fórum Simular a tecla CTRL ao clicar o DbGrid #289232
23/07/2005
0
Sabemos que o usuário , para selecionar dois os mais registros tem que segurar a tecla CTRL.
:idea: :idea: :idea: :idea: :idea:
[b:a44d72d4b2]Pensei em simular o pressionamento da tecla CTRL toda vez que o usuário clicar na Grade[/b:a44d72d4b2]
:arrow: :arrow: :arrow:
Então escrevi o código abaixo:
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin keybd_event(VK_CONTROL,0,0,0); // Ctrl Release end;
:cry: :cry: :cry: :cry: :cry: :cry:
O Problema , é que funciona bem , mas ao fechar o aplicativo, o Computador fica Doido... Parece que o CTRL continua ativado , mesmo após a finalização do executável... [b:a44d72d4b2]Isto é incrível ... Teste para conferir[/b:a44d72d4b2]
[b:a44d72d4b2]Quem quiser mais detalhes pode fazer o teste e muito interresante (Não esqueça das opções DgMultSelect em True e dgAlwaysShowSelection := true e dgRowSelect, Também em True[/b:a44d72d4b2]
:lol: :lol: :lol: :lol:
[b:a44d72d4b2]Seguindo esta linha de raciocíneo , alguem tem alguma observação a fazer sobre o que foi exposto[/b:a44d72d4b2]
:lol: :lol: :lol: :lol:
[b:a44d72d4b2]Ou ainda , alguem tem uma outra idéia ou ja fez algo parecido , quando se trabalhou com vários Registros seleconados simultaneamente na Grid[/b:a44d72d4b2]
Estou ansioso por resposta , pois ja faz um tempo que estou com este problema
Obrigado.....
Marco Salles
Curtir tópico
+ 0Posts
23/07/2005
Carlosrm
Se a questão é exclusivamente fazer multiseleção na grid, sem usar o CTRL, eu resolvi meio na marretada assim, usando o W98, D6:
No evento OnMouseUp da grid,
procedure ...MouseUp... begin if (button = mbRight) then if (dbgrid1.fields[0].AsString = ´ ´ ) then dbgrid1.fields[0].AsString := ´X´ else dbgrid1.fields[0].AsString := ´ ´; end;
O primeiro campo que aparece na grid, no meu caso, é o campo que vai defnir se está ou não selecionado. Depois é só filtrar, usar sql, manipular o relatório... antes de usar, imprimir.
Eu preferi usar o botão direito para selecionar (ou não) um registro, pois assim o usuário pode continuar usando o botão esquerdo sem marcar/desmarcar as seleções. E ignorei solenemente a propriedade Multiselect. Num volume de 1000 registros não teve problemas. Não digo nada para outras situações.
carlosrm :wink:
Gostei + 0
23/07/2005
Carlosrm
só complementando:
Se eu me lembro bem, num dos seus sistemas os usuários terão pouco espaço para usar o mouse.
Nesse caso, o uso de qualquer tecla de função resolveria facilmente, ao invés de usar o botão direito do mouse.
|sso, supondo que minha sugestão seja útil...he he he ...
carlosrm :wink:
Gostei + 0
23/07/2005
Marco Salles
[b:f7f8251d6c]carlosrm , muitissimo obrigado pela sua sugestão[/b:f7f8251d6c]... e veja se foi isto que eu entendi::::
se foi isto que eu entendi , é uma estrategia a ser considerada , apesar deu me sentir fragilizado , não conseguindo simular o pressionamento da tecla CTRL sobre o GRID..... :cry: :cry: :cry: :cry:
Alem de não conseguir , obtive um comportamento esquesito, como eu coloquei na mensagem anterior:::
Código: procedure TForm1.DBGrid1CellClick(Column: TColumn); begin keybd_event(VK_CONTROL,0,0,0); // Ctrl Release end;
sobre a simulação de teclas , isto pode ser verificado em:
http://www.codeproject.com/system/keyboard.asp
realmente , voce esta com uma memoria vertigiosa , mas este sistema do presente tópico , faz parte de um outro programa... [b:f7f8251d6c]E esta dúvida , esta me deixando impaciente [/b:f7f8251d6c], :cry: :cry: :cry:
Gostei + 0
24/07/2005
Marco Salles
consegui marcar usando o click do teclado
procedure TForm1.Query1BeforeScroll(DataSet: TDataSet); begin dBgRID1.SelectedRows.CurrentRowSelected:=true; keybd_event(VK_CONTROL,0,0 , 0);// Ctrl end;
procedure TForm1.Query1AfterScroll(DataSet: TDataSet); begin DbGrid1.SelectedRows.CurrentRowSelected:=true; keybd_event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); end;
O Problema agora , é que apos marcado , não consigo desmarcar :cry: :cry: :cry: :cry: :cry:
a propriedade BookMarkList Infelismente parece ser ReadOnly , alem disso eu não conheço nen um método de Add e elinação dos Regsitros marcados :cry: :cry: :cry: :cry: :cry:
Alguem tem uma idéia como desmarcar os registros marcados...
por favor....
Gostei + 0
25/07/2005
Bruno Belchior
DataSet.First; while not DataSet.Eof do begin DbGrid1.SelectedRows.CurrentRowSelected := True; DataSet.Next; end;
Gostei + 0
26/07/2005
Marco Salles
DataSet.First; while not DataSet.Eof do begin DbGrid1.SelectedRows.CurrentRowSelected := True; DataSet.Next;
eu gostaria de selecionar item a item de acordo com o clik do mouse sobre o registro do Grid...Isto eu ja ate consegui como me expressei anteriormente.Inclusive uso a propriedade boolean CurentRowSelect
O Problema é desmarcar esses items..Assim o usuário clica para marcar e clica novamente para desmarcar ...e vice-versa..
Gostei + 0
27/07/2005
Isabelct
Tente assim:
DbGrid1.SelectedRows.CurrentRowSelected := not DbGrid1.SelectedRows.CurrentRowSelected;
Ou seja, a cada click no DBGrid, inverte o status de CurrentRowSelected.
Gostei + 0
27/07/2005
Marco Salles
Não sei aonde voce esta sugerindo colocar este código :?: :?: :?:
e qual evento :?: :?: :?:
Mas acho que ja tentei isto :cry: :cry: :cry:
procedure TForm1.Query1BeforeScroll(DataSet: TDataSet); begin dBgRID1.SelectedRows.CurrentRowSelected:=not dBgRID1.SelectedRows.CurrentRowSelected; keybd_event(VK_CONTROL,0,0 , 0);// Ctrl end;
Código:
procedure TForm1.Query1AfterScroll(DataSet: TDataSet); begin DbGrid1.SelectedRows.CurrentRowSelected:=true; keybd_event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); end;
[b:5d00d1b1bc]mas vou tentar novamente eu posto a seguir...[/b:5d00d1b1bc]
Gostei + 0
27/07/2005
Marco Salles
Resolvo de um lado , da erro de outro e assim vai :cry: :cry: :cry:
[b:e6cf7ef97d]Marcar e desmarcar , no cilk de um mouse aparentemente eu consegui...[/b:e6cf7ef97d]
Mas para isto , foi necessárioo, simular o Pressionamento da Tecla CTRL
quando se clica na grid atravez desta Instrução
procedure TForm1.Query1BeforeScroll(DataSet: TDataSet); begin dBgRID1.SelectedRows.CurrentRowSelected:=not dBgRID1.SelectedRows.CurrentRowSelected; //aqui simulo o pressionamento da Tecla CTRL keybd_event(VK_CONTROL,0,0 , 0);// Ctrl end;
[b:e6cf7ef97d]o problema é que este comando , fica ativado e mesmo após o encerramento do aplicativo , o Computador se comporta como se a tecla CTRL estivesse pressionado...[/b:e6cf7ef97d]
Pesquisei no forum e achei uma dica de Liberar a tecla CTRL e usei esta dica no codigo abaixo
procedure TForm1.Query1AfterScroll(DataSet: TDataSet); begin DbGrid1.SelectedRows.CurrentRowSelected:=true; //Libera a tecla CTRL.. Pelo menos é o que a dica fala keybd_event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP
end;
so que para minha infelicidade , este código de liberar o pressionamento da tecla CTRL , não acontece :cry: :cry: :cry: :cry:
Então eu apelo , para quem souber uma instrução , que simule o pressionamento da tecla CTRL e saiba também fazer o processo oposto
, isto é liberar esta tecla...
To ha cinco dias.... :cry: :cry: :cry: :cry:
Gostei + 0
16/06/2015
Michael Gurraro
Resolvo de um lado , da erro de outro e assim vai :cry: :cry: :cry:
Marcar e desmarcar , no cilk de um mouse aparentemente eu consegui...
Mas para isto , foi necessárioo, simular o Pressionamento da Tecla CTRL
quando se clica na grid atravez desta Instrução
procedure TForm1.Query1BeforeScroll(DataSet: TDataSet);
begin
dBgRID1.SelectedRows.CurrentRowSelected:=not dBgRID1.SelectedRows.CurrentRowSelected;
//aqui simulo o pressionamento da Tecla CTRL
keybd_event(VK_CONTROL,0,0 , 0);// Ctrl
end;
o problema é que este comando , fica ativado e mesmo após o encerramento do aplicativo , o Computador se comporta como se a tecla CTRL estivesse pressionado..
Pesquisei no forum e achei uma dica de Liberar a tecla CTRL e usei esta dica no codigo abaixo
procedure TForm1.Query1AfterScroll(DataSet: TDataSet);
begin
DbGrid1.SelectedRows.CurrentRowSelected:=true;
//Libera a tecla CTRL.. Pelo menos é o que a dica fala
keybd_event(VK_CONTROL, , KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;
so que para minha infelicidade , este código de liberar o pressionamento da tecla CTRL , não acontece :cry: :cry: :cry: :cry:
Então eu apelo , para quem souber uma instrução , que simule o pressionamento da tecla CTRL e saiba também fazer o processo oposto
, isto é liberar esta tecla...
To ha cinco dias.... :cry: :cry: :cry: :cry:
Boa tarde, já tentou passar o seguinte parametro:
keybd_event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
Aparentemente para limpar o " Ctrl " precisa passar o " $45 ".
Estou com o mesmo problema, pois quando disparo a função que simula a tecla clicada não para mais, mesmo saindo fora do GRID.
Esse evento citado está no FormClose para liberar o " Ctrl ".
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)