Wm_NextDlgCtl em Form criado dentro do TabSheet

05/02/2013

1

Pessoal,

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
Responder

Posts

05/02/2013

Joel Rodrigues

Você está fazendo isso no form interno ou no externo?
Responder

06/02/2013

Marco Salles

não seria o caso de colocar o tabstop do PageControl para false ?
Responder

06/02/2013

Lorival Filho

O Form de cadastro é feito baseado em outro, onde estou tentando executar é no formulário padrão ( que uso para todos os cadastros).

Já tinha colocado o TabStop = False no pagecontrol, mesmo assim não funcionou.
Responder

06/02/2013

Marco Salles

já tinha colocado o tabstop = false no pagecontrol, mesmo assim não funcionou.


Vc tem que utilizar a instrução

Perform(WM_NEXTDLGCTL, 0, 0);
Responder

07/02/2013

Lorival Filho

testei e ele volta para o primeiro Edit do FORM.

Lembrando que o form foi criado dentro de um TABSHEET.
Responder

07/02/2013

Joel Rodrigues

O código Perform(WM_NEXTDLGCTL, 0, 0); deve ficar em um dos eventos OnKeyPress do form de cadastro, ou seja, aquele que é aberto dentro do TabSheet?
Responder

07/02/2013

Lorival Filho

Joel,

Está dentro do OnKeyPress, mas infelizmente n funciona.
Responder

07/02/2013

Marco Salles

poste o código todo para analisarmos

não esqueça de tabstop:=false

[]sds
Responder

18/02/2013

Joel Rodrigues

E aí, amigo, como anda essa questão?
Responder

18/02/2013

Lorival Filho

pessoal desculpem a demora, tive outras prioridades.

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;
Responder
O KeyPreview do Form está setado para True?

Boa sorte e bons códigos!
Responder

18/02/2013

Lorival Filho

está setado.

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.
Responder