Wm_NextDlgCtl em Form criado dentro do TabSheet
05/02/2013
0
Os Forms da minha aplicação estão sendo criados dentro do TabSheet, até ai blz.
Porém quando tento utilizar o Wm_NextDlgCtl por exemplo, ele não muda para o próximo Edit (no meu caso) e sim para o TabSheet.
Alguém sabe como resolver?
Abs
Guerreiro
Lorival Filho
Posts
05/02/2013
Joel Rodrigues
06/02/2013
Marco Salles
06/02/2013
Lorival Filho
Já tinha colocado o TabStop = False no pagecontrol, mesmo assim não funcionou.
06/02/2013
Marco Salles
Vc tem que utilizar a instrução
Perform(WM_NEXTDLGCTL, 0, 0);
07/02/2013
Lorival Filho
Lembrando que o form foi criado dentro de um TABSHEET.
07/02/2013
Joel Rodrigues
07/02/2013
Lorival Filho
Está dentro do OnKeyPress, mas infelizmente n funciona.
07/02/2013
Marco Salles
não esqueça de tabstop:=false
[]sds
18/02/2013
Lorival Filho
segue os códigos:
CREATE no Form para definir o F3
// se o TAG estiver igual a 1 vai ser dado opção de F3 e checar ID
if TForm(self).FindComponent( 'dbe'+dsCad.DataSet.Fields[i].FieldName ) is TDBEdit then
if TDBEdit( TForm(self).FindComponent( 'dbe'+dsCad.DataSet.Fields[i].FieldName ) ).Tag = 1 then
begin
TDBEdit( TForm(self).FindComponent( 'dbe'+dsCad.DataSet.Fields[i].FieldName ) ).OnExit := OnExitIDTabela;
// executa a checagem do ID
OnExitIDTabela ( TDBEdit( TForm(self).FindComponent( 'dbe'+dsCad.DataSet.Fields[i].FieldName ) ) );
// evento para pesquisa por F3
TDBEdit( TForm(self).FindComponent( 'dbe'+dsCad.DataSet.Fields[i].FieldName ) ).OnKeyDown := F3Pesquisa;
end;
código do F3
procedure TfrmFormCadPadrao.F3Pesquisa(Sender: TObject; var Key: Word;
Shift: TShiftState);
var frmPesq : TfrmPesCadastroPadrao;
begin
inherited;
if key = 114 then
begin
if Sender is TDbEdit then
begin
sCodPesquisa := '' ;
// cadastro de entidade
if TDbEdit( Sender ).Field.FieldName = 'IDENTIDADE' then
begin
frmPesEntidade := TfrmPesEntidade.Create ( nil );
//frmPesEntidade.sCampoChave := 'IDENTIDADE';
frmPesq := frmPesEntidade;
end
// cadastro de filial
else if TDbEdit( Sender ).Field.FieldName = 'IDFILIAL' then
begin
frmPesFilial := TfrmPesFilial.Create ( nil );
frmPesq := frmPesFilial;
end
// cadastro de Tipo de Documento
else if TDbEdit( Sender ).Field.FieldName = 'IDTIPODOCUMENTO' then
begin
frmPesTipoDocumento := TfrmPesTipoDocumento.Create ( nil );
frmPesq := frmPesTipoDocumento;
end
// cadastro de Conta Caixa
else if TDbEdit( Sender ).Field.FieldName = 'IDCONTACAIXA' then
begin
frmPesContaCaixa := TfrmPesContaCaixa.Create ( nil );
frmPesq := frmPesContaCaixa;
end;
frmPesq.sCampoChave := TDbEdit( Sender ).Field.FieldName;
frmPesq.frmCadastro := Self;
frmPesq.ShowModal;
ActiveControl := nil;
if sCodPesquisa <> '' then
begin
TDbEdit( Sender ).Text := sCodPesquisa;
//TDbEdit( Sender ).
if nIdEmpPesquisa > 0 then
begin
if Pos( TDbEdit( Sender ).Field.FieldName+'.', 'IDENTIDADE.IDFILIAL.IDTIPODOCUMENTO.IDCONTACAIXA.' ) > 0 then
TDbEdit( Sender ).DataSource.DataSet.FieldByName( 'IDEMP'+Copy( TDbEdit( Sender ).Field.FieldName, 3, 50 ) ).AsInteger := nIdEmpPesquisa;
end;
Perform(WM_NEXTDLGCTL, 0, 0);
end;
frmPesq := nil;
end;
end;
end;
18/02/2013
Perivaldo Martins
Boa sorte e bons códigos!
18/02/2013
Lorival Filho
a função é executado, o problema é que quando executo Perform(WM_NEXTDLGCTL, 0, 0) o foco não vai para o próximo Edit e sim para o primeiro Edit do FORM.
Clique aqui para fazer login e interagir na Comunidade :)