Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Mouse


Автор: Sanechichek 23.10.2008, 06:08
Подскажите пожалуйста как можно сделать так что бы при зажатии левой кнопки на Image и не отжимаючи  ее перетягывать по Imagу образовывался прямокутник, подобно тому как мишь перетягывать на рабочом столе или выделяем папки... Только нужно что бы при отжатии кнопки зафиксировался прямокутник, а при повторном нажатии он исчезал.

Автор: Coder 23.10.2008, 08:47
вот так можно

Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    Image1: TImage;
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  g_LButtonDown : boolean = false;
  g_DownX, g_DownY : Integer;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
    begin
      g_LButtonDown:=true;
      g_DownX:=X;
      g_DownY:=Y;
    end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then
    begin
      g_LButtonDown:=false;
    end;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  offset : TPoint;
begin
  if g_LButtonDown then
    begin
      Image1.Refresh;
{вот это все можно узнавать и устанавливать заранее}
      offset.X:=Image1.Left;
      offset.Y:=Image1.Top;
      Form1.Canvas.Brush.Style:=bsClear;
      Form1.Canvas.Pen.Style:=psDash;
      Form1.Canvas.Pen.Color:=clBlue;

      Form1.Canvas.Rectangle(g_DownX+offset.X,g_DownY+offset.Y,X+offset.X,Y+offset.Y);
    end;
end;

end.


Автор: Sanechichek 23.10.2008, 09:42
Большое спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)