Форум: "Media";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
ВнизПеремещение изображия в 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 вся ветка
Форум: "Media";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c