Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

popup menu при перетаскивании за клиент. область [D7, WinXP]


click ©   (2006-10-23 18:18:00) 

Для перетаскивания формы за клиентскую область использую следующий код:

procedure TForm1.WMNCHitTest(var m:TWMNCHitTest);
begin
inherited;
if m.Result=htclient then          
m.Result:=htcaption;
   end;


теперь возникла необходимость установить поп'ап меню на этой же форме... только вот есть проблема: не "поп'апится" :) оно, да и событие onclick с условием на правую кнопку не наступает никогда (чтоб вручную заставить его "выпасть")...
Подскажите плиз как изменить приведенный код так чтоб он позволял обрабатывать и другие события на форме, либо как с этим кодом заставить меню "выпадать"


Palladin   (2006-10-23 18:51:00) [1]


> click

гыгы... а много "чудовищ", не вызваших Кэтмара на бой или хотя бы не тех кто не развел его на код, сомневаются...
однако, не умеют разводить :)


Ketmar   (2006-10-23 18:51:00) [2]

>[4] click 23-Oct-2006, 18:47
>ты лучший!
это не я. это поисковики. %-) я только процитировал. %-)


click   (2006-10-23 18:47:00) [3]


> Ketmar ©   (23.10.06 18:38) [3]


ты лучший!


click   (2006-10-23 18:38:00) [4]


> Джо ©   (23.10.06 18:26) [1]
>
> Приведенный код обманным путем создает видимость того, что
> щелкнули не на клиенской области, а на заголовке окна.


ну это та я понимаю ... ;)


>Его нужно переписать. Например, так:


спасибо Джо ! Но так хотелось что-нибудь коротенькое...
об этом варианте (неповериш естественно :) ) я думал... но корявенький он какой то... но как бы там ни было, спасибо!!!


Ketmar   (2006-10-23 18:38:00) [5]

>[1] Джо(c) 23-Oct-2006, 18:26
садюга.

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y:Integer);
const
 SC_DRAGMOVE = $F012;
begin
 // Если нужно вывести меню - выходим, а по левой кнопке просто перетаскиваем.
 if Button=mbRight then exit;
 ReleaseCapture();
 Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;


Джо   (2006-10-23 18:26:00) [6]

Приведенный код обманным путем создает видимость того, что щелкнули не на клиенской области, а на заголовке окна. Как его можно исправить? Да никак не нужно. Его нужно переписать. Например, так:

 TForm1 = class(TForm)
   procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
   procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
     Y: Integer);
 private
   LastPt: TPoint;
   Moving: Boolean;
 end;
...
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 if Button = mbLeft then
 begin
   LastPt.X := X;
   LastPt.Y := Y;
   Moving := True;
 end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 Moving := False
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if Moving then
 begin
   Left := Left + X - LastPt.X;
   Top := Top + Y - LastPt.Y;
 end;
end;


:)


Наверх

Титульная страница Поиск, карта сайта Написать письмо