Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.16.66.206] |
|
Сообщ.
#1
,
|
|
|
Вместо диалогового окна открытия файлов создаваемое в процедуре Edit, появляется диалоговое окно открытия файлов с параметрами по умолчанию. Т.е. даже фильтр *.* Похоже, что процедура не срабатывет.
Как решить проблему? unit desMBList; interface uses SysUtils, DesignIDE, DesignEditors, DesignIntf, TypInfo, Dialogs, MBList1; type TFileNameProperty = class(TPropertyEditor) // редактор свойств для выбора файла XML public function GetAttributes: TPropertyAttributes; override; procedure Edit; override; end; procedure Register; implementation procedure Register; begin RegisterPropertyEditor(TypeInfo(TFileName), TMBList, 'XMLDocumentPath', TFileNameProperty); end; function TFileNameProperty.GetAttributes: TPropertyAttributes; begin Result := [paDialog]; end; procedure TFileNameProperty.Edit; var OpenDialog: TOpenDialog; begin OpenDialog:=TOpenDialog.Create(nil); try OpenDialog.Title := 'Выберите xml файл.'; OpenDialog.FileName := ''; OpenDialog.Filter := 'XML Files (*.xml)|*.xml'; OpenDialog.HelpContext := 0; OpenDialog.Options := OpenDialog.Options + [ofPathMustExist, ofFileMustExist, ofForceShowHidden]; if OpenDialog.Execute then //SetValue(OpenDialog.Filename); finally OpenDialog.Free; end; end; end. Я реорганизовал проект, как было расписано в Где искать DsgnIntf.dcu, DesignIDE.dcu и Proxies.pas?. Но, похоже, что вышеуказанный (Design-time) код не присоединяется к коду компонента (Run-time). |
Сообщ.
#2
,
|
|
|
1. Добавьте desMBList в инсталиционный пакет
2. Добавьте в пакет DesignIde.dcp (DelphiX\Lib) 3. Instal |
Сообщ.
#3
,
|
|
|
Цитата DimaBr @ 1. Добавьте desMBList в инсталиционный пакет Если вы о uses, то выдается ошибка Circular unit references, т.к. по инструкции (ссылку я указал выше) в desMBList в uses я указал MBList (главный пакет). Если о desMBList.dcp то не работает. Вроде даже не привязывается этот файл. |
Сообщ.
#4
,
|
|
|
У вас есть пакет, которым вы инсталлируете свой компонент в палитру. Вот туда и нужно добавить файл регистрации редактора свойства, а в Requires - DesignIde. Делается это кнопочкой Add.
|
Сообщ.
#5
,
|
|
|
Пробовал. Может у Вас получится. Вполне вероятно, что я не правильно реорганизовал прект. Delphi 7.
MsBList.7zMBList.7z (16,01 Кбайт, скачиваний: 178) |
Сообщ.
#6
,
|
|
|
1. Уберите в desMBList "uses DesignIDE"
2. Уберите из первого пакета DesignIDE 3. Добавьте во второй пакет DesignIDE |
Сообщ.
#7
,
|
|
|
Цитата DimaBr @ 1. Уберите в desMBList "uses DesignIDE" 2. Уберите из первого пакета DesignIDE 3. Добавьте во второй пакет DesignIDE Что считать первым пакетом, что вторым? |
Сообщ.
#8
,
|
|
|
В приложенном примере два пакета (dpk) (Хотя это можно объеденить и в один).
Первый пакет Package1.dpk инсталирует компонент в палитру компонентов. (если в опциях поставить RunTime Only), то будет возможность подгружать ваш компонент в приложение в виде библиотеки (bpl), но об этом пока рано. Второй пакет desPackage1.dpk инсталирует редактор свойства. На нём стоит галочка DedignTime Only и это правильно ! Если вы не собираетесь использовать компонент в библиотеках, динамически подгружать (LoadLibrary), и динамически создавать, то можно объединить RunTime и DesignTime в один пакет, поставить соответствующую галочку добавить оба ваших файла (с компонентом и редактором), добавить пакет дизайнера - DesignIde. |
Сообщ.
#9
,
|
|
|
При попытке инсталляции объединенного компонента (с файлами MBList.pas и desMBList.pas в одном пакете .bpl) IDE намертво виснет. Такое же было когда весь код был в одном файле.
|
Сообщ.
#10
,
|
|
|
Повторяю ещё раз, выполните пункт № 1. Уберите DesignIDE в секции USES файла desMBList.pas
|
Сообщ.
#11
,
|
|
|
Ура получилось установить компонент!
Но в редакторе свойств после выбора файла пишет [Unknown] unit desMBList; interface uses Forms, Classes, SysUtils, DesignEditors, DesignIntf, TypInfo, Dialogs, MBList1; type TFileNameProperty = class(TPropertyEditor) // редактор свойств для выбора файла XML public function GetAttributes: TPropertyAttributes; override; procedure Edit; override; end; procedure Register; implementation procedure Register; begin RegisterPropertyEditor(TypeInfo(TFileName), TMBList, 'XMLDocumentPath', TFileNameProperty); end; function TFileNameProperty.GetAttributes: TPropertyAttributes; begin Result := [paDialog]; end; procedure TFileNameProperty.Edit; begin with TOpenDialog.Create(Application) do try Filter := 'XML Files (*.xml)|*.xml'; Title := 'Выберите файл со списком параметров'; HelpContext := 0; FileName := GetStrValue; Options := Options + [ofPathMustExist, ofFileMustExist, ofForceShowHidden]; if Execute then SetStrValue(FileName); finally Free; end; end; end. |
Сообщ.
#12
,
|
|
|
TFileNameProperty = class(TStringProperty) |
Сообщ.
#13
,
|
|
|
Спасибо! Бальшущий вопрос решен.
|