SauloBr 0 Denunciar post Postado Abril 22, 2008 Boa tarde galera, Alguém saberia me dizer se teria como adicionar um evento OnEnter e OnExit em um componente TImage? Vlw! Compartilhar este post Link para o post Compartilhar em outros sites
Rodrigo Miss 1 Denunciar post Postado Abril 23, 2008 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
SauloBr 0 Denunciar post Postado Abril 23, 2008 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
Rodrigo Miss 1 Denunciar post Postado Abril 23, 2008 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
SauloBr 0 Denunciar post Postado Abril 23, 2008 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
SauloBr 0 Denunciar post Postado Abril 24, 2008 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
Rodrigo Miss 1 Denunciar post Postado Abril 26, 2008 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
SauloBr 0 Denunciar post Postado Abril 28, 2008 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
Rodrigo Miss 1 Denunciar post Postado Abril 28, 2008 Otimo amigo.... que bom mesmo que resolveu o problema ... Quanto a indentação você deve fazer assim pra funcionar: Compartilhar este post Link para o post Compartilhar em outros sites