já estou algum tempo para resolver este probleminha...
eu uso o DBLookupComboBox para pegar dados de uma tabela e gravar em outra...até aqui beleza...
quando o foco entra no DBLookupComboBox e ai aparece a seleção dos dados eu tenho opção para digitador no proprio DBLookupComboBox e dar enter(funciona beleza) e também tenho a opção de abrir com o mouse e selecionar pelas setas no teclado.....aqui é que ta o problema...quando eu uso o mouse funciona perfeito, mas quando uso as setas e dou enter ele não seleciona o registro alias não seleciona nada...
Uma vez o Jonas me passou esta dica:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Db, DBTables, StdCtrls, DBCtrls, Grids, DBGrids, RxLookup;
type
TForm1 = class(TForm)
DBLookupComboBox1: TDBLookupComboBox;
Edit1: TEdit;
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
procedure FormKeyPress(Sender: TObject; var Key: Char);
procedure FormActivate(Sender: TObject);
//
procedure MudarComEnter(var Msg: TMsg; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.MudarComEnter(var Msg: TMsg; var Handled: Boolean);
begin
If not ((Screen.ActiveControl is TCustomMemo) or // se não for um memo
(Screen.ActiveControl is TDBLookupComboBox) or // se não for um DbLookup
(Screen.ActiveControl is TCustomGrid) or // se não for uma grid o controle mudara com enter
(Screen.ActiveForm.ClassName = 'TMessageForm')) then
begin
If Msg.message = WM_KEYDOWN then
begin
Case Msg.wParam of
VK_RETURN,VK_DOWN : Screen.ActiveForm.Perform(WM_NextDlgCtl,0,0); //,VK_TAB
VK_UP : Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);
end;
end;
end;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
If Key = #13 then
Begin
Key := #0;
Perform(WM_NextDlgCtl, 0, 0);
End;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Application.OnMessage := MudarComEnter;
end;
end.
Form1.KeyPreview=true;
Ela só funciona..se eu tirar o codigo do enter no OnKeyPress do Form1, neste caso eu teria usar o Tab no lugar no enter, porem não é bem aceito pelos usuarios...
Teria como fazer funcionar com a seleção feita pelas setas e em seguida com o enter??
Pergunta
Eder
Ola..
já estou algum tempo para resolver este probleminha...
eu uso o DBLookupComboBox para pegar dados de uma tabela e gravar em outra...até aqui beleza...
quando o foco entra no DBLookupComboBox e ai aparece a seleção dos dados eu tenho opção para digitador no proprio DBLookupComboBox e dar enter(funciona beleza) e também tenho a opção de abrir com o mouse e selecionar pelas setas no teclado.....aqui é que ta o problema...quando eu uso o mouse funciona perfeito, mas quando uso as setas e dou enter ele não seleciona o registro alias não seleciona nada...
Uma vez o Jonas me passou esta dica:
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Db, DBTables, StdCtrls, DBCtrls, Grids, DBGrids, RxLookup; type TForm1 = class(TForm) DBLookupComboBox1: TDBLookupComboBox; Edit1: TEdit; DataSource1: TDataSource; Table1: TTable; DBGrid1: TDBGrid; procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormActivate(Sender: TObject); // procedure MudarComEnter(var Msg: TMsg; var Handled: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.MudarComEnter(var Msg: TMsg; var Handled: Boolean); begin If not ((Screen.ActiveControl is TCustomMemo) or // se não for um memo (Screen.ActiveControl is TDBLookupComboBox) or // se não for um DbLookup (Screen.ActiveControl is TCustomGrid) or // se não for uma grid o controle mudara com enter (Screen.ActiveForm.ClassName = 'TMessageForm')) then begin If Msg.message = WM_KEYDOWN then begin Case Msg.wParam of VK_RETURN,VK_DOWN : Screen.ActiveForm.Perform(WM_NextDlgCtl,0,0); //,VK_TAB VK_UP : Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0); end; end; end; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin If Key = #13 then Begin Key := #0; Perform(WM_NextDlgCtl, 0, 0); End; end; procedure TForm1.FormActivate(Sender: TObject); begin Application.OnMessage := MudarComEnter; end; end.Ela só funciona..se eu tirar o codigo do enter no OnKeyPress do Form1, neste caso eu teria usar o Tab no lugar no enter, porem não é bem aceito pelos usuarios...
Teria como fazer funcionar com a seleção feita pelas setas e em seguida com o enter??
Grato
Editado por EderLink para o comentário
Compartilhar em outros sites
8 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.