Não deixar alternar entre tabsheets
Pessoal se alguem poder me ajudar agradeço. Tenho em um formulário um Pagecontrol. E dentro deste pagecontrol tenho 2 tabsheets. O primeiro serve para exibir uma listagem dos funcionarios cadastrados em uma grid e o segundo serve para exibir os detalhes dos mesmos quando selecionado. A questao é que quando eu estive incluindo ou alterando os dados de um determinado funcionario eu quero que o usuario nao consiga visualizar (ou no caso exibir ou entrar) na primeira tabsheet até que os dados sejam salvos ou cancelados. Já tentei diversas maneiras mas não consegui resolver.
Wagsilvasilva
Curtidas 0
Respostas
Tchoninho
13/12/2003
Você precisa verificar qual modo esta a tabela inserção,edição...
Coloque o código abaixo e faça as devidas modificações que deve funcionar.
Coloque o código abaixo e faça as devidas modificações que deve funcionar.
procedure TForm1.FormShow(Sender: TObject); begin PageControl1.ActivePage:=Tabsheet1; end; procedure TForm1.PageControl1Change(Sender: TObject); begin if PageControl1.ActivePage<>Tabsheet1 then begin ShowMessage(´Você precisa salvar o registro atual´); PageControl1.ActivePage:=Tabsheet1; end; end;
GOSTEI 0
Marco Salles
13/12/2003
Volto a esse tópico antigo datado de : Sáb Dez 13, 2003 porque estou com um problema familiar ao do nosso amigo wagsilvasilva
Não estou conseguindo implementar a dica do amigo tchoninho , e o que quero e exatamente permitir ou não a saida da aba em questão atraves de um teste simples
Parecido como se faz com os formulários , que no caso no evento OnClose usamos Action := Canone ou Action := Cafree ; de acordo com a nossa necessidade
Obrigado
Não estou conseguindo implementar a dica do amigo tchoninho , e o que quero e exatamente permitir ou não a saida da aba em questão atraves de um teste simples
Parecido como se faz com os formulários , que no caso no evento OnClose usamos Action := Canone ou Action := Cafree ; de acordo com a nossa necessidade
Obrigado
GOSTEI 0
Michael
13/12/2003
Olá!
Existem basicamente três formas de se impedir a utilização de uma aba em um componente [b:31e21c143b]TPageControl[/b:31e21c143b]. Vamos a elas:
[b:31e21c143b]1) Setando a propriedade [color=blue:31e21c143b]Enabled[/color:31e21c143b] da(s) TabSheet(s) bloqueada(s) para [color=blue:31e21c143b]False[/color:31e21c143b]:[/b:31e21c143b] isso irá desativar todos os controles dentro da aba, mas ela ainda poderá ser selecionada;
[b:31e21c143b]2) Setando a propriedade [color=blue:31e21c143b]TabVisible [/color:31e21c143b]da(s) TabSheet(s) bloqueada(s) para [color=blue:31e21c143b]False[/color:31e21c143b]:[/b:31e21c143b] irá esconder as abas, não permitindo que o usuário as selecione;
[b:31e21c143b]3) Via evento [color=blue:31e21c143b]OnChanging[/color:31e21c143b]:[/b:31e21c143b] Este evento passa um parâmetro [b:31e21c143b]var [/b:31e21c143b]chamado [b:31e21c143b]AllowChange[/b:31e21c143b], onde vc pode dizer se a mudança de aba é permitida ou não. Este evento é disparado [b:31e21c143b]antes [/b:31e21c143b]da mudança, e não depois, evitando um efeito visual indesejado.
A dica do colega [b:31e21c143b]tchoninho[/b:31e21c143b] funciona. O único problema com a abordagem que ela utiliza é que a aba ´proibida´ será exibida ao usuário, e depois o foco voltará para a anterior. Pessoalmente, considero isso uma falha visual.
Usando AllowChange em conjunto com a propriedade Enabled das TabSheets, por exemplo, fica fácil restingir o acesso.
Se precisar de exemplos em código, é só postar.
[]´s[b:31e21c143b][/b:31e21c143b]
Existem basicamente três formas de se impedir a utilização de uma aba em um componente [b:31e21c143b]TPageControl[/b:31e21c143b]. Vamos a elas:
[b:31e21c143b]1) Setando a propriedade [color=blue:31e21c143b]Enabled[/color:31e21c143b] da(s) TabSheet(s) bloqueada(s) para [color=blue:31e21c143b]False[/color:31e21c143b]:[/b:31e21c143b] isso irá desativar todos os controles dentro da aba, mas ela ainda poderá ser selecionada;
[b:31e21c143b]2) Setando a propriedade [color=blue:31e21c143b]TabVisible [/color:31e21c143b]da(s) TabSheet(s) bloqueada(s) para [color=blue:31e21c143b]False[/color:31e21c143b]:[/b:31e21c143b] irá esconder as abas, não permitindo que o usuário as selecione;
[b:31e21c143b]3) Via evento [color=blue:31e21c143b]OnChanging[/color:31e21c143b]:[/b:31e21c143b] Este evento passa um parâmetro [b:31e21c143b]var [/b:31e21c143b]chamado [b:31e21c143b]AllowChange[/b:31e21c143b], onde vc pode dizer se a mudança de aba é permitida ou não. Este evento é disparado [b:31e21c143b]antes [/b:31e21c143b]da mudança, e não depois, evitando um efeito visual indesejado.
A dica do colega [b:31e21c143b]tchoninho[/b:31e21c143b] funciona. O único problema com a abordagem que ela utiliza é que a aba ´proibida´ será exibida ao usuário, e depois o foco voltará para a anterior. Pessoalmente, considero isso uma falha visual.
Usando AllowChange em conjunto com a propriedade Enabled das TabSheets, por exemplo, fica fácil restingir o acesso.
Se precisar de exemplos em código, é só postar.
[]´s[b:31e21c143b][/b:31e21c143b]
GOSTEI 0
Host
13/12/2003
Este é um outro tipo de solução, ñ vai tornar as abas invisiveis mas sim indisponiveis :
procedure TFBriCam.PagesChanging(Sender: TObject;
var AllowChange: Boolean);
begin
bMudaTab:=False;
AllowChange := bMudaTab;
end;
procedure TFBriCam.PagesChanging(Sender: TObject;
var AllowChange: Boolean);
begin
bMudaTab:=False;
AllowChange := bMudaTab;
end;
GOSTEI 0
Marco Salles
13/12/2003
Antes de mais nada quero agradecer a participação de [b:95e738390c]Michael e Host[/b:95e738390c]
Eu sabia disso , porém muitas das vezes habilitamos e desabilitamos componentes e quando o foco volta para a Aba anterior alguns componetes podem nen existir mais... É com isso erros são gerados, principalmente de focos
Contudo Tinha a necessidade de testar antes minha condição antes de permitir que se mudasse de Aba... E felismente o Evento PageControl1Changing veio como uma luva para a minha necessidade
:arrow:
[b:95e738390c]Felismente usando o Passo 3)[/b:95e738390c] Abordado por voce e posteiromente pelo Host , consigo testar a minha condição antes que a aba perca o foco...
[color=red:95e738390c]Finalmente[/color:95e738390c]
:P :P :P
[b:95e738390c]Depois da onça morta é facil pega-la pelo rabo[/b:95e738390c]
[color=darkblue:95e738390c]Muitissimo obrigado aos dois...[/color:95e738390c]
A dica do colega tchoninho funciona. O único problema com a abordagem que ela utiliza é que a aba ´proibida´ será exibida ao usuário, e depois o foco voltará para a anterior. Pessoalmente, considero isso uma falha visual.
Eu sabia disso , porém muitas das vezes habilitamos e desabilitamos componentes e quando o foco volta para a Aba anterior alguns componetes podem nen existir mais... É com isso erros são gerados, principalmente de focos
Contudo Tinha a necessidade de testar antes minha condição antes de permitir que se mudasse de Aba... E felismente o Evento PageControl1Changing veio como uma luva para a minha necessidade
:arrow:
[b:95e738390c]Felismente usando o Passo 3)[/b:95e738390c] Abordado por voce e posteiromente pelo Host , consigo testar a minha condição antes que a aba perca o foco...
3) Via evento OnChanging: Este evento passa um parâmetro var chamado AllowChange, onde vc pode dizer se a mudança de aba é permitida ou não. Este evento é disparado antes da mudança, e não depois, evitando um efeito visual indesejado.
[color=red:95e738390c]Finalmente[/color:95e738390c]
Se precisar de exemplos em código, é só postar.
:P :P :P
[b:95e738390c]Depois da onça morta é facil pega-la pelo rabo[/b:95e738390c]
[color=darkblue:95e738390c]Muitissimo obrigado aos dois...[/color:95e738390c]
GOSTEI 0
Raserafim
13/12/2003
no evento Onchanging preciso saber em qual tabsheat foi clicado.
o máximo que consegui foi qual está ativo, ou seja, o que atualmente está ativo, mas não o que o suauário quer que fique ativo.
minha condição depende de para qual o usuário quer ir.
o máximo que consegui foi qual está ativo, ou seja, o que atualmente está ativo, mas não o que o suauário quer que fique ativo.
minha condição depende de para qual o usuário quer ir.
GOSTEI 0