![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему то не вызывается событие 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 = ?