Ir para conteúdo

POWERED BY:

Arquivado

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

SauloBr

[Resolvido] Evento para um TImage

Recommended Posts

Não. O componente TImage herda de TGraphicControl, classe esta que não possui eventos como onEnter e onExit, isto pelo fato de ser um elemento estático na tela ...

 

O que você está pretendendo desenvolver? Talvez possamos lhe ajudar de outra forma ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não. O componente TImage herda de TGraphicControl, classe esta que não possui eventos como onEnter e onExit, isto pelo fato de ser um elemento estático na tela ...

 

O que você está pretendendo desenvolver? Talvez possamos lhe ajudar de outra forma ...

Hum, eu gostaria de fazer com que o Timage ganhasse foco quando eu clicar nele, se for possivel. Estou dando continuidade ao poste anterior, estou tentando desenvolver uma especie de 'mini cad', se é q posso chamar assim, criando imagens para montar um tipo de diagrama/organograma, sendo essas imagens que o usuário iria manipular, com funções para arrastar eles pelo form, de alterar alguns atributos(nome,fonte,cor,etc) em runtime, entre outros. No post anterior eu procurava mover essas imagens(criadas em runtime), porém eu não estou conseguindo fazer com que a primeira imagem criada, perca o foco, para q a imagem seguinte seja manipulada. Quando clico na imagem criada subsequente, os eventos ficam focado apenas no objeto anterior ao evento de criação, assim quando tento mover o objeto 2 por exemplo, o objeto 1 q se move, quando crio o objeto3, o objeto 1 e 2 não são mais manipulados. Estou emperrando nisso!..hehe

 

Espero q tenham entendido.

 

Um abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo. No entando, você nunca consiguirá focar tal imagem, pelos motivos citado no post anterior ...

Teria como você disponibilizar o seu codigo, usando o Drag and Drop para a gente dar uma olhadinha, se for o que estou pensando, pode ser que você esteja passando o objeto de origem incorretamente ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo. No entando, você nunca consiguirá focar tal imagem, pelos motivos citado no post anterior ...

Teria como você disponibilizar o seu codigo, usando o Drag and Drop para a gente dar uma olhadinha, se for o que estou pensando, pode ser que você esteja passando o objeto de origem incorretamente ...

Não usei o drag and drop propriamente dito, mas algo semelhante que encontrei aqui no forum. Segue abaixo o código, esta um pouco bagunçado pq estou apenas 'rascunhando'(rss), para depois colocar no principal.

 

unit MainUnit;

 

interface

 

uses

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

Dialogs, Buttons, ImgList, ExtCtrls, StdCtrls, Menus, cxGraphics,

cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,

cxColorComboBox, cxDBColorComboBox;

const

 

frcde = 0;

frcm4020 = 1;

frcm4040 = 2;

frTexto = 3;

Altura = 35;

Largura = 35;

type

 

TForm1 = class(TForm)

Panel1: TPanel;

ImageList1: TImageList;

BtCDE: TSpeedButton;

SpeedButton1: TSpeedButton;

BotCM4040: TSpeedButton;

Label1: TLabel;

Panel2: TPanel;

MainMenu1: TMainMenu;

Arquivo1: TMenuItem;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

 

Salvar1: TMenuItem;

Sair1: TMenuItem;

Imprimir1: TMenuItem;

VisualizarImpresso1: TMenuItem;

Preferncias1: TMenuItem;

Procedure VerificaEnter(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ClicaObjeto(Sender: Tobject);

procedure MoveObjeto(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure SoltaBotao(Sender: TObject);

procedure BtCDEClick(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure BotCM4040Click(Sender: TObject);

procedure FormClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ClicaEdit(Sender:Tobject);

procedure Panel2Click(Sender: TObject);

procedure TextoPerdeFocus(Sender: Tobject);

procedure FocusMouse(sender: Tobject);

private

{ Private declarations }

public

Origem: Tpoint;

FlagDesenho: boolean;

ferramenta,cont : integer;

Objeto :Timage;

Meulabel: TEdit;

Texto: Tlabel;

procedure CriaObjeto;

procedure CriaTexto;

 

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

Procedure TForm1.CriaObjeto;

begin

Objeto := Timage.Create(Form1);

Objeto.OnClick := Soltabotao;

objeto.Parent := Panel2;

Objeto.Name := 'Figura'+inttostr(cont);

objeto.Left := 50 ;

objeto.Top := 50;

Objeto.Width :=largura;

Objeto.Height := altura;

objeto.Stretch :=true;

Objeto.Transparent :=true;

objeto.onDblClick := ClicaObjeto;

objeto.OnMouseMove := moveObjeto;

end;

 

Procedure tForm1.CriaTexto; // Label do Objeto

begin

MeuLabel:= TEdit.Create(form1);

Meulabel.Parent := Panel2;

MeuLabel.Cursor := crHandPoint;

Meulabel.Left := Objeto.Left-2 ;

MeuLabel.Top := Objeto.Top-25 ;

Meulabel.Width := 65;

MeuLabel.BorderStyle := bsNone;

MeuLabel.readonly:= false;

MeuLabel.MaxLength := 14;

MeuLabel.Text :=' Objeto'+ inttostr(cont);

MeuLabel.Color := clMenuBar;

MeuLabel.OnDblclick := ClicaEdit;

MeuLabel.OnEnter := FocusMouse;

Meulabel.OnExit := TextoperdeFocus ;

MeuLabel.OnKeyDown:= VerificaEnter;

end;

 

procedure TForm1.FocusMouse(Sender: TObject);

begin

if Meulabel.Focused = true then

begin

Meulabel.Cursor := crdefault;

statictext1.Caption := Objeto.Name ;

end

else

Meulabel.Cursor := crHandPoint;

end;

procedure TForm1.ClicaEdit(Sender: TObject);

begin

Meulabel.SetFocus ;

MeuLabel.readonly:= false;

end;

procedure Tform1.ClicaObjeto(Sender: Tobject);

begin

 

flagdesenho:=True;

SetCapture(Panel2.Handle);

GetCursorpos(origem);

statictext1.Caption := Objeto.Name ;

 

end;

procedure TForm1.SoltaBotao(sender:Tobject);

begin

if flagDesenho then

begin

Screen.Cursor:=crDefault;

ReleaseCapture;

flagdesenho:=False;

end;

end;

procedure TForm1.MoveObjeto(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

var

posNova: TPoint;

begin

 

if flagdesenho then

begin

GetCursorPos(posnova);

Screen.Cursor:=crHandPoint;

Objeto.Left:=Objeto.Left - origem.X + posNova.X;

Objeto.Top:=Objeto.Top - origem.Y + posNova.Y;

Meulabel.Left :=Objeto.Left-2;

Meulabel.Top :=Objeto.Top-25;

origem:=posnova;

 

end

Else

Screen.Cursor := crDefault;

end;

procedure TForm1.BtCDEClick(Sender: TObject);

begin

 

Ferramenta:= frcde;

cont:=cont+1;

CriaObjeto;

objeto.Picture.LoadFromFile('C:\...\cde.bmp');

CriaTexto;

end;

 

procedure TForm1.BotCM4020Click(Sender: TObject);

begin

ferramenta:=frcm4020;

cont:= cont+1;

CriaObjeto;

objeto.Picture.LoadFromFile('C:\...\cm4020.bmp');// imagem do objeto

 

CriaTexto;

end;

 

procedure TForm1.BotCM4040Click(Sender: TObject);

begin

ferramenta:=frtexto;

end;

 

procedure TForm1.FormClick(Sender: TObject);

begin

if flagDesenho then

begin

Screen.Cursor:=crDefault;

ReleaseCapture;

flagdesenho:=False;

end;

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

cont:=0;

Form1.DoubleBuffered:=true;

Panel2.DoubleBuffered :=true;

end;

 

 

P.s: Primeiramente eu utilizei outro código para criar as Timage, ao inves de clicando no botão como esta no código acima, eu usei o método onde o clique no botão apenas seta qual imagem sera usada, e com o clique do mouse é que o objeto se cria. Porém mexi no código para tentar descobrir como fazer outras funções, e posteriormente voltarei ao método antigo quando tiver toda a receita do bolo..rss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendo. No entando, você nunca consiguirá focar tal imagem, pelos motivos citado no post anterior ...

Teria como você disponibilizar o seu codigo, usando o Drag and Drop para a gente dar uma olhadinha, se for o que estou pensando, pode ser que você esteja passando o objeto de origem incorretamente ...

Não usei o drag and drop propriamente dito, mas algo semelhante que encontrei aqui no forum. Segue abaixo o código, esta um pouco bagunçado pq estou apenas 'rascunhando'(rss), para depois colocar no principal.

 

unit MainUnit;

 

interface

 

uses

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

Dialogs, Buttons, ImgList, ExtCtrls, StdCtrls, Menus, cxGraphics,

cxControls, cxContainer, cxEdit, cxTextEdit, cxMaskEdit, cxDropDownEdit,

cxColorComboBox, cxDBColorComboBox;

const

 

frcde = 0;

frcm4020 = 1;

frcm4040 = 2;

frTexto = 3;

Altura = 35;

Largura = 35;

type

 

TForm1 = class(TForm)

Panel1: TPanel;

ImageList1: TImageList;

BtCDE: TSpeedButton;

SpeedButton1: TSpeedButton;

BotCM4040: TSpeedButton;

Label1: TLabel;

Panel2: TPanel;

MainMenu1: TMainMenu;

Arquivo1: TMenuItem;

SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

 

Salvar1: TMenuItem;

Sair1: TMenuItem;

Imprimir1: TMenuItem;

VisualizarImpresso1: TMenuItem;

Preferncias1: TMenuItem;

Procedure VerificaEnter(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure ClicaObjeto(Sender: Tobject);

procedure MoveObjeto(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure SoltaBotao(Sender: TObject);

procedure BtCDEClick(Sender: TObject);

procedure SpeedButton1Click(Sender: TObject);

procedure BotCM4040Click(Sender: TObject);

procedure FormClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure ClicaEdit(Sender:Tobject);

procedure Panel2Click(Sender: TObject);

procedure TextoPerdeFocus(Sender: Tobject);

procedure FocusMouse(sender: Tobject);

private

{ Private declarations }

public

Origem: Tpoint;

FlagDesenho: boolean;

ferramenta,cont : integer;

Objeto :Timage;

Meulabel: TEdit;

Texto: Tlabel;

procedure CriaObjeto;

procedure CriaTexto;

 

{ Public declarations }

end;

 

var

Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

Procedure TForm1.CriaObjeto;

begin

Objeto := Timage.Create(Form1);

Objeto.OnClick := Soltabotao;

objeto.Parent := Panel2;

Objeto.Name := 'Figura'+inttostr(cont);

objeto.Left := 50 ;

objeto.Top := 50;

Objeto.Width :=largura;

Objeto.Height := altura;

objeto.Stretch :=true;

Objeto.Transparent :=true;

objeto.onDblClick := ClicaObjeto;

objeto.OnMouseMove := moveObjeto;

end;

.

.

.

.

 

Colegas, me ajudem a entender uma coisa nesse código, será que o que falta nele é passar os parametros do evento moveobjeto(OnMouseMove) na linha "objeto.OnMouseMove := moveObjeto", para o objeto que tem q mover? Como funciona a utilização do parametro TShiftState no OnMouseMove? Estou tentando fazer isso mas dá erro nesse parametro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra, use Drang and Drop ....

Mais antes de tudo, leia este post aqui óh! Eu fiz um trato com o flavioavilela que serve pra você também. Combinado?

Fiz um exemplo BemmmMM simples aqui, somente pra você ver como funciona. Recomendo que faça exatamente o mesmo em um projeto novo ae no seu delphi, que é pra você poder praticar um pouco.

 

//Implementações ...
 
 procedure TForm1.btnCriarImagensClick(Sender: TObject);
 var
   x, aLeft: SmallInt;
   Img: TImage;
 begin
   aLeft:= 10;
 
   for x:= 1 to 3 do
   begin
	 Img:= TImage.Create(Application);
	 Img.Parent:= Self;
	 Img.Picture.LoadFromFile('//Carregue a imagem aki');
	 Img.OnMouseDown:= MouseDownImagem;
	 Img.Top:= 10;
	 Img.Left:= aLeft;
	 Inc(aLeft, 60);
   end;
 end;
 
 procedure TForm1.FormDragOver(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.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
 begin
   if Source is TImage then
   begin
	 TImage(Source).EndDrag(True);
   end;
 end;
 
 procedure TForm1.MouseDownImagem(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   TImage(Sender).BeginDrag(False);
 end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra, use Drang and Drop ....

Mais antes de tudo, leia este post aqui óh! Eu fiz um trato com o flavioavilela que serve pra você também. Combinado?

Fiz um exemplo BemmmMM simples aqui, somente pra você ver como funciona. Recomendo que faça exatamente o mesmo em um projeto novo ae no seu delphi, que é pra você poder praticar um pouco.

 

//Implementações ...
 
 procedure TForm1.btnCriarImagensClick(Sender: TObject);
 var
   x, aLeft: SmallInt;
   Img: TImage;
 begin
   aLeft:= 10;
 
   for x:= 1 to 3 do
   begin
	 Img:= TImage.Create(Application);
	 Img.Parent:= Self;
	 Img.Picture.LoadFromFile('//Carregue a imagem aki');
	 Img.OnMouseDown:= MouseDownImagem;
	 Img.Top:= 10;
	 Img.Left:= aLeft;
	 Inc(aLeft, 60);
   end;
 end;
 
 procedure TForm1.FormDragOver(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.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
 begin
   if Source is TImage then
   begin
	 TImage(Source).EndDrag(True);
   end;
 end;
 
 procedure TForm1.MouseDownImagem(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   TImage(Sender).BeginDrag(False);
 end;

Rodrigo Valeu mesmo colega! Ajudou bastante! Quanto ao identar o código, é que ele na verdade esta identado, mas quando colei aqui no forum ele não ficou como esta no Delphi. Mas o alerta serviu.

 

T++

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.