GARANTIR DESCONTO

Fórum Vericando a posição de uma Timage em runtime #529059

18/08/2015

0

Boa tarde Pessoal

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

Rafael Panizza

Responder

Post mais votado

18/08/2015

Boa tarde!

É 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

Mateus Ribeiro
Responder

Gostei + 1

Mais Posts

18/08/2015

Rafael Panizza

Boa tarde Mateus

obrigado pela agilidade e a eficiencia em responder o post

irei testar aqui e te responde se deu certo

grato
Responder

Gostei + 0

18/08/2015

Rafael Panizza

Olá boa noite

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
Responder

Gostei + 0

18/08/2015

Rafael Panizza

Boa tarde Mateus

obrigado pela agilidade e a eficiencia em responder o post

irei testar aqui e te responde se deu certo

grato
Olá boa noite

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
Responder

Gostei + 0

19/08/2015

Rafael Panizza

Boa tarde Mateus

mais uma vez obrigado pela atenção

vou testar aqui e te falo se deu certo
Responder

Gostei + 0

20/08/2015

Rafael Panizza

Boa noite Mateus

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.
Responder

Gostei + 0

20/08/2015

Mateus Ribeiro

Bom dia!

Que bom que deu certo... Boa sorte amigo ^^
Responder

Gostei + 1

24/11/2016

Rafael Panizza

Obrigado (:
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar