Fórum Pagecontrol ? #323423
15/06/2006
0
No form basico nao tenho PAgecontol e no form herdado eu tenho.
no form basico eu crio um laco para verificar os controles e habilitalos e desabilitalos, como eu faco para saber a quantidade de controle e a quantidade de paginas de um pagecontrol.
esta quase funcionando.
valeu !!!!!!!!!!!!!!!!!!!!
Pereiramarcos
Curtir tópico
+ 0Posts
15/06/2006
Adriano Santos
procedure TForm1.Button2Click(Sender: TObject); var I, J: Integer; Conta: Integer; begin Conta := 0; ListBox1.Items.Clear; for I := 0 to PageControl1.PageCount - 1 do begin Conta := 0; for J := 0 to PageControl1.Pages[I].ControlCount - 1 do Inc(Conta); ListBox1.Items.Add(PageControl1.Pages[I].Name + ´: ´ + IntToStr(Conta) + ´ comps.´); end; end;
[quote:06a829da2f=´Contar: É isso que precisa?´]
[img:06a829da2f]http://www.doiscliques.com/pub/contar_comps.jpg[/img:06a829da2f]
[/quote:06a829da2f]
Gostei + 0
15/06/2006
Pereiramarcos
uma pergunta como faria se no form nao tivesse o pagecontrol, mas no form Herdado tivesse, e dentro do tabsheet tivese algums DBedits, como voce desabilitaria nao estou conseguindo, o delphi dis que nao existe nao esta definido o page control.
entendi o seu exemplo vou tentar.
obrigado mais uma vez!!!!!!!!!!!
Gostei + 0
15/06/2006
Adriano Santos
Partindo do meu exemplo anterior, vc pode fazer um For no Form e localizar o PageControl, e dentro deste for voce insere os que já passei antes, veja:
procedure TForm1.Button2Click(Sender: TObject); var I, J, Y: Integer; Conta: Integer; ContaDbedit: Integer; begin Conta := 0; ContaDbedit := 0; ListBox1.Items.Clear; for Y := 0 to Form1.ComponentCount - 1 do begin if Components[Y] is TPageControl then begin for I := 0 to TPageControl(Components[Y]).PageCount - 1 do //for I := 0 to PageControl1.PageCount - 1 do begin Conta := 0; for J := 0 to PageControl1.Pages[I].ControlCount - 1 do begin if (PageControl1.Pages[I].Controls[J] is TDBEdit) then begin TDbEdit(PageControl1.Pages[I].Controls[J]).Enabled := False; Inc(ContaDbedit); end; Inc(Conta); end; ListBox1.Items.Add(PageControl1.Pages[I].Name + ´: ´ + IntToStr(Conta) + ´ comps.´); end; end; end; if ContaDbedit > 0 then ListBox1.Items.Add(IntToStr(ContaDbedit) + ´ DbEdits encontrados´); end;
Gostei + 0
16/06/2006
Pereiramarcos
Partindo do meu exemplo anterior, vc pode fazer um For no Form e localizar o PageControl, e dentro deste for voce insere os que já passei antes, veja:
procedure TForm1.Button2Click(Sender: TObject); var I, J, Y: Integer; Conta: Integer; ContaDbedit: Integer; begin Conta := 0; ContaDbedit := 0; ListBox1.Items.Clear; for Y := 0 to Form1.ComponentCount - 1 do begin if Components[Y] is TPageControl then begin for I := 0 to TPageControl(Components[Y]).PageCount - 1 do //for I := 0 to PageControl1.PageCount - 1 do begin Conta := 0; for J := 0 to PageControl1.Pages[I].ControlCount - 1 do begin if (PageControl1.Pages[I].Controls[J] is TDBEdit) then begin TDbEdit(PageControl1.Pages[I].Controls[J]).Enabled := False; Inc(ContaDbedit); end; Inc(Conta); end; ListBox1.Items.Add(PageControl1.Pages[I].Name + ´: ´ + IntToStr(Conta) + ´ comps.´); end; end; end; if ContaDbedit > 0 then ListBox1.Items.Add(IntToStr(ContaDbedit) + ´ DbEdits encontrados´); end;
Adriano, cara valeu mesmo, minha duvida e o seguite no seu codigo eu nao consigo duas coisas
ate esta linha eu cheguei :
if Controls[i] is TPageControl then
begin
for j := 0 to TPageControl(Components[i]).PageCount - 1 do
for k := 0 to (Controls[i] as TPageControl).ControlCount - 1 do
begin
if (TPageControl(Components[i]).Pages[j].Controls[k] is TDBEdit) then
(Components[i].Pages[j].Controls[k] as TDBEdit).Enabled := False;
end;
end;
se eu usar Pagecontrol1 ele nao esta declarado neste form, este e o form base que servira para todo meu sistema ou quase todo. Talvez eu esteja errando num detalhe, ainda nao sou expert em delphi, mas chego lá.
muito obrigado.........
Gostei + 0
16/06/2006
Adriano Santos
Pronto, agora tem tudo genérico.
procedure TForm1.Button2Click(Sender: TObject); var I, J, Y: Integer; Conta: Integer; ContaDbedit: Integer; begin Conta := 0; ContaDbedit := 0; ListBox1.Items.Clear; for Y := 0 to Screen.ActiveForm.ComponentCount - 1 do begin if Components[Y] is TPageControl then begin for I := 0 to TPageControl(Components[Y]).PageCount - 1 do begin Conta := 0; for J := 0 to TPageControl(Components[Y]).Pages[I].ControlCount - 1 do begin if (TPageControl(Components[Y]).Pages[I].Controls[J] is TDBEdit) then begin TDbEdit(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; Inc(ContaDbedit); end; Inc(Conta); end; ListBox1.Items.Add(TPageControl(Components[Y]).Pages[I].Name + ´: ´ + IntToStr(Conta) + ´ comps.´); end; end; end; if ContaDbedit > 0 then ListBox1.Items.Add(IntToStr(ContaDbedit) + ´ DbEdits encontrados´); end;
Gostei + 0
16/06/2006
Pereiramarcos
var
i,j,k : Integer;
begin
for i := 0 to ComponentCount -1 do
begin
if Controls[i] is TDBEdit then
(Controls[i] as TDBEdit).Enabled := False ;
if Controls[i] is TDBText then
(Controls[i] as TDBText).Enabled := False ;
if Controls[i] is TRxDBLookupCombo then
(Controls[i] as TRxDBLookupCombo).Enabled := False ;
if Controls[i] is TPageControl then
begin
for j := 0 to TPageControl(Controls[i]).PageCount -1 do
for k := 0 to (Controls[i] as Tpagecontrol).Pages[j].ComponentCount -1 do
ate aqui tudo certo daqui prafrente e que fica esquesito
1 como testo se e um Tdbedit e se for como desabilito o mesmo ?
end;
end;
end;
Cara muito obrigado pela forca estou ate entendendo mais sobre type cast, e sua importancia.....
consegui chegar aqui com suas Dicas Valiosas !!!!!!!
espero poder ajudar alguem tb.. com essas duvidas.......
Gostei + 0
16/06/2006
Adriano Santos
Estou dando um FOR nas páginas no PageControl;
Com a página ´selecionada´ dou um outro FOR nos componentes/controles dela.
É neste momento que verifico sua classe, veja:
[quote:760799d797=´Teste do TDBEdit´]
//Se o componente selecionado no laço FOR por do tipo TDBEdit
//então desativa.
if [color=red:760799d797][b:760799d797](TPageControl(Components[Y]).Pages[I].Controls[J][/b:760799d797][/color:760799d797] [color=blue:760799d797][b:760799d797]IS[/b:760799d797][/color:760799d797] [color=red:760799d797][b:760799d797]TDBEdit[/b:760799d797][/color:760799d797])
[/quote:760799d797]
[quote:760799d797=´Agora desativa´] TDbEdit(TPageControl(Components[Y]).Pages[I].Controls[J]).[color=red:760799d797][b:760799d797]Enabled[/b:760799d797][/color:760799d797] := [b:760799d797]False[/b:760799d797];
[/quote:760799d797]
Confira novamente o código completo lá em cima, ou veja abaixo os novos testes de componentes que faço no laço FOR.
procedure TForm1.Button2Click(Sender: TObject); var I, J, Y: Integer; Conta: Integer; ContaDbedit: Integer; begin Conta := 0; ContaDbedit := 0; ListBox1.Items.Clear; for Y := 0 to Screen.ActiveForm.ComponentCount - 1 do begin if Components[Y] is TPageControl then begin for I := 0 to TPageControl(Components[Y]).PageCount - 1 do begin Conta := 0; for J := 0 to TPageControl(Components[Y]).Pages[I].ControlCount - 1 do begin if (TPageControl(Components[Y]).Pages[I].Controls[J] is TDBEdit) then begin TDbEdit(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; Inc(ContaDbedit); end; //TButton if (TPageControl(Components[Y]).Pages[I].Controls[J] is TButton) then TButton(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; //TLabel if (TPageControl(Components[Y]).Pages[I].Controls[J] is TLabel) then TLabel(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; //TRadioButton if (TPageControl(Components[Y]).Pages[I].Controls[J] is TRadioButton) then TRadioButton(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; Inc(Conta); end; ListBox1.Items.Add(TPageControl(Components[Y]).Pages[I].Name + ´: ´ + IntToStr(Conta) + ´ comps.´); end; end; end; if ContaDbedit > 0 then ListBox1.Items.Add(IntToStr(ContaDbedit) + ´ DbEdits encontrados´); end;
Gostei + 0
16/06/2006
Pereiramarcos
Estou dando um FOR nas páginas no PageControl;
Com a página ´selecionada´ dou um outro FOR nos componentes/controles dela.
É neste momento que verifico sua classe, veja:
[quote:8dfd51b3bc=´Teste do TDBEdit´]
//Se o componente selecionado no laço FOR por do tipo TDBEdit
//então desativa.
if [color=red:8dfd51b3bc][b:8dfd51b3bc](TPageControl(Components[Y]).Pages[I].Controls[J][/b:8dfd51b3bc][/color:8dfd51b3bc] [color=blue:8dfd51b3bc][b:8dfd51b3bc]IS[/b:8dfd51b3bc][/color:8dfd51b3bc] [color=red:8dfd51b3bc][b:8dfd51b3bc]TDBEdit[/b:8dfd51b3bc][/color:8dfd51b3bc])
[/quote:8dfd51b3bc]
[quote:8dfd51b3bc=´Agora desativa´] TDbEdit(TPageControl(Components[Y]).Pages[I].Controls[J]).[color=red:8dfd51b3bc][b:8dfd51b3bc]Enabled[/b:8dfd51b3bc][/color:8dfd51b3bc] := [b:8dfd51b3bc]False[/b:8dfd51b3bc];
[/quote:8dfd51b3bc]
Confira novamente o código completo lá em cima, ou veja abaixo os novos testes de componentes que faço no laço FOR.
procedure TForm1.Button2Click(Sender: TObject); var I, J, Y: Integer; Conta: Integer; ContaDbedit: Integer; begin Conta := 0; ContaDbedit := 0; ListBox1.Items.Clear; for Y := 0 to Screen.ActiveForm.ComponentCount - 1 do begin if Components[Y] is TPageControl then begin for I := 0 to TPageControl(Components[Y]).PageCount - 1 do begin Conta := 0; for J := 0 to TPageControl(Components[Y]).Pages[I].ControlCount - 1 do begin if (TPageControl(Components[Y]).Pages[I].Controls[J] is TDBEdit) then begin TDbEdit(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; Inc(ContaDbedit); end; //TButton if (TPageControl(Components[Y]).Pages[I].Controls[J] is TButton) then TButton(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; //TLabel if (TPageControl(Components[Y]).Pages[I].Controls[J] is TLabel) then TLabel(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; //TRadioButton if (TPageControl(Components[Y]).Pages[I].Controls[J] is TRadioButton) then TRadioButton(TPageControl(Components[Y]).Pages[I].Controls[J]).Enabled := False; Inc(Conta); end; ListBox1.Items.Add(TPageControl(Components[Y]).Pages[I].Name + ´: ´ + IntToStr(Conta) + ´ comps.´); end; end; end; if ContaDbedit > 0 then ListBox1.Items.Add(IntToStr(ContaDbedit) + ´ DbEdits encontrados´); end;
[b:8dfd51b3bc]Adriano me desculpe o transtorno, sua funcao nao da erro porem nao desabilita os objetos.
Eu humildimente acho que o erro esta em nao ser no form pai que estao os objetos.
ouseja eles estao form filho que estarao o objetos, fiz um teste e esta funcao so pega os objetos existentes no form pai, eu acho que vou desabilitar a Pagecontrol vai ficar ruim mas e o que tenho hoje, muito obrigado por dispor do seu tempo pra dar essa força. [/b:8dfd51b3bc]
Gostei + 0
16/06/2006
Pereiramarcos
begin
for j := 0 to TPageControl(Controls[i]).PageCount - 1 do
begin
for k := 0 to TPageControl(Controls[i]).Pages[j].ControlCount - 1 do
begin
if (TPageControl(controls[i]).Pages[j].Controls[k] is TDBEdit) then
TDbEdit(TPageControl(Controls[i]).Pages[j].Controls[k]).Enabled := tof;
TDbEdit(TPageControl(Controls[i]).Pages[j].Controls[k]).Color := cor;
end;
end;
end;
end;
Assim eu Coinsegui..ficou supergenerico e no form nao tenho objeto algum.............. que se interssar este e o caminho
:D
Gostei + 0
16/06/2006
Adriano Santos
if Controls[i] is TPageControl then begin for j := 0 to TPageControl(Controls[i]).PageCount - 1 do begin for k := 0 to TPageControl(Controls[i]).Pages[j].ControlCount - 1 do begin if (TPageControl(controls[i]).Pages[j].Controls[k] is TDBEdit) then begin TEdit(TPageControl(Controls[i]).Pages[j].Controls[k]).Enabled := tof; TDbEdit(TPageControl(Controls[i]).Pages[j].Controls[k]).Color := cor; end; end; end; end;
Que bom que conseguiu cara, precisando é só gritar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)