Форум: "WinAPI";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
ВнизКак сделатьмагнит? Найти похожие ветки
← →
Snake2000 (2001-12-11 13:14) [0]Интересный вопрос - как при перемещении формы наладить возможность примагничивания ее к краям экрана (как у WinAmp"а)???
← →
Delirium (2001-12-11 13:50) [1]Попробуй :)
procedure TForm1.Timer1Timer(Sender: TObject);
begin // Interval=1
Form2.Left:=Form1.Left+Form1.Width;
Form2.Top:=Form1.Top;
end;
← →
snake2000 (2001-12-11 13:56) [2]Спасибо.. Сейчас попробую....
← →
Delirium (2001-12-11 13:57) [3]А если поискать в Help-е, то так :
...
procedure OnMove(var Msg:TMessage); message WM_MOVE;
...
procedure TForm1.OnMove(var Msg:TMessage);
begin
if Form2<>nil then
begin
Form2.Left:=Form1.Left+Form1.Width;
Form2.Top:=Form1.Top;
end;
end;
← →
snake2000 (2001-12-11 14:09) [4]А почему 2 формы : 1 и 2 ???
← →
Delirium (2001-12-11 14:12) [5]А сколько надо? Последний пример более грамотный - так и надо делать, можешь прописать это событие во все свои формы :)
← →
snake2000 (2001-12-11 14:21) [6]Мне нужно чтобы к краям экрана примагничивалась!!!
← →
Delirium (2001-12-11 14:23) [7]Ну так отслеживай в том-же событии Top и Left !
Размер экрана: Screen.Height и Screen.Width :)
← →
snake2000 (2001-12-11 14:28) [8]А когда возникает это событие - в процессе движения, или только после его завершения?
← →
Delirium (2001-12-11 14:39) [9]А как это в процессе? Естествено, после каждого минимального премещения.
← →
snake2000 (2001-12-11 14:40) [10]Все работает, но только форма мигает при примагничивании, а кусок кода вот:
procedure TForm1.OnMove(var Msg:TMessage);
begin
if Form1.Left <50 then Form1.Left:=0;
if Form1.Top <50 then Form1.Top:=0;
if Form1.Left >Screen.Width-50-Form1.width then
Form1.Left:=Screen.Width-Form1.width;
if Form1.Top >Screen.Height-50-Form1.height then
Form1.Top:=Screen.height- Form1.height;
end;
end;
← →
Delirium (2001-12-11 14:49) [11]Естественно - событие-то продолжает работать! Заведи глобальную переменную, которая после "примагничивания" становилась бы False и блокировала бы обработку. А в True можно превращать в OnMouseDown :)
← →
Snake2000 (2001-12-11 15:01) [12]Ничерта не понял.... Объясни, плиз, поподробнее...
← →
Delirium (2001-12-11 15:20) [13]Я тут поэксперинтировал, думаю стоит самому форму вслед за мышой двигать, тогда всё упрощается:
var oX,oY,i:integer; B:boolean;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
B:=True;
i:=0;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if i=2 then
begin
B:=True;
i:=0;
end;
if (ssLeft in Shift) and B then
begin
B:=False;
SetWindowPos(Form1.Handle,
HWND_TOPMOST,
Form1.Left+X-oX,
Form1.Top+Y-oY,
Form1.Width,
Form1.Height,
SWP_DRAWFRAME);
// Сдвинул, и всё остальное сделал
end;
i:=i+1;
oX:=X;
oY:=Y;
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.073 c