propriedade visible em grupo

Delphi

11/10/2005

Não sei se é possivel controlar a propriedade de vários edit a partir de uma variavel.

Um exemplo:

Tenho 12 edits:

editA1   editB1 editC1
editA2   editB2 editC2
editA3   editB3 editC3
editA4   editB4 editC4
editA5   editB1 editC5
...


Tenho uma variavel integer, ´param´.

De acordo com o valor dela eu gostaria de deixar os edits abaixo invisíveis.
No caso se param é 1, todos os edits a baixo do 1 ficam invisiveis, se é 2 todos os edits abaixo do 2 ficam invisíveis, e assim sucessivamente.

Mas no caso eu tenho 12 edits.

Eu poderia fazer um case na variavel, e ir fazendo na mão um por um, mas imaginem a quantidade de linhas que vai dar isso...

Será que tem alguma maneira diferente para essa situação ?

Obrigado.


Lynx

Lynx

Curtidas 0

Respostas

Lynx

Lynx

11/10/2005

só para acrescentar, da para criar procedimentos de 3 em 3.

procedure linha1
nome dos edits1
.. ..2
.. ..2



isso já diminui bastante, mas mesmo assim da muita linha, será que tem algo diferente para essa situação.


GOSTEI 0
Imoreira

Imoreira

11/10/2005

Dá uma adaptada aí.

var
x,y,z,param:integer;
begin
param:=2;
for y:=0 to painel.controlcount-1 do begin
z:= strtoint(copy((painel.controls[y] as tedit).name,pos(´Edit´,(painel.controls[y] as tedit).name)+4,2));
for x:=param to painel.controlcount-1 do begin
if (z=x) then begin
(painel.controls[x] as tedit).visible:=false;
end;
end;
end;

end;


GOSTEI 0
Lynx

Lynx

11/10/2005

pessoal, desculpe pelo tópico.
Acabei fazendo da maneira que postei acima...
Ficou bem menor.

Mas fiquem a vontade para postar outras maneiras.

valeu


GOSTEI 0
Marcio.theis

Marcio.theis

11/10/2005

Vc pode fazer desta forma, pode melhorar o código ainda:

var
    x: integer;
    texto: String;
begin
for x:=0 to Self.ComponentCount - 1 do
    begin
    if Self.Components[x].ClassType = TEdit then
        begin
        texto:=(Self.Components[x] as TEdit).Name;
        texto:=Copy(texto,Length(texto),1);
        if StrToInt(texto) > param then
            (Self.Components[x] as TEdit).Visible:=False;
        end;
    end;



GOSTEI 0
Lynx

Lynx

11/10/2005

Postei bem na hora que vocês postou.

Certeza vai diminuir mais ainda.

valeu


GOSTEI 0
Marcio.theis

Marcio.theis

11/10/2005

Uma coisa que vc pode fazer é setar a propriedade [i:a10eaa39c4]Tag[/i:a10eaa39c4] dos edit´s de acordo com o seu n°, ou seja, coloca os três primeiros como 1, depois 2, e assim até o 12°, ficando o código mais simples ainda:

var
    x: integer;
begin
for x:=0 to Self.ComponentCount - 1 do
    begin
    if Self.Components[x].ClassType = TEdit then
        if (Self.Components[x] as TEdit).Tag > param then
            (Self.Components[x] as TEdit).Visible:=False;
    end;



GOSTEI 0
Lynx

Lynx

11/10/2005

e eu fazendo gambiarra, falta de conhecimento mesmo,ainda bem que eu não reclamo, pior é as pessoas que fazem isso e dizem que o pascal é muito lento para sistema.

valeu mesmo


GOSTEI 0
Lynx

Lynx

11/10/2005

só mais uma pergunta, é possivel fazer isso com tag, mas em componentes diferentes, sem repetir.

Exemplo em TLabel, e TEDit ao mesmo tempo


GOSTEI 0
Marcio.theis

Marcio.theis

11/10/2005

sim... a única coisa que vc tera de alterar sera a função, que ficaria assim:

var
    x: integer;
begin
for x:=0 to Self.ComponentCount - 1 do
    begin
    if Self.Components[x].ClassType = TEdit then
        begin
        if (Self.Components[x] as TEdit).Tag > param then
            (Self.Components[x] as TEdit).Visible:=False;
        end
    else
        begin
        if Self.Components[x].ClassType = TLabel then
            if (Self.Components[x] as TLabel).Tag > param then
                (Self.Components[x] as TLabel).Visible:=False;
        end
    end;
end;



GOSTEI 0
Lynx

Lynx

11/10/2005

Valeu Mesmo !!
Está voando agora


GOSTEI 0
POSTAR