Форум: "Начинающим";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
ВнизПочему то не вызывается событие OnShow компонента TOpenDialog Найти похожие ветки
← →
Anthony68 (2013-02-01 09:23) [0]Здравствуйте! Столкнулся с такой непонятной ситуацией:
Использую 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) - всё работает!
Сообщение "Диалог открылся..." - появляется на экране...
В чём причина?...
← →
O'ShinW © (2013-02-01 09:39) [1]1. На классике, без Аэро, и прочего - работает?
2. options ofOldStyleDialog = ?
← →
Rouse_ © (2013-02-01 10:46) [2]Потому что на семерке вместо TOpenDialog вызывается TFileOpenDialog который не перекрывает OnShow.
← →
Rouse_ © (2013-02-01 10:49) [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;
← →
O'ShinW © (2013-02-01 12:01) [4]
> Использую Delphi 2007.
почему то показалось просто 7.
На 7 под win7 при
> классике, без Аэро, и прочего
- работает.
а вызывается в двух случаях - по мессаджам TWMInitDialog и CDN_INITDONE
до CDN_INITDONE может не дойти, если
(Message.Msg = WM_INITDIALOG) and not (ofOldStyleDialog in Options) then Exit
← →
Anthony68 (2013-02-01 14:54) [5]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
Это - не знаю как использовать... Помогите пожалуйста.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.10.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c