|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
claudioforteski Novato
Registrado: Quarta-Feira, 2 de Junho de 2021 Mensagens: 17
|
Enviada: Qua Ago 02, 2023 8:57 pm Assunto: colocar uma letra em uma imagem |
|
|
Olá pessoal.
Gostaria de ver se alguém poderia me auxiliar neste caso:
Carregaria uma imagem(BMP,JPEG e etc) em um componente Imagem,
e quando eu clicasse em um Bottom, apareceria uma letra (A.B.C)
neste mesmo componente, onde eu clicando em cima desta letra,
eu conseguisse arrasta-lo em qualquer lugar dentro desta imagem.
Grato
Claudio |
|
Voltar ao Topo |
|
|
rodrigoprado Colaborador
Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Qua Ago 30, 2023 3:10 pm Assunto: |
|
|
Código: |
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TMoveCracker = class(TControl); //Capturar o evento do mouse
TForm1 = class(TForm)
// para usar de container e deixar as 2 imagens dentro dele
// Assim vc pode ter uma imagem principal e outra que seria sua Letra em cima
Panel1: TPanel;
Image2: TImage;
Image1: TImage;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FPosicaoX, FPosicaoY: Integer;
FArrastar: Boolean;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
DoubleBuffered := True; //para melhor Suavizar o arrastar direcionando ele para um bitmap de memória, teste como false pra entender melhor.
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FPosicaoX := X;
FPosicaoY := Y;
FArrastar := True;
TMoveCracker(Sender).MouseCapture := True;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if FArrastar then
begin
with Sender as TControl do
begin
Left := X - FPosicaoX + Left;
Top := Y - FPosicaoY + Top;
end;
end;
end;
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if FArrastar then
begin
FArrastar := False;
TMoveCracker(Sender).MouseCapture := False;
end;
end;
end.
|
_________________ - Compartilhe seus conhecimentos - |
|
Voltar ao Topo |
|
|
rodrigoprado Colaborador
Registrado: Terça-Feira, 24 de Mai de 2005 Mensagens: 1074 Localização: Curitiba/PR
|
Enviada: Qua Ago 30, 2023 3:20 pm Assunto: ou dinamico +- isso, tem que melhorar |
|
|
Código: |
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TMoveCracker = class(TControl); //Capturar o evento do mouse
TForm1 = class(TForm)
// para usar de container e deixar as 2 imagens dentro dele
// Assim vc pode ter uma imagem principal e outra que seria sua Letra em cima
Panel1: TPanel;
Image1: TImage;
Button1: TButton;
procedure ControleMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ControleMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure ControleMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
FPosicaoX, FPosicaoY: Integer;
FArrastar: Boolean;
FImagem: TImage;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ControleMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FPosicaoX := X;
FPosicaoY := Y;
FArrastar := True;
TMoveCracker(Sender).MouseCapture := True;
end;
procedure TForm1.ControleMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if FArrastar then
begin
with Sender as TControl do
begin
Left := X - FPosicaoX + Left;
Top := Y - FPosicaoY + Top;
end;
end;
end;
procedure TForm1.ControleMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if FArrastar then
begin
FArrastar := False;
TMoveCracker(Sender).MouseCapture := False;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FImagem := TImage.Create(nil); //pode mudar o aowner dele, ai outro objeto cuida de matar ele
DoubleBuffered := True; //para melhor Suavizar o arrastar direcionando ele para um bitmap de memória, teste como false pra entender melhor.
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FImagem.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FImagem.Parent := panel1;
FImagem.BringToFront;
FImagem.Picture.LoadFromFile('c:\temp\imagem.png');
FImagem.AutoSize := True;
FImagem.OnMouseDown := ControleMouseDown;
FImagem.OnMouseMove := ControleMouseMove;
FImagem.OnMouseUp := ControleMouseUp;
end;
end.
|
_________________ - Compartilhe seus conhecimentos - |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|