Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
ВнизПеретаскивание формы не только за её caption Найти похожие ветки
← →
_Smart (2002-06-24 03:54) [0]Подозреваю, что вопрос уже избитый, но все же...
Как мне сделать так, чтобы форма перетаскивалась, не за каптион, а за, скажем, лэйбл?
← →
tsarevep (2002-06-24 06:35) [1]Вот тебе простой варварский способ будет просто таскаться за твой лэйбл.
unit UnitMain;
interface
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,ExtCtrls{обязательно},
StdCtrls, Forms, Dialogs;
type
TForm1 = class(TForm)
Label1: TLabel;
procedure Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If ssLeft In Shift Then
Begin
ReleaseCapture;
SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0);
End;
end;
end.
← →
tsarevep (2002-06-24 06:49) [2]Глючит меня чего то с утра пораньше.
На ExtCtrls не надо ссылаться.
← →
Юрий Зотов (2002-06-24 09:08) [3]А если в обработчике WM_NCHITTEST вернуть HTCAPTION, то будет перетаскиваться вообще за что угодно, кроме дочерних окон. Даже за пустое место. Пишется в 2 строки.
← →
AK-74 (2002-06-24 12:49) [4]
TForm1 = class(TForm)
...
private
...
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
...
end;
...
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { вызов унаследованного обработчика }
if M.Result = htClient then { Мышь сидит на окне? }
M.Result := htCaption; { Если да - то пусть Windows думает, что }
{ мышь на caption bar }
end;
...
Окно можно сделать вообще без caption.
← →
DeMoN-777 (2002-06-24 12:54) [5]А я предлагаю такой вариант...........
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
if button=mbleft then
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;
end;
← →
.: Joiro :. (2002-06-24 13:31) [6]Во, как раз недавно хотел спросить - может знатоки знают.
Я всегда использую то что предложил DeMoN-777 - этот пример встречается в большинстве зарубежных примеров. А в русских ресурсах почти везде вариант с "подсовыванием" Caption.
И вот хотелось бы узнать - есть ли разница в эффективности, оптимальности?
Не Caption"овский вариант на глаз кажется приятнее... :)
← →
DeMoN-777 (2002-06-24 14:57) [7]Я конечно могу предложить ещё другой вариант........
Mailto: Demon-777@yandex.ru
;)
← →
.: Joiro :. (2002-06-24 15:05) [8]Можно ведь и поделится с другими... зачем сразу по почте. :)
Другой вариант получше или просто "прикола ради"? А то вариантов почти на всё что угодно есть три-четире или больще но главное оптимальность.
← →
Exploited (2002-06-24 16:34) [9]Нужно обработчик события onMouseDown изменить так:
Const
sc_dragMove = $f012;
...
TForm1.MouseDown(....);
Begin
ReleaseCapture;
SendMessage((Sender as TWinControl).Handle,wm_syscommand,sc_dragMove,0);
End;
← →
Song (2002-06-24 17:51) [10]ИМХО F012h только для ленивцев...
← →
Exploited (2002-06-24 18:30) [11]Почему только для ленивцев?
Извините за серость. Что такое ИМХО?
← →
Song (2002-06-24 18:39) [12]Потому что здесь головой думать не надо, послал сообщение и всё за тебя сделают. WM_NCHITTEST хоть и ерундовое сообщение, но всё-таки подумать хотя бы первый раз при использовании - надо.
ИМХО=IMHO=In My Humble Opinion=По моему скромному мнению
← →
Exploited (2002-06-24 19:26) [13]Так всё же: какой способ лучше, корректнее, что-ли?
А если нужно, чтобы мышью можно было потаскать за любой компонент на форме? Надеюсь, автор данного вопроса (_Smart) простит меня за вторжение, но начинать новую тему по этому вопросу было бы глупо.
← →
Song (2002-06-24 20:31) [14]2Exploited (24.06.02 19:26)
Если любой визуальный то, F012h
← →
Юрий Зотов (2002-06-24 23:22) [15]> какой способ лучше, корректнее
Никакой. Все зависит от конкретной задачи. Ясно только, что способы с F012 и HTCAPTION намного проще, короче и эффективнее. И что способ с HTCAPTION - легальный (в отличие от недокументированной константы F012). Но это все.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c