Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TOpenDialog и OnTypeChange


Автор: artemiy 5.4.2007, 15:39
Мне нужно изменить значение ofAllowMultiSelect в зависимости от выбранного в данный момент фильтра. Делаю это во время события OnTypeChange. Вот код:
Код

procedure TForm1.OpenDialog1TypeChange(Sender: TObject);
begin
  MessageDlg(IntToStr(OpenDialog1.FilterIndex), mtConfirmation, [mbOK], 0);
  if OpenDialog1.FilterIndex=1 then OpenDialog1.Options:=[ofHideReadOnly,ofEnableSizing]
                               else OpenDialog1.Options:=[ofHideReadOnly,ofAllowMultiSelect,ofEnableSizing];
end;

А значение ofAllowMultiSelect все равно не изменяется. Где у меня ошибка?

Автор: ama_kid 5.4.2007, 15:47
а у тебя событие срабатывает?

Автор: Yanis 5.4.2007, 15:54
А то, что ты меняешь его Options никак не влияют на его работу. Вот при следующем вызове они повляют.

Автор: artemiy 5.4.2007, 15:56
Цитата(ama_kid @  5.4.2007,  15:47 Найти цитируемый пост)
а у тебя событие срабатывает?

Да, срабатывает.

Цитата(Yanis @  5.4.2007,  15:54 Найти цитируемый пост)
А то, что ты меняешь его Options никак не влияют на его работу. Вот при следующем вызове они повляют. 

А возможно ли сделать так, чтобы срабатывало при этом же вызове? И если да - то как?

Автор: Yanis 5.4.2007, 15:56
Если диалог уже вызван, то пока он не закроется, изменение опций не влияет.

Добавлено через 1 минуту и 8 секунд
Цитата(artemiy @  5.4.2007,  16:56 Найти цитируемый пост)
А возможно ли сделать так, чтобы срабатывало при этом же вызове?

Напиши свой диалог выбора файлов и папок. Так будет проще.
Ну или можно перевызывать диалог при смене фильтра, но это дурной тон.

Автор: Sunvas 5.4.2007, 15:59
artemiy, попробуй так:
Код

if OpenDialog1.FilterIndex=1 then opendialog1.Options:=opendialog1.Options+[ofAllowMultiSelect]
                               else opendialog1.Options:=opendialog1.Options-[ofAllowMultiSelect];


Автор: artemiy 5.4.2007, 16:04
Цитата(Sunvas @  5.4.2007,  15:59 Найти цитируемый пост)
artemiy, попробуй так:
if OpenDialog1.FilterIndex=1 then opendialog1.Options:=opendialog1.Options+[ofAllowMultiSelect]
                               else opendialog1.Options:=opendialog1.Options-[ofAllowMultiSelect];

Не работает  smile 

Автор: Yanis 5.4.2007, 17:06
Sunvas, artemiy
Ребят, что с вами? 
Посмотрите на реализацию
Код
function TOpenDialog.DoExecute(Func: Pointer; ParentWnd: HWND): Bool;

Надеюсь станет понятнее.
Это тоже самое, что запустить программу из IDDE, переписать код в редакторе и требовать его выполнять от работающей программы.

Автор: artemiy 5.4.2007, 17:20
Цитата(Yanis @  5.4.2007,  17:06 Найти цитируемый пост)
Sunvas, artemiy
Ребят, что с вами? 
....
Это тоже самое, что запустить программу из IDDE, переписать код в редакторе и требовать его выполнять от работающей программы.

Мечтать не вредно )) А вдруг бы такое возможно было? ))

Автор: Sunvas 5.4.2007, 18:39
Yanis, уже проштудировал. Я просто спокойно спать не смогу, если это не сделаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)