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

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

Почему то не вызывается событие OnShow компонента TOpenDialog [D2005]


Anthony68 ©   (2013-02-01 09:23:00) 

Здравствуйте! Столкнулся с такой непонятной ситуацией:
Использую Delphi 2007.
На новую, совершено пустую форму кидаю (не мняя никаких параметров по умолчанию) 2 компонента:

1) Диалог TOpenDialog, в его событие OnShow вставляю строку:
 Application.MessageBox('Диалог открылся...', 'Сообщение', mb_IconInformation);


2) Кнопку TButton, в её событие OnClick записываю:
 OpenDialog1.Execute;


Компилирую программу. Запускаю под Windows 7 - сообщение, внесённое в метод OnShow - не выдаётся, пробовал использовать отладчик - в OnShow вообще не заходит....
Запускаю этот же EXE-шник под Windows XP (точнее под эмулятором XP, поскольку у меня на компьютере установлена Windows 7) - всё работает!
Сообщение "Диалог открылся..." - появляется на экране...

В чём причина?...


Anthony68   (2013-02-01 14:54:00) [1]

Rouse_, текст функции DoExecute соответствует тому, что Вы привели.
O'ShinW, options ofOldStyleDialog = False или Truу - это ничего не меняет.
Под Windows 7 (неважно Aero или нет) - OnShow - не вызывается. Тот же EXE файл запущенный под Windows XP - вызывает OnShow.


> а вызывается в двух случаях - по мессаджам TWMInitDialog
> и CDN_INITDONEдо CDN_INITDONE может не дойти, если  (Message.
> Msg = WM_INITDIALOG) and not (ofOldStyleDialog in Options)
> then Exit


Это - не знаю как использовать... Помогите пожалуйста.


O'ShinW   (2013-02-01 12:01:00) [2]


> Использую Delphi 2007.

почему то показалось просто 7.
На 7 под win7 при
> классике, без Аэро, и прочего

- работает.

а вызывается в двух случаях - по мессаджам TWMInitDialog и CDN_INITDONE
до CDN_INITDONE может не дойти, если
(Message.Msg = WM_INITDIALOG) and not (ofOldStyleDialog in Options) then Exit


Rouse_   (2013-02-01 10:49:00) [3]

Хотя вообще странно, судя по коду при перекрытом событии OnShow должен вызываться стандартный диалог.

 if (Win32MajorVersion >= 6) and UseLatestCommonDialogs and (Template = nil) and
    not (Assigned(FOnIncludeItem) or Assigned(FOnClose) or Assigned(FOnShow)) then
 begin
   // This requires Windows Vista or later
   if Func = @GetOpenFileName then
     FileDialogWrapper := TFileOpenDialogWrapper.Create(Self)
   else
     FileDialogWrapper := TFileSaveDialogWrapper.Create(Self);

   try
     Result := FileDialogWrapper.Execute(ParentWnd);
   finally
     FileDialogWrapper.Free;
   end;
   Exit;
 end;


Проверь у себя реализацию функции:
function TOpenDialog.DoExecute(Func: Pointer; ParentWnd: HWND): Bool;


Rouse_   (2013-02-01 10:46:00) [4]

Потому что на семерке вместо TOpenDialog вызывается TFileOpenDialog который не перекрывает OnShow.


O'ShinW   (2013-02-01 09:39:00) [5]

1. На классике, без Аэро, и прочего - работает?
2. options ofOldStyleDialog = ?


Наверх

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