ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

colocar uma letra em uma imagem

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
claudioforteski
Novato
Novato


Registrado: Quarta-Feira, 2 de Junho de 2021
Mensagens: 17

MensagemEnviada: Qua Ago 02, 2023 8:57 pm    Assunto: colocar uma letra em uma imagem Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1074
Localização: Curitiba/PR

MensagemEnviada: Qua Ago 30, 2023 3:10 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
rodrigoprado
Colaborador
Colaborador


Registrado: Terça-Feira, 24 de Mai de 2005
Mensagens: 1074
Localização: Curitiba/PR

MensagemEnviada: Qua Ago 30, 2023 3:20 pm    Assunto: ou dinamico +- isso, tem que melhorar Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB