Форум: "Основная";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];
ВнизПеретаскивание формы за 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.036 c