Mouse não funciona no PageControl

25/03/2018

0

Minha aplicação roda perfeito. Estou testando agora criar os forms dentro de um pagecontrol pra ficarem todas as janelas visíveis na tela principal do sistema. Consegui fazer tudo ficar show. O problema esta no funcionamento do mouse. Em campos de entrada de teclado (edits, maskedits, memos) o mouse não faz nada. Ele não mostra o cursor dentro do componente. E mesmo que eu puxe o foco com o teclado, quando clico ele não faz nada dentro do elemento. Não possiciona o cursor, não seleciona o texto. Nos demais, ele funciona normal. Radiogroup grid, tudo normal. Alguém saberia me ajudar nessa questão?
Marcello Assumpção

Marcello Assumpção

Responder

Posts

28/03/2018

Fabricio Kawata

Oi Marcello. Nesse tipo de abordagem, o Form deve ser criado no momento da criação do seu Parent, sendo assim faça o seguinte: no formulário raiz deixe apenas o PageControl, sem adicionar nenhuma TabSheet nele. Uma vez que uma TabSheet será a Parent de cada Form "filho", criaremos esses dois objetos no mesmo momento. A seguir, use o código abaixo para criar cada Form e TabSheet:<br />
<br />
var<br />
MeuForm : TForm2;<br />
MeuTabSheet : TTabSheet;<br />
begin<br />
// Cria e incorpora a TabSheet ao PageControl existente<br />
MeuTabSheet := TTabSheet.Create(PageControl1);<br />
MeuTabSheet.PageControl := PageControl1;<br />
<br />
// Cria o Form e o incorpora à TabSheet criada<br />
MeuForm := TForm2.Create(MeuTabSheet);<br />
MeuForm.Parent := MeuTabSheet;<br />
MeuForm.Align := alClient;<br />
MeuForm.BorderStyle := bsNone;<br />
MeuForm.Visible := true;<br />
MeuTabSheet.Caption := MeuForm.Caption;<br />
<br />
PageControl1.ActivePage := MeuTabSheet;<br />
end;<br />
<br />
Seguindo por essa linha, você verá que o Form é inteiramente incorporado à TabSheet, habilitando assim todos os devidos controles de mouse e teclado providos pelo Windows.<br />
<br />
Espero ter te ajudado.<br />
<br />
Abraço e bons desenvolvimentos!
Responder

28/03/2018

Fabricio Kawata

Oi Marcello. Nesse tipo de abordagem, o Form deve ser criado no momento da criação do seu Parent, sendo assim faça o seguinte: no formulário raiz deixe apenas o PageControl, sem adicionar nenhuma TabSheet nele. Uma vez que uma TabSheet será a Parent de cada Form "filho", criaremos esses dois objetos no mesmo momento. A seguir, use o código abaixo para criar cada Form e TabSheet:

var
MeuForm : TForm2;
MeuTabSheet : TTabSheet;
begin
// Cria e incorpora a TabSheet ao PageControl existente
MeuTabSheet := TTabSheet.Create(PageControl1);
MeuTabSheet.PageControl := PageControl1;

// Cria o Form e o incorpora à TabSheet criada
MeuForm := TForm2.Create(MeuTabSheet);
MeuForm.Parent := MeuTabSheet;
MeuForm.Align := alClient;
MeuForm.BorderStyle := bsNone;
MeuForm.Visible := true;
MeuTabSheet.Caption := MeuForm.Caption;

PageControl1.ActivePage := MeuTabSheet;
end;

Seguindo por essa linha, você verá que o Form é inteiramente incorporado à TabSheet, habilitando assim todos os devidos controles de mouse e teclado providos pelo Windows.

Espero ter te ajudado.

Abraço e bons desenvolvimentos!
Responder

29/03/2018

Marcello Assumpção

Oi Fabrício, eu faço quase isso.

Primeiro, eu fiz um exemplo simples, conforme seu modelo mas ainda assim o problema persiste, não altera a ocorrência do problema...

Eu fiz esses testes no Delphi 10 Seattle.

Já no meu projeto mesmo, o código é ligeiramente diferente, mas tudo funciona como no exemplo. Segue abaixo meu código:



//------------------------------------------------------------------------------
tsPrincipal := TTabSheet.Create(pcPrincipal);
tsPrincipal.Name := 'tsENTRADAS';
tsPrincipal.Caption := 'Entradas';
tsPrincipal.PageControl := pcPrincipal;
//------------------------------------------------------------------------------
frmEntradas := TfrmEntradas.create(self,LModulo);
frmEntradas.Parent := tsPrincipal;
frmEntradas.show;
frmEntradas.WindowState := wsMaximized;
frmEntradas.Align := alClient;
pcPrincipal.ActivePageIndex := pcPrincipal.ComponentCount;


O formulário é criado perfeito, funcionando ok. Ainda crio uma cópia do DataModule no formshow.

Ainda assim, o mouse não traz o foco em alguns componentes, especificamente nos de entrada de dados digitados. Ele provoca a entrada no componente, mas isso não se reflete na tela. O cursor não pisca e não habilita a edição. Eu contornei o problema no onclick do componente, forçando o foco e selecionando para por o cursor no final da seleção, usando o código abaixo:

if (Sender is TMaskEdit) then
begin
if not (Sender as TMaskEdit).Focused then
(Sender as TMaskEdit).SetFocus;
(Sender as TMaskEdit).SelStart := (Sender as TMaskEdit).SelLength + 1
end

Ficou 90% bom. Ainda não consigo clicar no meio do texto e lá posicionar o cursor.



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar