Fórum TImage - Colocar ponto colorido no clique do mouse #349298
20/11/2007
0
Tenho um componente TImage aonde eu vou clicar com o mouse sobre a imagem que se abrir (isso em vários pontos da imagem) e eu gostaria que a cada clique do mouse fosse colocado um ponto vermelho (pode ser qualquer cor).
Eu tentei assim:
Image.Picture.Bitmap.Canvas.Pen.Width := 1000; Image.Picture.Bitmap.Canvas.Pixels[Pt.X,Pt.Y] := clRed;
Mas também não aconteceu nada.
Como eu faço isso?
Agradeço a ajuda de todos.
Marcos.gandin
Curtir tópico
+ 0Posts
21/11/2007
Vitor Alcantara
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin Image1.Picture.Bitmap.Canvas.Pen.Width := 10000; Image1.Picture.Bitmap.Canvas.Pixels[X ,Y ] := clRed; end; end;
Eu acho que do jeito que estava você pegava o valor do ponteiro em relação ao form e não em relação a imagem.
Gostei + 0
21/11/2007
Vitor Alcantara
Gostei + 0
21/11/2007
Marcos.gandin
A linha [b:90c3782495]´Image1.Picture.Bitmap.Canvas.Pen.Width := 10000´[/b:90c3782495] era somente para aumentar o tamanho da caneta, mas eu também acho que não faz nenhuma diferença.
Obrigado por ajudar...vou testar e depois aviso o resultado.
Flw
Gostei + 0
21/11/2007
Marcos.gandin
Testei aqui e não aconteceu nada.
Pra você funcionou?
Gostei + 0
21/11/2007
Marcos.gandin
O que eu preciso é somente dar um clique na figura e deixar marcado um ponto, e esse ponto deveria ser bem visivel.
Gostei + 0
21/11/2007
Vitor Alcantara
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbLeft then begin Image1.Picture.Bitmap.Canvas.Brush.Color := clred; Image1.Picture.Bitmap.Canvas.Brush.Style := bsSolid; Image1.Picture.Bitmap.Canvas.Ellipse(x,y,x+10,y+10); end; end;
Dessa forma ele cria um circulo onde você clicou na imagem.
Gostei + 0
21/11/2007
Vitor Alcantara
No evento MouseMove:
if ssLeft in Shift then begin Image1.Picture.Bitmap.Canvas.Brush.Color := clBlack; Image1.Picture.Bitmap.Canvas.Brush.Style := bsSolid; Image1.Picture.Bitmap.Canvas.Pen.Style := psClear; Image1.Picture.Bitmap.Canvas.Ellipse (x,y,x+10,y+10); end;
Enquanto estiver com o mouse precionado ele vai pintando a imagem.
Gostei + 0
21/11/2007
Vitor Alcantara
Gostei + 0
21/11/2007
Marcos.gandin
Agora os pontos ficaram maiores, mas a posição continua não sendo a mesma do ponteiro do mouse.
Verifiquei a propriedade Stretch ela está false.
Gostei + 0
21/11/2007
Marcos.gandin
procedure TfrmImagem.ImageMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pt: TPoint; begin GetCursorPos(pt); pt := Image.ScreenToClient(pt); if Button = mbLeft then begin Image.Picture.Bitmap.Canvas.Brush.Color := clBlue; Image.Picture.Bitmap.Canvas.Brush.Style := bsSolid; Image.Picture.Bitmap.Canvas.Ellipse(pt.X,pt.Y,pt.X+5,pt.Y+5); end; end;
Mas os pontos ainda não estão nos lugares corretos...
Gostei + 0
21/11/2007
Vitor Alcantara
ex:
Image1.Picture.Bitmap.Canvas.Ellipse(pt.X - 2,pt.Y-2,pt.X+2,pt.Y+2);
No mais não sei o que pode estar errado.
Gostei + 0
21/11/2007
Marcos.gandin
Ou seja, você criou um form novo, colocou um componente TImage, você carrega uma imagem no componente utilizando um TOpenPictureDialog, e coloca o código que eu postei aí no evento OnMouseDown do componente TImagem ???
É isso?
Gostei + 0
21/11/2007
Marcos.gandin
Poderia me enviar para o e-mail:
marcos.gandin@hotmail.com
Flw
Gostei + 0
21/11/2007
Vitor Alcantara
object Form1: TForm1 Left = 0 Top = 0 AutoSize = True Caption = ´Form1´ ClientHeight = 511 ClientWidth = 708 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = ´Tahoma´ Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Image1: TImage Left = 0 Top = 0 Width = 708 Height = 511 AutoSize = True OnMouseDown = Image1MouseDown end object Button1: TButton Left = 208 Top = 32 Width = 75 Height = 25 Caption = ´Button1´ TabOrder = 0 OnClick = Button1Click end object OpenPictureDialog1: TOpenPictureDialog Left = 344 Top = 256 end end
Olha ai o Pas
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, jpeg, ExtDlgs, StdCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
OpenPictureDialog1: TOpenPictureDialog;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
Begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName );
End;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
Image1.Picture.Bitmap.Canvas.Brush.Color := clBlue;
Image1.Picture.Bitmap.Canvas.Brush.Style := bsSolid;
Image1.Picture.Bitmap.Canvas.Ellipse(X-2,Y-2,X+2,Y+2);
end;
end;
end.Gostei + 0
21/11/2007
Marcos.gandin
Consegui acertar o meu projeto.
O que eu estava fazendo de errado não tinha nada a ver com o código, mas sim com a propriedade [b:d5780290c6]Center[/b:d5780290c6] que eu tinha setado como [b:d5780290c6]True[/b:d5780290c6] para que a imagem que fosse aberta, sempre se posicionasse no centro do componente.
Não sei se isso teria concerto...mas por hora está funcionando.
Valeu pela ajuda.
Obrigado mesmo.
Abraço...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)