GARANTIR DESCONTO

Fórum Percorrer controles em PageControls que estão dentro de PageControls. #564530

24/10/2016

0

Olá pessoal...

Possuo um PageControl com 10 TabSheets. Dentro de cada TabSheet possuo outro PageControl que possui de 1 a 3 TabSheets. Necessito fazer um loop percorrendo todos os Edits que estão em todos os PageControls internos (justamente nos quais estou com dúvidas).

Comecei a escrever o código mas estou "travado".

Se alguém puder dar uma luz, agradeço.

procedure TfrmPrincipal.TabSheetIterate;
var
  i, c: byte;
  
begin

      for i := 0 to pgcPages.PageCount - 1 do
          for c := 0 to pgcPages.Pages[i].ControlCount - 1 do
            begin
              if (pgcPages.Pages[i].Controls[c] is TPageControl) then
                begin

                  
                end;

            end;
        ;
end;
Adalberto Brasaca

Adalberto Brasaca

Responder

Post mais votado

24/10/2016

Boa tarde Aldaberto!

Criei um formulário com um PageControl principal chamado PageControl1. Dentro dele criei dez abas. Dentro de cada aba criei mais um PageControl com três abas e dentro de cada aba criei três Edits. Criei um BitBtn e programei este botão assim:

procedure TForm1.PercorrePageControlClick(Sender: TObject);
var
  Contador1 : Integer;
  Contador2 : Integer;
  TabSheetExterno : Integer;
  TabSheetInterno : Integer;
  Edit : Integer;
begin
  for TabSheetExterno := 0 to Pred(PageControl1.PageCount) do
  begin
    PageControl1.Pages[TabSheetExterno].Caption := FormatFloat('000', TabSheetExterno + 1);

    for Contador1 := 0 to Pred(PageControl1.Pages[TabSheetExterno].ControlCount) do
    begin
      if (PageControl1.Pages[TabSheetExterno].Controls[Contador1] is TPageControl) then
      begin
        PageControl1.Pages[TabSheetExterno].Controls[Contador1].Hint := FormatFloat('000', TabSheetExterno + 1);

        for TabSheetInterno := 0 to Pred(TPageControl(PageControl1.Pages[TabSheetExterno].Controls[Contador1]).PageCount) do
        begin
          TPageControl(PageControl1.Pages[TabSheetExterno].Controls[Contador1]).Pages[TabSheetInterno].Caption
            := FormatFloat('000', TabSheetExterno + 1) + '-' + FormatFloat('000', TabSheetInterno + 1);

          Edit := 0;

          for Contador2 := 0 to Pred(TPageControl(PageControl1.Pages[TabSheetExterno].Controls[Contador1]).Pages[TabSheetInterno].ControlCount) do
          begin
            if (TPageControl(PageControl1.Pages[TabSheetExterno].Controls[Contador1]).Pages[TabSheetInterno].Controls[Contador2] is TEdit) then
            begin
              Inc(Edit);
              TEdit(TPageControl(PageControl1.Pages[TabSheetExterno].Controls[Contador1]).Pages[TabSheetInterno].Controls[Contador2]).Text :=
                FormatFloat('000', TabSheetExterno + 1) + '-' +
                FormatFloat('000', TabSheetInterno + 1) + '-' +
                FormatFloat('000', Edit);
            end;
          end;
        end;
      end;
    end;
  end;
end;


Este código percorre as abas do primeiro PageControl, dentro de cada aba ele percorre os seus componentes filhos, se ele achar um PageControl, vai percorrer as abas deste PageControl, dentro das abas ele vai percorrer os seus componentes procurando edits. Este meu código está alterando o caption das abas e o texto dos edit. Precisei utilizar um recurso chamado cast, para poder alterar as propriedades dos tabsheets e edits encontratos.

vê aí se te atende.

Npi Tecnologia

Npi Tecnologia
Responder

Gostei + 5

Mais Posts

24/10/2016

Robson Morais

tente esse;

for i := pgcPages.ComponentCount -1 downto 0 do
begin
  if (pgcPages.Components[i] is TEdit) then
     (pgcPages.Components[i] as TEdit).text := ´´;
end;
Responder

Gostei + 0

24/10/2016

Adalberto Brasaca

Oi Robinho. Grato pelo retorno. Infelizmente esse código é somente para uma TabSheet. O que eu tenho é o seguinte:

Coloquei um PageControl no form. Criei 10 TabSheets. Em cada TabSheet em coloquei mais um PageControl que podem possuir de 1 a 3 TabSheets cada. Preciso percorrer todos os TqabSheets dos PageControls internos e verificar o que é TEdit (igual a terceira linha do seu código).

Abraço.
Responder

Gostei + 0

24/10/2016

Adalberto Brasaca

Acho que estou perto, mas ainda não está funcinando.

procedure TfrmPrincipal.TabSheetIterate;
var
  i, c, d: byte;
  pageControlInterno: TPageControl;
begin

      for i := 1 to pgcPages.PageCount - 1 do
            for c := 0 to pgcPages.Pages[i].ControlCount - 1 do
                  if (pgcPages.Pages[i].Controls[c] is TPageControl) then
                        begin
                              pageControlInterno := TPageControl(pgcPages.Pages[i].Controls[c]);
                              for d := 0 to pageControlInterno.PageCount - 1  do
                                    if (pageControlInterno.Pages[c].Controls[d] is TEdit) then
                                          ShowMessage('É Edit');
                                    
                       end;
         
end;
Responder

Gostei + 0

24/10/2016

Adalberto Brasaca

Oi Daniel. Boa tarde !

Era isso mesmo... SHOW DE BOLA !!! Muito, mas muito obrigado mesmo pelo retorno. Agora é somente adaptar ao que eu preciso.

Grande abraço.
Responder

Gostei + 0

24/10/2016

Npi Tecnologia

Por nada Adalberto. Se der, vota (curte) na minha resposta. Obrigado!
Responder

Gostei + 0

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

Aceitar