Código
// Para alterar o Tab por Enter, inclusive reativar depois o Enter dentro de RxDBLookUpCombo.
//1º - No evento OnShow do formulário principal coloque o seguinte código:
Application.OnMessage := ProcessaMsg;
//2º - Suba até a seção "Type" da unit // aqui eu alterei da seção "private", onde o FABRÍCIO DESBESEL
// http://www.fabricio.pro.br/default.asp?ACT=5&content=41&id=1&mnu=1
// originalmente havia postado para a seção "Type" para que possa ser
// acessada mais tarde de outros "forms".
//3º - Abaixo da palavra "Type" após os outros Procedimentos, digite este procedimento:
procedure ProcessaMsg(var Msg: TMsg; var Handled: Boolean);
//4º - Com o cursor do mouse posicionando na linha que você acabou de digitar, pressione
//as teclas CTRL+SHIFT+C
//Isso montará a estrutura do procedimento.
//5º - Copie o código abaixo para o procedimento que você acabou de criar (entre Begin e End;).
if Msg.message = WM_KEYDOWN then
if not (Screen.ActiveControl is TCustomMemo) and
not (Screen.ActiveControl is TButtonControl) then
begin
if not (Screen.ActiveControl is TCustomControl) then
begin
if Msg.wParam = VK_Down then
Msg.wParam := VK_Tab;
if Msg.wParam = VK_UP then
begin
Msg.wParam := VK_CLEAR;
Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
end;
end;
if Msg.wParam = VK_Return then
Msg.wParam := VK_Tab;
end;
// 6º Na Cláusula "Uses" adicione StdCtrls ( caso não exista ).
// Feito isso seu sistema já trabalha com o ENTER no lugar do TAB e também com as Setas do Teclado.
// Esse procedimento, no entanto, desabilita o ENTER dentro de um RxDBLookUpCombo.
// Mas queimando muitos neurônios, e depois de não achar uma dica na rede acabei criando essa solução.
// ( LEMBRANDO QUE ESTOU USANDO O DELPHI 5 )
// Dentro do Form onde está usando o "RxDBLookUpCombo" crie outro procedimento semelhante ao citado acima.
// No evento "OnShow" crie o seguinte código :
Application.OnMessage := MudaTeclaMsg;
// Na seção "Type" crie esse procedimento :
procedure MudaTeclaMsg(var Msg: TMsg; var Handled: Boolean);
// Com o cursor do mouse posicionado na linha que você acabou de digitar, pressione
// as teclas CTRL+SHIFT+C
// Copie o código abaixo para o procedimento que você acabou de criar
// (entre Begin e End;).
if Msg.message = WM_KEYDOWN then
if not (Screen.ActiveControl is TCustomMemo) and
not (Screen.ActiveControl is TButtonControl) then
begin
if not (Screen.ActiveControl is TCustomControl) then
begin
if Msg.wParam = VK_Down then
Msg.wParam := VK_Tab;
if Msg.wParam = VK_UP then
begin
Msg.wParam := VK_CLEAR;
Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
end;
end;
if Msg.wParam = VK_Return then // Observe que ao Teclar Enter numa
Keybd_event(VK_TAB,0,0,0); // linha do RxDBLookUpCombo, ela será
// interpretada como a Tecla TAB e automaticamente
// carregará o conteúdo da Tabela em foco.
end; // Aqui , não sei como, o "Enter" é Desativado, mas para reativar
// coloque o seguinte procedimento no "OnClose" do "Form" onde está o
// RxDBLookUpCombo"
Application.OnMessage := (Nome_do_Form_Principal).ProcessaMsg;
// Esta linha se refere ao seu Form Principal e o "Enter" será novamente reativado.
// gavel@ig.com.br ( comecei a desafiar o Delphi a apenas 35 Dias ) :-)
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009