Fórum Pagecontrol ? #323423

15/06/2006

0

Bom dia pessoal estou criando uma classe de formulario.
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

Pereiramarcos

Responder

Posts

15/06/2006

Adriano Santos

Bom dia pessoal estou criando uma classe de formulario. 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 !!!!!!!!!!!!!!!!!!!!


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]


Responder

Gostei + 0

15/06/2006

Pereiramarcos

e quase isso, value mesmo pelo forca.......

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!!!!!!!!!!!


Responder

Gostei + 0

15/06/2006

Adriano Santos

Não tem problema, vc terá um monte de For.
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;



Responder

Gostei + 0

16/06/2006

Pereiramarcos

[quote:e5079d24f5=´Adriano Santos´]Não tem problema, vc terá um monte de For.
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;
[/quote:e5079d24f5]


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.........


Responder

Gostei + 0

16/06/2006

Adriano Santos

Opa Pereira desculpe, mas a ultima alteração no exemplo eu fiz fora do delphi, então não me atentei ao detalhe. Troque os PageControl1 pelo TypeCast [b:0d8917c6c6]TPageControl(Components[Y]).[/b:0d8917c6c6]. Desta forma conseguirá acessar todas as propriedades e métodos do PageControl. Veja modifiquei novamente o algoritimo. Procure por nomes de componentes, não tem com exceção do ListBox1 que coloquei na tela para demonstrar, mas nem ele seria necessário. Até na lista [b:0d8917c6c6]Form1.ComponentCount[/b:0d8917c6c6] pode ser modificado retirando o nome do Form e trocando por [b:0d8917c6c6]Screen.ActiveForm.ComponentCount[/b:0d8917c6c6].

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;



Responder

Gostei + 0

16/06/2006

Pereiramarcos

procedure TFrmCadastro.Desabilita;
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.......


Responder

Gostei + 0

16/06/2006

Adriano Santos

Cara é simples TypeCast. Aqui neste trecho eu já desabilito os TDBEdit´s se ele for um componente TDBEdit.

Estou dando um FOR nas páginas no PageControl;
[b:760799d797]TPageControl[/b:760799d797](Components[Y]).[b:760799d797]PageCount[/b:760799d797]


Com a página ´selecionada´ dou um outro FOR nos componentes/controles dela.
[b:760799d797]TPageControl[/b:760799d797](Components[Y]).Pages[I].[b:760799d797]ControlCount[/b:760799d797]


É 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; 



Responder

Gostei + 0

16/06/2006

Pereiramarcos

[quote:8dfd51b3bc=´Adriano Santos´]Cara é simples TypeCast. Aqui neste trecho eu já desabilito os TDBEdit´s se ele for um componente TDBEdit.

Estou dando um FOR nas páginas no PageControl;
[b:8dfd51b3bc]TPageControl[/b:8dfd51b3bc](Components[Y]).[b:8dfd51b3bc]PageCount[/b:8dfd51b3bc]


Com a página ´selecionada´ dou um outro FOR nos componentes/controles dela.
[b:8dfd51b3bc]TPageControl[/b:8dfd51b3bc](Components[Y]).Pages[I].[b:8dfd51b3bc]ControlCount[/b:8dfd51b3bc]


É 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; 
[/quote:8dfd51b3bc]

[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]


Responder

Gostei + 0

16/06/2006

Pereiramarcos

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
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


Responder

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;
Assim eu Coinsegui..ficou supergenerico e no form nao tenho objeto algum.............. que se interssar este e o caminho :D


Que bom que conseguiu cara, precisando é só gritar.


Responder

Gostei + 0

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

Aceitar