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

Вниз

Перетаскивание формы за Image   Найти похожие ветки 

 
Dmitry_04   (2005-02-02 17:35) [0]

Я тут в интернете нашел несколько способов по перетаскиванию формы за Image:

Способ №1

private
procedure WMNCHITTEST(var M:TWMNCHitTest); message WM_NCHITTEST;
...
procedure TForm1.WMNCHITTEST(var M: TWMNCHitTest);
begin
 inherited;
 if M.Result = htClient then
   M.Result := htCaption;
end;


Способ №2

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012;
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;


Способ №3

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
if( ssLeft in Shift )then begin
 ReleaseCapture;
 SendMessage(Handle, WM_SYSCOMMAND, 61458, 0);
end;
end;


Все способы работают... Но я никак не пойму какой из них лучше(менее тормознутый). Тут есть еще небольшая проблема с первым способом, он перехватывает сообщения OnMouseDown..:( И у меня есть на форме кнопки на основе Image, они не нажимаются... Так что остается 2-й и 3-й или 1-й если там как-нибудь чтонибудь изменить :) Что посоветуете?


 
Shirson ©   (2005-02-02 17:36) [1]

Я способ №2 юзаю.


 
Dmitry_04   (2005-02-02 17:37) [2]

Мне кстати тоже так кажется что второй лучше :)


 
DVM ©   (2005-02-02 17:39) [3]

2) и 3) - это одно и то же.:)
Самый гибкий способ - 1)


 
remb   (2005-02-02 20:14) [4]

Все способы имеют проблемы со сдвиганием формы в самый верх эрана.


 
Dmitry_04   (2005-02-02 20:48) [5]

Точно... я сейчас попробовал и заметил... Как быть?


 
grom   (2005-02-02 20:57) [6]

var
f: boolean;
xx,yy: integer;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
f := true;
xx := x;
yy := y;
end;

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

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
if  not f then exit;
Left := Left + x - xx;
Top := Top + y - yy;
end;



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

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

Наверх




Память: 0.48 MB
Время: 0.057 c
14-1107155585
TUser
2005-01-31 10:13
2005.02.20
Бейсик


3-1106577778
DimonNew
2005-01-24 17:42
2005.02.20
Сохранение файлов в BLOB поле


8-1098822398
Destroyer
2004-10-27 00:26
2005.02.20
Как вызвать стандартное Windows-кое окно, для изменения яркости..


14-1107348880
Vlad Oshin
2005-02-02 15:54
2005.02.20
у кого нибудь компьютер W95 входит в домен W2000?


4-1105350722
Дармидон
2005-01-10 12:52
2005.02.20
Как из службы запустить программу?