Главная форма BorderStyle = bsNone. Сделал выезжающее сверху меню по кнопке на главной форме. Меню реализовано в виде отдельной формы (BorderStyle = bsSingle) которая содержит только компонент TMainMenu. То есть при нажатии на кнопку сверху главной формы появляется для пользователя как бы такая себе надстройка с главным меню программы. Перемещение двух форм сразу при перемещении одной из них реализовал, это несложно, достаточно перехватить сообщение WM_MOVING на обоих формах. Также сделал чтобы при работе с системными кнопками в форме меню действия применялись ко всему приложению (то есть минимизация и закрытие) — тут перехватил сообщение WM_SYSCOMMAND. Вот только есть одна "некрасивость". Если отображается форма меню и при этом пользователь работает с главной формой, то меню становится неактивным, это и понятно в общем то потому как в данный момент активна главная форма, но в этом случае возникает ощущение того, что приложение в целом неактивно. Как сделать так, чтобы при работе с главной формой, верхняя, встроенная форма с меню тоже была активна. Я попытался перехватить у главной формы сообщение WM_ACTIVATE и отправлять это же сообщение форме с меню, но получается что при любой активности на главной форме фокус сразу переводится на верхнюю форму, а нужно добиться только "активного цвета" ее заголовка но не фокуса. Буду благодарен за советы. Спасибо.
Честно говоря, не особо врубился в желаемое, но советую обратить внимание на сообщение WM_NCPAINT и на api-шную функцию, кажется, DrawCaption — примерно так.
Здравствуйте, Softwarer, Вы писали:
S>Здравствуйте, delphinchik, Вы писали:
S>Честно говоря, не особо врубился в желаемое, но советую обратить внимание на сообщение WM_NCPAINT и на api-шную функцию, кажется, DrawCaption — примерно так.
Желаемое: необходимо чтобы при работе в главной форме, верхняя форма с меню продолжала быть активной.
Здравствуйте, delphinchik, Вы писали:
S>>Честно говоря, не особо врубился в желаемое, но советую обратить внимание на сообщение WM_NCPAINT и на api-шную функцию, кажется, DrawCaption — примерно так. D>Желаемое: необходимо чтобы при работе в главной форме, верхняя форма с меню продолжала быть активной.
Визуально или как? Если визуально, то меню в якобы активном состоянии несложно и самому нарисовать.
Здравствуйте, DarkMaster, Вы писали:
DM>Здравствуйте, delphinchik, Вы писали:
S>>>Честно говоря, не особо врубился в желаемое, но советую обратить внимание на сообщение WM_NCPAINT и на api-шную функцию, кажется, DrawCaption — примерно так. D>>Желаемое: необходимо чтобы при работе в главной форме, верхняя форма с меню продолжала быть активной.
DM>Визуально или как? Если визуально, то меню в якобы активном состоянии несложно и самому нарисовать.
Да, визуально.
procedure TMainForm.WMActivate(var Msg: TWMActivate);
var
Rect:TRect;
begin
inherited;
if (FMenu <> nil) then
begin
Rect:=Bounds(FMenu.Left, FMenu.Top, FMenu.ClientWidth, FMenu.ClientHeight);
DrawCaption(FMenu.Handle, GetWindowDC(FMenu.Handle), Rect, DC_ACTIVE);
end;
end;
Здравствуйте, delphinchik, Вы писали:
D>Спасибо большое, то что надо. D>P.S. Вот только сделать это нужно было на форме с меню, ведь мне нужно чтобы она никогда не теряла активность...
Слабо обратил внимание на какокй именно, важно было — что сделать