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

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

ActionMainMenuBar и Border Icon [D7, XP]


D@nger ©   (2009-02-19 13:39:00) 

Здравствуйте мастера! Не раз Вы меня выручали, спасибо Вам и этому форуму! :-) Решил заменить в своём MDI приложении MainMenu на ActionMainMenuBar. Наверно мой вопрос не раз уже поднимался, но поиск по форуму ничего не дал. Но ближе к делу... В компоненте глюк с отображением иконок закрытия, сворачивания и разворачивания дочернего окна. Полазив по инету, находил решения на исправление кода компонента, но ссылки вели на уже закрытые сайты, т.е. внятного объяснения так и не нашел. Подскажите что в коде компонента ActionMainMenuBar необходимо исправить или дайте ссылку где это можно посмотреть. Может посоветуете другой компонент по визуализации не уступающий ActionMainMenuBar. Спасибо.


D@nger   (2009-02-20 09:59:00) [1]

Вот кому интересно... нашел исправление этой ошибки на китайском сайте...
Исправление надо внести в ActnMenus.pas (заменить соответствующую функцию следующей функцией)

function CallWndHook(Code: Integer; WParam: wParam; Msg: PCWPStruct): Longint; stdcall;

procedure UpdateMDIMenuButtons;
var  I: Integer;
Parent: THandle;
ParentForm: TWinControl;
Form: TCustomForm;
begin
Parent := GetParent(Msg.hwnd);
if Parent = 0 then exit;
ParentForm := FindControl(Parent);
for I := 0 to MenuList.Count - 1 do
begin
Form := GetParentForm(MenuList.Menus[I]);
if (Form = ParentForm) and
(MenuList.Menus[I] is TCustomActionMainMenuBar) then
begin
if (Msg.Message = WM_MDIDESTROY) and (Form is TForm) and
(TForm(Form).MDIChildCount = 1) then
with MenuList.Menus[I] as TCustomActionMainMenuBar do
MDIChildRestored
else
with MenuList.Menus[I] as TCustomActionMainMenuBar do
GetActiveMDIChild;
break;
end;
end;
end;

begin
if Code = HC_ACTION then
case Msg.message of
// Use of WM_SIZE is required for any Windows version except Themed XP
WM_MDIGETACTIVE, WM_SIZE,
WM_MDIDESTROY: UpdateMDIMenuButtons;
WM_ACTIVATE:
if ActiveMenu is TCustomActionPopupMenu then
ActiveMenu.CloseMenu;
WM_SETTINGCHANGE:
if Assigned(UpdateActnMenusProc) then
UpdateActnMenusProc;
end;
Result := CallNextHookEx(MenuCallWndHook, Code, WParam, Longint(Msg));
end;

Чтобы исправить закрытие окна при минимизации необходимо исправить следущее:

procedure TInternalMDIAction.ExecuteTarget(Target: TObject);
begin
case MDIAction of
maActivate: SendMessage(GetParent(Form.Handle), WM_MDIACTIVATE, Form.Handle, 0);
maClose: Form.Close;
maRestore: SendMessage(GetParent(Form.Handle), WM_MDIRESTORE, Form.Handle, 0);
// Fixed to minimize the form not close it
maMinimize: Form.WindowState := wsMinimized;
end;
end;


Всем спасибо за посильную помощь!!!Удачи!


D@nger   (2009-02-20 09:30:00) [2]

ладно...раз никто ни хочет помогать... закрываю тему...


D@nger   (2009-02-20 09:03:00) [3]

может его надо перекомпилировать...хотя в инструкции по установке ничего об этом не сказано...


D@nger   (2009-02-20 09:02:00) [4]

Обновление ошибку не исправило...хотя в ридми написано что исправления этого компонента есть...Fixed issues with TActionMainMenuBar not functioning correctly in MDI applications.

и что теперь делать... :(


D@nger   (2009-02-20 06:40:00) [5]

Actionbands Update for Delphi 7 скачал... если кому надо пишите... правда еще не проверял..исправляет ли ошибку в ActionMainMenuBar или нет ... как проверю отпишусь..


D@nger   (2009-02-20 06:23:00) [6]

Скажите пожалуйста у кого есть Actionbands Update for Delphi 7? Возможно он исправит этот глюк в ActionMainMenuBar.


D@nger   (2009-02-20 06:00:00) [7]

Неужели никто не сталкивался с этой проблемой! :(


D@nger   (2009-02-19 14:36:00) [8]

Может я недостаточно описал проблему... При создании дочернего окна оно разворачивается, но при этом нет кнопок закрытия, сворачивания... при входе в пункты меню, эти иконки появляются...при закрытии дочернего окна иконки остаются на месте...при нажатии на них вызывается ошибка..так как окно уже уничтожено... необходимо реализовать корректное отображение этих иконок...


Наверх

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