Fórum Vericando a posição de uma Timage em runtime #529059
18/08/2015
0
Estou com uma duvida boba na hora de criar o tImage em tempo de execução.
Exemplo
var
imagem1, imagem2 : TImage;
begin
Imagem1:= timage.create(self);
imagem1.parent := form_principal;
imagem1.top := 5;
imagem1.Left := 5;
imagem1.Width := 80;
imagem1.Height := 80;
imagem1.Picture.LoadFromFile('caminho da imagem');
minha duvida é na criação da outra tImage....
como eu faço para verificar se ja tem um Timage na posição.
pq eu to falando isso... se eu não fazer essa verificação ele vai criar as Timages só que vai ficar uma em cima da outra....
segue abaixo um exemplo bobo do meu raciocinio
if not ((Timage.left = 5) and(Timage.top = 5)) then
begin
// eu criou o novo Timage nesta posição
end
else
// crio em outra posição
fico agradecido pela ajuda do forum e dos colaboradores.
Rafael Panizza
Curtir tópico
+ 0Post mais votado
18/08/2015
É simples, vc verifica todos os componentes do seu formulário e verifica se os TImage estão nessa posição. Basicamente é isso:
var i: integer;
begin
for i:= 0 to ComponentCount - 1 do
if (Components[i].ClassType = TImage) then
if (TImage(Components[i]).Top = 5) and (TImage(Components[i]).Left = 5) then
ShowMessage('Já existe um TImage nessa posição');
Vc pode criar uma função em cima desse code, boa sorte ^^
Mateus Ribeiro
Gostei + 1
Mais Posts
18/08/2015
Rafael Panizza
obrigado pela agilidade e a eficiencia em responder o post
irei testar aqui e te responde se deu certo
grato
Gostei + 0
18/08/2015
Rafael Panizza
Tentei usar o seu método e funcionou em partes...
por exemplo, quando eu faço a verificação pra saber se tem um Timage no top = 5 e left = 5... da certo, se não tem blz... eu crio o meu timage....
agora o problema é quando ja tem a timage no top = 5 e left = 5... ai eu tenho que criar a imagem em outro lugar e para isso eu tenho que fazer novamente a verificação, e nessa parte que está dando errado... veja o codigo que eu fiz abaixo
var i: integer;
begin
if atendimento.Caption ='ok' then
for i:= 0 to ComponentCount - 1 do
if (Components[i].ClassType = TImage) then
if not(TImage(Components[i]).Top = 5) and not(TImage(Components[i]).Left = 5) then
begin
ShowMessage('pode criar a imagem na primeira posição');
end
else
if not(TImage(Components[i]).Top = 5) and not(TImage(Components[i]).Left = 125) then
begin
ShowMessage('pode criar a imagem na segunda posição');
end
else
if not(TImage(Components[i]).Top = 5) and not(TImage(Components[i]).Left = 195) then
begin
ShowMessage('pode criar a imagem na terceira posição');
end;
// e assim por diante até ter um espaço vazio
end;
o que eu estou fazendo errado?
fico no aguardo
Gostei + 0
18/08/2015
Rafael Panizza
obrigado pela agilidade e a eficiencia em responder o post
irei testar aqui e te responde se deu certo
grato
Tentei usar o seu método e funcionou em partes...
por exemplo, quando eu faço a verificação pra saber se tem um Timage no top = 5 e left = 5... da certo, se não tem blz... eu crio o meu timage....
agora o problema é quando ja tem a timage no top = 5 e left = 5... ai eu tenho que criar a imagem em outro lugar e para isso eu tenho que fazer novamente a verificação, e nessa parte que está dando errado... veja o codigo que eu fiz abaixo
var i: integer;
begin
if atendimento.Caption ='ok' then
for i:= 0 to ComponentCount - 1 do
if (Components[i].ClassType = TImage) then
if not(TImage(Components[i]).Top = 5) and not(TImage(Components[i]).Left = 5) then
begin
ShowMessage('pode criar a imagem na primeira posição');
end
else
if not(TImage(Components[i]).Top = 5) and not(TImage(Components[i]).Left = 125) then
begin
ShowMessage('pode criar a imagem na segunda posição');
end
else
if not(TImage(Components[i]).Top = 5) and not(TImage(Components[i]).Left = 195) then
begin
ShowMessage('pode criar a imagem na terceira posição');
end;
// e assim por diante até ter um espaço vazio
end;
o que eu estou fazendo errado?
fico no aguardo
Gostei + 0
19/08/2015
Rafael Panizza
mais uma vez obrigado pela atenção
vou testar aqui e te falo se deu certo
Gostei + 0
20/08/2015
Rafael Panizza
Parabens pelo conhecimento e obrigado por me ajudar, problema resolvido...
Fiz uma modificação de acordo com a minha necessidade, ao inves de usar o (if then) eu usei o (white do) assim ele faz o loop e verifica espaço por espaço até achar uma vazia...
segue o codigo para compartilhar com os demais.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Jpeg, Vcl.Imaging.pngimage;
type
TForm1 = class(TForm)
btn1: TButton;
atendimento: TLabel;
gerenciamento: TLabel;
configuracao: TLabel;
compras: TLabel;
function ExisteTimage(mTop, mLeft: Integer): Boolean;
procedure CriarImage(caminhoImagem: String; imagemLeft: Integer);
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
imagem : TImage;
imagemLeft : Integer;
caminhoImagem : string;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
begin
if atendimento.Caption = 'ATIVO' then
begin
caminhoImagem := 'caminho da imagem';
imagemLeft := 5;
while ExisteTimage(5, imagemLeft) do
begin
imagemLeft := imagemLeft + 75;
end;
if not ExisteTimage(5, imagemLeft) then
begin
CriarImage(caminhoImagem, imagemLeft);
end;
end;
if gerenciamento.Caption = 'ATIVO' then
begin
caminhoImagem := 'caminho da imagem';
imagemLeft := 5;
while ExisteTimage(5, imagemLeft) do
begin
imagemLeft := imagemLeft + 75;
end;
if not ExisteTimage(5, imagemLeft) then
begin
CriarImage(caminhoImagem, imagemLeft)
end;
end;
if configuracao.Caption = 'ATIVO' then
begin
caminhoImagem := 'caminho da imagem';
imagemLeft := 5;
while ExisteTimage(5, imagemLeft) do
begin
imagemLeft := imagemLeft + 75;
end;
if not ExisteTimage(5, imagemLeft) then
begin
CriarImage(caminhoImagem, imagemLeft);
end;
end;
if compras.Caption = 'ATIVO' then // como se fosse um modulo
begin
caminhoImagem := 'caminho da imagem';
imagemLeft := 5;
while ExisteTimage(5, imagemLeft) do
begin
imagemLeft := imagemLeft + 75;
end;
if not ExisteTimage(5, imagemLeft) then
begin
CriarImage(caminhoImagem, imagemLeft);
end;
end;
end;
procedure TForm1.CriarImage(caminhoImagem: String; imagemLeft: Integer);
begin
Imagem:= TImage.Create(Self);
Imagem.Parent:= Form1;
Imagem.Top:= 5;
Imagem.Left:= imagemLeft;
Imagem.Height:= 81;
Imagem.Width:= 65;
Imagem.Picture.LoadFromFile(caminhoImagem);
end;
function TForm1.ExisteTimage(mTop, mLeft: Integer): Boolean;
var i: integer;
begin
Result:= False;
for i:= 0 to ComponentCount - 1 do
if (Components[i].ClassType = TImage) then
if (TImage(Components[i]).Top = mTop) and (TImage(Components[i]).Left = mLeft) then
Result:= True;
end;
end.
Gostei + 0
20/08/2015
Mateus Ribeiro
Que bom que deu certo... Boa sorte amigo ^^
Gostei + 1
24/11/2016
Rafael Panizza
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)