Вниз
Скачать: CL | DM;

Почему то не вызывается событие 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.004 c
2-1359632987
SSS
2013-01-31 15:49
2013.10.27
Перерисовка компонентов


2-1359654647
berrimor
2013-01-31 21:50
2013.10.27
координаты второго монитора


2-1359636319
Scott Storch
2013-01-31 16:45
2013.10.27
Где взять координаты домов всех улиц населенных пунктов


15-1368477002
Юрий
2013-05-14 00:30
2013.10.27
С днем рождения ! 14 мая 2013 вторник


2-1360060314
Чайник
2013-02-05 14:31
2013.10.27
Как поместить картинки в ComboBoxEx




   Наверх