Pagecontrol ?
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 !!!!!!!!!!!!!!!!!!!!
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
Curtidas 0
Respostas
Adriano Santos
15/06/2006
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?´]
[/quote:06a829da2f]
GOSTEI 0
Pereiramarcos
15/06/2006
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!!!!!!!!!!!
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
Adriano Santos
15/06/2006
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:
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
Pereiramarcos
15/06/2006
[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:
[/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.........
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
Adriano Santos
15/06/2006
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.
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
Pereiramarcos
15/06/2006
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.......
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
Adriano Santos
15/06/2006
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;
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.
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;
GOSTEI 0
Pereiramarcos
15/06/2006
[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;
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.
[/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]
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;
[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
Pereiramarcos
15/06/2006
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
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
Adriano Santos
15/06/2006
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