Não deixar alternar entre tabsheets

Delphi

13/12/2003

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

Wagsilvasilva

Curtidas 0

Respostas

Tchoninho

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.

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

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


GOSTEI 0
Michael

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]


GOSTEI 0
Host

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;


GOSTEI 0
Marco Salles

Marco Salles

13/12/2003

Antes de mais nada quero agradecer a participação de [b:95e738390c]Michael e Host[/b: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

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.


GOSTEI 0
POSTAR