Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hugo Araujo

Drag and drop (Ttabcontrol para panel) - Imagem runtime

Recommended Posts

Eu estou a fazer uma aplicação que é composto por vários botões,

que tem a função de abrir imagens num Ttabcontrol. Depois de abrir a imagem no ttabcontrol, eu quero deslocar a imagem para Tpanel.

Código é o seguinte:

 

procedure TForm1.Image1Click(Sender: TObject);

 

begin

Img:= TImage.Create(Application);

Img.Parent:= Comando;

Img.Picture.LoadFromFile('localização do ficheiro');

Img.OnMouseDown:=FormMouseDownImagem;

Img.Top:=95;

Img.Left:=55;

repeat

tempo := InputBox('Instrução - Frente', 'Qual a duração da função em segundos', ' em segundos');

until tempo <> '';

 

end;

 

 

procedure TForm1.ComandoDragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if Source is TImage then

begin

Accept:= True;

TImage(Source).Top:= Y;

TImage(Source).Left:= X;

end;

end;

 

 

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

if Source is TImage then

begin

TImage(Source).EndDrag(True);

end;

end;

 

procedure TForm1.FormMouseDownImagem(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

 

begin

TImage(Sender).BeginDrag(False);

end;

 

 

end.

 

Eu não estou a conseguir fazer o drag and drop da imagem do Ttabcontrol para o Tpainel.

Através deste codigo o drag and drop não funciona.... a imagem não aparece no Tpanel...

Como fazer resolver a situação em Delphi?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala fera, beleza???

Acredito que faltou setar o Parent da Imagem após movê-la... pq senão ele continua com referencia a Tab... sacou?

 

Acho que mudando aqui no seu code ja da certo:

 

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TImage then
begin
TImage(Source).EndDrag(True);
TImage(Source).Parent := Panel1; //Aqui fica definido quem irá ser o "Pai" da imagem...
end;
end;

 

 

Fiz aqui da seguinte forma e obtive resultado positivo:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.BeginDrag(True);
end;

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   if Source is TImage then
   begin
	 TImage(Source).Left := X;
	 TImage(Source).Top := Y;
	 TImage(Source).Parent := Panel1;
   end;
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
   Accept := (Source is TImage);
end;

 

Beleza???

 

Testa aew e da um retorno...

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas

Eu experimentei o seguinte código, mas a imagem não aparece no Panel1 e não estou a conseguir detectar o erro.

 

O codigo:

 

unit Experiencia;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, jpeg, ComCtrls;

 

type

TForm1 = class(TForm)

Comando: TTabControl;

Image1: TImage;

Panel1: TPanel;

procedure Image1Click(Sender: TObject);

procedure ComandoDragDrop(Sender, Source: TObject; X, Y: Integer);

procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure ComandoChange(Sender: TObject);

 

 

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

Img:Timage;

tempo:string;

filme:integer;

implementation

 

{$R *.dfm}

 

(* Procedimento que ao pressionar o botão, abre imagem *)

 

procedure TForm1.Image1Click(Sender: TObject);

 

begin

Img:= TImage.Create(Application);

Img.Parent:= Comando;

Img.Picture.LoadFromFile('C:\botões\Movimentos Comando\frente.bmp');

(*Img.OnMouseDown:=ComandoMouseDown;*)

Img.Top:=85;

Img.Left:=55;

repeat

tempo := InputBox('Instrução - Frente', 'Qual a duração da função em segundos', ' em segundos');

until tempo <> '';

 

end;

 

(* Procedimento que permite fazer o drag da imagem aberta*)

 

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Image1.BeginDrag(True);

end;

 

procedure TForm1.ComandoDragDrop(Sender, Source: TObject; X, Y: Integer);

begin

if Source is TImage then

begin

TImage(Source).Left:=X;

TImage(Source).Top:=Y;

TImage(Source).Parent:=Panel1;

end;

end;

 

(* Procedimento para recepção da minha imagem. A imagem deveria aparecer no meu painel*)

 

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

Accept:=(Source is TImage);

end;

 

end.

 

 

 

Fala fera, beleza???

Acredito que faltou setar o Parent da Imagem após movê-la... pq senão ele continua com referencia a Tab... sacou?

 

Acho que mudando aqui no seu code ja da certo:

 

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
if Source is TImage then
begin
TImage(Source).EndDrag(True);
TImage(Source).Parent := Panel1; //Aqui fica definido quem irá ser o "Pai" da imagem...
end;
end;

 

 

Fiz aqui da seguinte forma e obtive resultado positivo:

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Image1.BeginDrag(True);
end;

procedure TForm1.Panel1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   if Source is TImage then
   begin
	 TImage(Source).Left := X;
	 TImage(Source).Top := Y;
	 TImage(Source).Parent := Panel1;
   end;
end;

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
   Accept := (Source is TImage);
end;

 

Beleza???

 

Testa aew e da um retorno...

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas

 

Estou a fazer uma aplicação que consiste num comando de boneco, com várias funções, nomeadamente avançar, direita, esquerda, recuo, etc.

Eu estou com dificuldades em transferir as funções do comando (Tabcontrol) para o painel de programação (painel1). Para cada função, eu tenho um botão que abre um bloco, que se sobrepõe ao botão, onde o utilizador transfere -se esse bloco para um painel de programação (Painel1). Este passo ainda não consegui fazer... após a transferência o bloco mantêm-se no comando, sobreposto no botão.

O meu código é o seguinte:

 

unit Experiencia;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, jpeg, ComCtrls;

 

type

TForm1 = class(TForm)

Comando: TTabControl;

Image1: TImage;

Panel1: TPanel;

procedure Image1Click(Sender: TObject);

procedure ComandoDragDrop(Sender, Source: TObject; X, Y: Integer);

procedure Panel1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure ComandoChange(Sender: TObject);

 

 

 

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

Img:Timage;

tempo:string;

filme:integer;

implementation

 

{$R *.dfm}

 

procedure TForm1.Image1Click(Sender: TObject);

 

begin

Img:= TImage.Create(Application);

Img.Parent:= Comando;

Img.Picture.LoadFromFile('C:\botões\Movimentos Comando\frente.bmp');

(*Img.OnMouseDown:=ComandoMouseDown;*)

Img.Top:=85;

Img.Left:=55;

repeat

tempo := InputBox('Instrução - Frente', 'Qual a duração da função em segundos', ' em segundos');

until tempo <> '';

 

end;

 

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin

Image1.BeginDrag(True);

end;

 

procedure TForm1.ComandoDragDrop(Sender, Source: TObject; X, Y: Integer);

begin

if Source is TImage then

begin

TImage(Source).Left:=X;

TImage(Source).Top:=Y;

TImage(Source).Parent:=Panel1;

end;

end;

 

procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

Accept:=(Source is TImage);

end;

 

end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.