Executado comandos contido em uma variavel
21/05/2008
0
Tenho uma tela com 1500 imagens nela, dispostas em 30 linhas com 50 colunas. De acordo com resultado de uma seleção no banco preciso trocar algumas propriedades das imagens.
Exemplo: O banco me retorno a seguinte: QtdCol = 2 QtdLin = 2 , nesse caso preciso trocar a propriedade visible false para true das 4 imagens. Minha duvida é, como fazer pra referenciar a imagens dinamicamente tipo Imagem(posicao viriavel).visible := true; ou gerar uma variavel com o comando e mandar executar posteriormente sem dar erro no compilador?
Geison Pereira
Posts
21/05/2008
Ffabiop
TImage(FindComponent(´imagem ´+ IntToStr(seu índice))).Visible := false;
21/05/2008
Geison Pereira
TImage(FindComponent(´imagem ´+ IntToStr(seu índice))).Visible := false;
ficou assim:
TImage(FindComponent(´Im´+RetornaNomeLinha(PosLin)+IntToStr(PosCol)).Visible := false;
deu a seguinte messagem de erro:
[Error] Netuno_MenuPrincipal.pas(1079): Undeclared identifier: ´Visible´
[Error] Netuno_MenuPrincipal.pas(1079): Incompatible types: ´TImage´ and ´Boolean´
21/05/2008
Bico
TImage(FindComponent(´Im´+RetornaNomeLinha(PosLin)+IntToStr(PosCol))).Visible := false;
Atenciosamente,
Fernando.
21/05/2008
Emerson Nascimento
procedure TForm1.Button1Click(Sender: TObject); var QtdLin, QtdCol: integer; icomp: integer; limg, cimg: integer; begin QtdLin := StrToIntDef(Edit1.Text,1); // linhas a ´apagar´ QtdCol := StrToIntDef(Edit2.Text,1); // colunas a ´apagar´ for icomp := 0 to ControlCount-1 do if Controls[icomp] is TImage then begin // no meu caso, testei com 5 linhas por 5 colunas // e os nomes das imagens eram padronizados assim: // imgLC, onde L=linha e C=Coluna, pois eu tenho // linhas e colunas na casa das unidades. limg := strtointdef(copy(Controls[icomp].Name,4,1),0); cimg := strtointdef(copy(Controls[icomp].Name,5,1),0); // no seu caso, a padronização deveria ser: // imgLLCC, onde LL=linha e CC=Coluna, pois você tem // linhas e colunas na casa das dezenas. // por exemplo: // - img0120, que diz que é a vigésima imagem da linha 1 // - img0308, que diz que é a oitava imagem da linha 3 // - img2506, que diz que é a sexta imagem da linha 25 // por conta disso, a leitura desses valores deveria ser: // limg := strtointdef(copy(Controls[icomp].Name,4,2),0); // cimg := strtointdef(copy(Controls[icomp].Name,6,2),0); Controls[icomp].Visible := (limg > QtdLin) or (cimg > QtdCol); end; end;
essa rotina que eu apresentei terá performance superior ao uso da FindComponent, pois a FindComponent fará a varredura dos componentes - utilizando um for, da mesma maneira que eu fiz - até achar o componente que você deseja. E você precisará fazer isso para cada componente que você irá esconder/exibir.
da forma que eu apresentei acima, a varredura será feita apenas 1 vez.
espero que ajude a resolver o seu problema.
Clique aqui para fazer login e interagir na Comunidade :)