Desabilitar tabSheet do pageControl mantendo alguns componentes ativos
Olá boa tarde, tenho uma tabsheet com vários componentes e gostaria que todos os componentes menos um ficassem inativos, eu poderia usar enabled false nos componentes que desejasse inativos mas ficam cinza e ruim de ver os dados, se desabilitar o edit do datasource apesar de não ter escrita pode se clicar nos componentes ativando eventos como on enter e on exit. Qual a melhor forma de resolver este problema. Obs componente que desejo deixar ativo é um edit.
Francisco Júnior
Curtidas 0
Melhor post
Raimundo Pereira
16/06/2016
Talvez Tpanel. Dentro de um Tpanel. Resolva
GOSTEI 1
Mais Respostas
Rafael Bosco
16/06/2016
Olá Francisco, há várias maneiras de resolver isso, você pode colocar eles como:
SeuComponente.ReadOnly := True; // isso faz com que o componente não execute nada, e você não consegue alterar nada também Edit1.ReadOnly := False; //no caso do edit que você deseja, ele permanecerá ativo e Editavél
GOSTEI 0
Francisco Júnior
16/06/2016
O problema é que desta forma poderei entrar e sair nos outros componentes ativando eventos, se setar o enabled dos componentes false eles ficam cinzas e se setar o tabsheet false não fica cinza mas também deixo de ter acesso ao edit
GOSTEI 0
Francisco Júnior
16/06/2016
Olá amigo p2 também não resolveu, eu sei que isso pode ser feito pois já vi em um programa o problema é como fazer...
GOSTEI 0
Francisco Júnior
16/06/2016
Depois de muito bater cabeça resolvi assim se interessar a alguém
//no evento onexit do edit2
//não sei porque o delphi não aceita o comando if not dm.IBFuncionario.State in [dsEdit,dsInsert] then ou if dm.IBFuncionario.State not in [dsEdit,dsInsert] then então coloquei da //forma abaixo
if dm.IBFuncionario.State in [dsEdit,dsInsert] then
else
begin
if not ((ActiveControl.ClassName = 'TBitBtn') or (ActiveControl.ClassName = 'TTabSheet')) then
edit2.SetFocus;
end;
//no evento onexit do edit2
//não sei porque o delphi não aceita o comando if not dm.IBFuncionario.State in [dsEdit,dsInsert] then ou if dm.IBFuncionario.State not in [dsEdit,dsInsert] then então coloquei da //forma abaixo
if dm.IBFuncionario.State in [dsEdit,dsInsert] then
else
begin
if not ((ActiveControl.ClassName = 'TBitBtn') or (ActiveControl.ClassName = 'TTabSheet')) then
edit2.SetFocus;
end;
GOSTEI 0
Raimundo Pereira
16/06/2016
Olá amigo p2 também não resolveu, eu sei que isso pode ser feito pois já vi em um programa o problema é como fazer...
Veja se ajuda.
Código
procedure TForm1.BlockClick(Sender: TObject);
begin
Panel2.Enabled:=FALSE;
end;
[img:descricao=Estrutura 1]https://uploaddeimagens.com.br/imagens/1-jpg--3761[/img]
[img:descricao=Resultado]https://uploaddeimagens.com.br/imagens/2-png--1875[/img]
GOSTEI 0