Timage1

13/05/2003

1

Caro colegas

Como eu posso mim referir a uma image por uma variavel,
Tentei os exeplos abaixo mais da erro

Exemplo1:
var
nomedaimagem : string;
begin
nomedaimagem := ´image1´;
nomedaimagem.picture := image2.picture;
..

Exemplo2:
var
nomedaimagem : string;
...
nomedaimagem :=´image2´;
TImage(nomedaimagem).Picture := Image_matriz_marcado.picture;

OBS: No clipper eu conseguia passar uma valor como parametro

Muito Obrigado

Ricardo


Responder

Posts

Tente o findcomponent

TImage(findcomponent(string)).fazalgumacoisa;


Responder

13/05/2003

Neguta

Declare uma variável TBitMap ou TJpegImage(nesta opção declare a Unit ´JPEG´)

aí:
var
BMP : TBitMap ;
begin
Bmp := TBitmap.Create;
Bmp.LoadFromFile(Arquivo);
ou
BMP.Assign(arquivo);
end;

--Anderson--


Responder

14/05/2003

Zlink

Bem amigos, obrigado pela resposta,
Mais não é bem isto que eu quero,
Não é abrir uma imagem do disco,
Eu quero é pode atribuir o nome de um Timage há uma variavel
Eu tenho varias imagens, image1,image2,image... image50
onde X = ´1´ ou ´2´ ou ´3´ ...

var
imagemtemp : string

begin

x=´1´
imagemtemp := imagemtemp+x; // imagemtemp = imagemtemp1
imagemtemp.picture := matriz.picture;

x=´2´
imagemtemp := imagemtemp+x; // imagemtemp = imagemtemp2
imagemtemp.picture := matriz.picture;

a intenção é

For X:=1 to 9 do begin
image+x.picture := matriz.picture;

ou

para não ter que fazer isto várias vezes em N imagens
image2.Picture := Image_matriz_marcado.picture;
image2.hint := ´marcado´;

image75.Picture := Image_matriz_marcado.picture;
image75.hint := ´marcado´;

ou seja

chamar uma imagem como parametro
...

Ok.
Como eu posso fazer


Obrigado

José Ricardo


Responder

14/05/2003

Okama

procedure TForm1.Button1Click(Sender: TObject);
Var
I : Integer;
Begin
For I := 0 to ComponentCount - 1 do
IF Components[ I ] is TImage Then Begin
TImage(Components [ I ] ).Picture.LoadFromFile(´c:\a.bmp´);
end;
end;


Responder

14/05/2003

Zlink

Bom pessoal, obrigado pelas respostas, mais: eu tenho 50 timage em um form, para não que

Image_matriz_marcado.picture; // já exite uma image nesta


procedure TForm1.Image13Click(Sender: TObject);
image23.Picture := Image_matriz_zero.picture;
image23.hint := ´zero´;
image22.Picture := Image_matriz_zero.picture;
image22.hint := ´zero´;
TImage(Sender).Picture := Image_matriz_selecionado.picture;
TImage(Sender).hint := ´selecionado´;

procedure TForm1.Image12Click(Sender: TObject);
image22.Picture := Image_matriz_zero.picture;
image22.hint := ´zero´;
image21.Picture := Image_matriz_zero.picture;
image21.hint := ´zero´;
TImage(Sender).Picture := Image_matriz_selecionado.picture;
TImage(Sender).hint := ´selecionado´;
selecionado;conta;

eu quero otimizar o código +- assim:

procedure TForm1.Image13Click(Sender: TObject);

imagex.Picture := Image_matriz_zero.picture;
imagex.hint := ´zero´;
imagey.Picture := Image_matriz_zero.picture;
imagey.hint := ´zero´;
TImage(Sender).Picture := Image_matriz_selecionado.picture;
TImage(Sender).hint := ´selecionado´;

procedure TForm1.Image12Click(Sender: TObject);
imagex.Picture := Image_matriz_zero.picture;
imagex.hint := ´zero´;
imagey.Picture := Image_matriz_zero.picture;
imagey.hint := ´zero´;
TImage(Sender).Picture := Image_matriz_selecionado.picture;
TImage(Sender).hint := ´selecionado´;
selecionado;conta;

* onde imagex e imagey, foi atribuido
imagex:=image23
imagey:=image22
e assim por diante

Atenciosamente

José Ricardo


Responder

14/05/2003

Okama

Vamos reformular a questão:

Você tem 50 imagens e precisa alterar as propriedades delas e quer que seja feito de forma otimizada, porém existe um Image (Image_matriz_zero) que você não pode alterar. É isso??

procedure TForm1.Button1Click(Sender: TObject); 
Var 
I : Integer; 
Begin 
For I := 0 to ComponentCount - 1 do 
    IF Components[ I ] is TImage Then
       If TImage(Components [ I ] ).Name <> ´Image_matriz_zero´ then begin
          TImage(Components [ I ] ).hint := ´zero´; 
          TImage(Components [ I ] ).Picture := Image_matriz_zero.picture; 
end; 
end;



Responder

14/05/2003

Zlink

Meus caros colegas

O que eu que fazer é:

x:=1;
...
imagex.picture := imagematriz; // onde imagex é image1


e fazer
x:=31;
...
imagex.picture := imagematriz; // onde imagex é image31

e assim por diante

Muito obrigado a todos

José Ricardo


Responder

14/05/2003

Th_moreira

procedure TForm1.Button1Click(Sender: TObject);
Var
I : Integer;
Begin
For I := 0 to ComponentCount - 1 do
IF Components[ I ] is TImage Then Begin
TImage(Components [ I ] ).Picture.LoadFromFile(´c:\´ + IntToStr(i) + ´.bmp´);
end;
end;


Responder

14/05/2003

Okama

Tô Fora :cry:


Responder
[b:ec356e1ddb]Var[/b:ec356e1ddb]
image : [b:ec356e1ddb]array[/b:ec356e1ddb] [0..0] [b:ec356e1ddb]of[/b:ec356e1ddb] timage;
[i:ec356e1ddb][color=blue:ec356e1ddb]// declare essa variavel como global[/color:ec356e1ddb][/i:ec356e1ddb]

[i:ec356e1ddb][color=blue:ec356e1ddb]//evento oncreate do form[/color:ec356e1ddb][/i:ec356e1ddb]
[b:ec356e1ddb]Var [/b:ec356e1ddb]
I,X : Integer;
[b:ec356e1ddb]Begin [/b:ec356e1ddb]
X := 0;
[b:ec356e1ddb]For[/b:ec356e1ddb] I := 0[b:ec356e1ddb] to [/b:ec356e1ddb]ComponentCount - 1 [b:ec356e1ddb]do if[/b:ec356e1ddb] Components[ I ][b:ec356e1ddb] is[/b:ec356e1ddb] TImage [b:ec356e1ddb]Then Begin [/b:ec356e1ddb]
image[x] := TImage(Components[i]);
inc(X);
setlength(image , length(image) + 1);
[b:ec356e1ddb]end;
end; [/b:ec356e1ddb]
[color=blue:ec356e1ddb]
//depois você se refere ao TImage assim[/color:ec356e1ddb]

numero := 33;
image[numero].picture.fazalgumacoisa;

[color=darkblue:ec356e1ddb][b:ec356e1ddb]Var[/b:ec356e1ddb]
image : [b:ec356e1ddb]array[/b:ec356e1ddb] [0..0] [b:ec356e1ddb]of[/b:ec356e1ddb] timage;
usamos um vetor para designar os componentes
imagex >> fica image[x]


[b:ec356e1ddb]For[/b:ec356e1ddb] I := 0[b:ec356e1ddb] to [/b:ec356e1ddb]ComponentCount - 1 [b:ec356e1ddb]do
´Passa´ por todos os componentes do formulario
if[/b:ec356e1ddb] Components[ I ][b:ec356e1ddb] is[/b:ec356e1ddb] TImage [b:ec356e1ddb]Then [/b:ec356e1ddb]
[b:ec356e1ddb]Se o componente for um TImage[/b:ec356e1ddb]
[b:ec356e1ddb]Begin [/b:ec356e1ddb]
image[x] := TImage(Components[i]);
[b:ec356e1ddb]referencia image[x] como sendo um a especie de ponteiro para o TImage[/b:ec356e1ddb]
inc(X);
setlength(image , length(image) + 1);
[b:ec356e1ddb]aumenta o tamanho do array em 1
ex : array [0..10] >> array [0..11][/b:ec356e1ddb]
[b:ec356e1ddb]end;
end; [/b:ec356e1ddb]

[/color:ec356e1ddb]
[color=orange:ec356e1ddb]
Espero ter ajudado[/color:ec356e1ddb]


Responder

19/05/2003

Zlink

Caro colega,
tentei fazer o teste mais mostra um erro na linha:

setlength(image , length(image) + 1);

imcompatible types

Ricardo


Responder
Caro colega, tentei fazer o teste mais mostra um erro na linha: setlength(image , length(image) + 1); imcompatible types Ricardo


acho que você tem que declarar alguma unit no uses, ma snão me lembro qual, SysUtilis talvez.

ou senão, vc pode colocar o valor direto no array

veja quantas são os TImage que você tem no form, digamos 50, e coloque lá :
[b:8c5ebf58a3]Var [/b:8c5ebf58a3]
image : array [0..50] of timage;
e tire a linha do SetLength fora


Responder