PDA

Просмотр полной версии : [Помогите!] Как двигать форму по изображению


gum_classis
20.06.2011, 13:26
Сделал гаджет ,но не могу его двигать форма полностью прозрачна только изображение так вот кому не трудно выложите код чтобы форма двигалась зажав левую кнопку мыши и передвигать по экрану.

VeTaL_UA
20.06.2011, 13:37
//Первый способ

При нажатии по форме:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DragMove=$F012;
begin
ReleaseCapture;
Form1.Perform(WM_SysCommand, SC_DragMove, 0);
end;
При нажатии по изображению:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DragMove=$F012;
begin
ReleaseCapture;
Form1.Perform(WM_SysCommand, SC_DragMove, 0);
end;

Обьяснение:
Ты создаёшь обработчик событий OnMouseKeyDown на елементе, при нажатии на который ты хочешь, чтобы форма двигалась. Потом прописываешь const перед begin и прописываешь:
SC_DragMove=$F012;
После между begin и end прописываешь это
ReleaseCapture;
Form1.Perform(WM_SysCommand, SC_DragMove, 0);
В результате получаешь передвижение формы при нажатии на любою точку нажного элемента формы...

//Второй способ

При нажатии на форму:

Обьявляем глобальные переменные:
var
Hit:boolean;
_x,_y:integer;
Потом создаём на форме обработчик событий OnCreate:
procedure TForm1.FormCreate(Sender: TObject);
begin
Hit:=false;
end;

Потом создаём на форме обработчик событий OnMouseDown:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Hit:=true;
_x:=X; _y:=Y;
end;
Потом создаём на форме обработчик событий OnMouseMove:
procedure TForm1.FormMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if Hit then
begin
left:=left+(x-_x);
top:=top+(y-_y);
end;
end;
Потом создаём на форме обработчик событий OnMouseUp:
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Hit:=false;
end;

Выбирай какой способ тебе нравится больше...