Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.12;
Скачать: CL | DM;

Вниз

Перемещение изображия в Image   Найти похожие ветки 

 
killer ©   (2004-06-25 00:57) [0]

У меня имеется изображение в image... Причем размер изображения больше чем размер image, и это все находится в ScrollBox-е... Как можно нажав на изображение мышкой перемещать его?


 
WondeRu ©   (2004-06-25 12:47) [1]

Делаем так (глюковато правда):
У имейджа ставим left=0, top=0, autosize=true.


unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   ScrollBox1: TScrollBox;
   Image1: TImage;
   procedure Image1MouseDown(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;
 x1, y1: Integer;
implementation

{$R *.dfm}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 x1 := X;
 y1 := Y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if ssLeft in Shift then
   ScrollBox1.ScrollBy(X - X1, Y- Y1 );

 x1 := X;
 y1 := Y;
end;



 
killer ©   (2004-06-25 19:53) [2]

в процедуре TForm1.Image1MouseMove надо убрать
x1 := X;
y1 := Y;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if ssLeft in Shift then
  ScrollBox1.ScrollBy(X - X1, Y- Y1 );
end;

с ними изображение "дергается"...

А можно ли сделать так, чтобы перемещались только scroll-ы? И фотография всвязи с ними, и чтобы изображение не не могло вылезти за края scrolbox-а...


 
killer ©   (2004-06-25 23:29) [3]

Я тут вот как сделал... только я не пойму никак... почему картинка "прыгает"? Я еще стоки заменил немного...
 ScrollBox1.HorzScrollBar.Position:=sx-x;
 ScrollBox1.VertScrollBar.Position:=sy-y;
на
 ScrollBox1.HorzScrollBar.Position:=sy-y;
 ScrollBox1.VertScrollBar.Position:=sx-x;

Наоборот сделал... Так все отлично работает... В чем дело не пойму никак...

unit Unit1;

interface

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

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

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if ssLeft in Shift then
 begin
 ScrollBox1.HorzScrollBar.Position:=sx-x;
 ScrollBox1.VertScrollBar.Position:=sy-y;
 end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
sx:=x;
sy:=y;
end;

end.


 
Огромное Кулясище   (2004-06-26 01:13) [4]

Так как при OnMouseMove само изображение передвигается относительно мыши при работа ScrollBox, то лучше использовать экранные координаты, как реализовано здесь:


unit Unit1;

interface

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

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

var
 Form1: TForm1;
 p, c: TPoint;

implementation

{$R *.DFM}

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
var dx, dy: Integer;
   v: TPoint;
begin
if ssLeft in Shift then
 begin
   GetCursorPos(v);
   dx := v.X-C.x;
   dy := v.Y-C.y;
   If p.x-dx < 0 then ScrollBox1.HorzScrollBar.Position := 0 else
   If p.x-dx > ScrollBox1.HorzScrollBar.Range then ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Range else
   ScrollBox1.HorzScrollBar.Position := p.x-dx;

   If p.y-dy < 0 then ScrollBox1.VertScrollBar.Position := 0 else
   If p.y-dy > ScrollBox1.VertScrollBar.Range then ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Range else
   ScrollBox1.VertScrollBar.Position := p.y-dy;
 end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 p := Point(ScrollBox1.HorzScrollBar.Position, ScrollBox1.VertScrollBar.Position);
 GetCursorPos(c);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 DoubleBuffered := True;
 ScrollBox1.DoubleBuffered := True;
end;

end.


 
Mim1 ©   (2004-06-26 06:23) [5]

Делалось сто лет назад.
unit Unit1;

interface

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

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

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 qx := x;
 qy := y;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if not (ssLeft in shift) then exit;
 Image1.OnMouseMove := nil;
 ScrollBox1.HorzScrollBar.Position := ScrollBox1.HorzScrollBar.Position - (x-qx);
 ScrollBox1.VertScrollBar.Position := ScrollBox1.VertScrollBar.Position - (y-qy);
 Image1.OnMouseMove := Image1MouseMove;
end;

end.



Страницы: 1 вся ветка

Текущий архив: 2004.09.12;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
14-1093395757
SPeller
2004-08-25 05:02
2004.09.12
Опрос для тех, у кого выделенка


10-1037889217
ac2dc
2002-11-21 17:33
2004.09.12
ip клиента в коде серванта


1-1093849854
Zhekson
2004-08-30 11:10
2004.09.12
Текущее время


14-1093262735
SPeller
2004-08-23 16:05
2004.09.12
Сеть


3-1092680411
Java73
2004-08-16 22:20
2004.09.12
Проблема с выводом данных