![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как показать форму аналогично PopupMenu [D7, WinXP]
alpha5 © (2007-06-15 21:23:00)У меня есть кнопка и форма. При щелчке на кнопку надо сделать так, чтобы форма появлялась около кнопки, как будто это был PopupMenu (чтобы форма не заходила за края экрана). Как это сделать?
Заранее спасибо!
JanMihail (2007-06-17 09:04:00) [1]var
HookHandle: hHook;
function HookProc(Code: integer; WParam: word; LParam: Longint): Longint; stdcall;
var
msg: PEVENTMSG;
begin
if Code >= 0 then
begin
result := 0;
msg := Pointer(LParam);
with Form1 do
case msg.message of
WM_LBUTTONUP:
begin
if WindowFromPoint(Mouse.CursorPos) <> Form1.Handle then
Caption:= 'была кликнута мышь вне моего приложения'
else
Caption:= 'была кликнута мышь на моем приложении'';
end;
end;
end else
result := CallNextHookEx(HookHandle, code, WParam, LParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.FormStyle := fsStayOnTop;
HookHandle := SetWindowsHookEx(WH_JOURNALRECORD, @HookProc, HInstance, 0);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if HookHandle <> 0 then
UnhookWindowsHookEx(HookHandle);
end;
alpha5 (2007-06-16 15:14:00) [2]Спасибо, получилось!
Но возник ещё вопрос:
Как сделать так, если пользователь щёлкнул вне формы, то её надо закрыть.
Как перехватить это событие?
JanMihail (2007-06-16 10:37:00) [3]Вычисляй Left и Top . Ставь форму на них и все.
TUser (2007-06-15 22:05:00) [4]У объекта Screen есть соотв. свойства. Они позволят узнать размеры экрана. У кнопки также есть координаты + координаты парентов.