Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизСвойства формы, порождённой от TForm в инспекторе объектов. Найти похожие ветки
← →
AVR (2002-12-14 11:44) [0]Возможно смешной вопрос, но ответа не нашел. Как отобразить новое свойство новой формы TMyForm в инспекторе объектов ?
Type
TfrmDirEdit = class(TForm)
...
private
FRelations : TStrings;
procedure SetRelations ( ARelations : TStrings );
published
property Relations : TStrings
read FRelations
write SetRelations;
end;
Implementation
procedure TfrmDirEdit.SetRelations (
ARelations : TStrings );
begin
FRelations.Assign(ARelations);
end;
Всё работает в RunTime, а в Инспекторе объектов свойства Relations не видно. Такая же конструкция в новом
компоненте TMyComponent, порождённом от TComponent
хорошо работает и в инспекторе объектов свойство Relations
видно. Как отобразить свойство формы в Инспекторе?
← →
Юрий Зотов (2002-12-14 12:36) [1]Для этого форму нужно зарегистрировать вызовом RegisterCustomModule. Добавленные свойства появятся в ее потомках.
Скачайте с сайта Сергея Орлика
http://www.geocities.com/SiliconValley/Way/9006/index_r.html
его эксперт CCPack50. С его помощью Вы легко решите задачу.
Объект FRelations надо создать в конструкторе и уничтожить в деструкторе формы.
← →
AVR (2002-12-14 14:49) [2]Не ставится этот эксперт на D6.
Я посмотрел в исходники.
Возник вопрос: что такое RegisterCustomModuleProc?
Что выполняет эта процедура?
← →
Юрий Зотов (2002-12-14 15:21) [3]Что она делает - это целую лекцию по IDE писать нужно, причем не маленькую.
Попробуйте вот что.
1. Из модуля MyFormUnit с Вашей формой TMyForm уберите строку {$R *.DFN}.
2. Поместите этот модуль в любой design-time пакет, а в его процедуре Register сделайте вызов:
RegisterCustomModule(TMyForm, TCustomModule);
Затем, когда будете создавать новую форму, то сразу после ее создания ручками подправьте ее код в 2-х местах:
uses
..., MyFormUnit;
type
TForm1 = class(TMyForm);
...
По идее, это должно позволить обойтись и без эксперта.
← →
AVR (2002-12-16 11:31) [4]Спасибо за потраченное на меня время.
Ничего так и не получилось. Я надеялся, что
есть простой способ или я что-то неправильно
делаю. Вы не могли бы просто дать ссылку на
источник, где можно получить информацию по
данному вопросу - буду разбираться, со временем
всё получится.
← →
Calm (2002-12-16 11:45) [5]Я вот тоже хотел как-то решить аналогичную задачу, и тоже ничего не вышло. Не просто это - использовать RegisterCustomModuleProc, а литературы на эту тему я не видел. А хотелось бы увидеть...
← →
Юрий Зотов (2002-12-17 00:05) [6]> AVR © (16.12.02 11:31)
Что конкретно не получается? Давайте разберемся вместе, должно получиться.
> Calm © (16.12.02 11:45)
Да, это не очень просто (по сути, это уже программирование самой среды, что считается как бы вершиной знания Delphi). И документации действительно очень мало.
Но разобраться, тем не менее можно. Для начала советую посмотреть каталоги ($DELPHI)\Source\ToolsAPI и ($DELPHI)\Demos\ToolsAPI. Далее - ищите все, что касается OTAPI (Open Tools API).
Хотя я считаю, что браться за такие вещи может тот, кто уже свободно владеет написанием компонентов и их редакторов. Иначе рановато - еще нет нужной базы. Но это лишь мое мнение (впрочем, не только мое).
← →
Набережных С. (2002-12-17 01:51) [7]Объяснять тут, действительно, долго. Но, может на примере будет проще.
unit SuperFormExp;
interface
uses
Windows, SysUtils, Classes, Dialogs,
ToolIntf, ExptIntf, Menus, VirtIntf,
EditIntf, IStreams;
type
TSuperFormExp = class(TIExpert)
private
public
function GetAuthor: string;override;
function GetStyle: TExpertStyle; override;
function GetState: TExpertState; override;
function GetMenuText: string; override;
function GetGlyph: HICON; override;
function GetPage: string; override;
function GetIDString: string; override;
function GetComment: string;override;
function GetName: string;override;
procedure Execute; override;
end;
procedure Register;
implementation
uses
DesignEditors, DesignIntf, Proxies, SuperForm;
procedure Register;
begin
RegisterCustomModule(TSuperForm, TCustomModule);
RegisterLibraryExpert(TSuperFormExp.Create);
end;
const
Template =
"unit %s;"+#13#10+
#13#10+
"interface"+#13#10+
#13#10+
"uses"+#13#10+
" Windows, Messages, SysUtils, Variants,"+#13#10+
" Classes, Graphics, Controls, Forms,"+#13#10+
" Dialogs;"+#13#10+
#13#10+
"type"+#13#10+
" TSuperForm%s = class(TSuperForm)"+#13#10+
" private"+#13#10+
" { Private declarations }"+#13#10+
" public"+#13#10+
" { Public declarations }"+#13#10+
" end;"+#13#10+
#13#10+
"implementation"+#13#10+
#13#10+
"{$R *.dfm}"+#13#10+
#13#10+
"{ TSuperForm%s }"+#13#10+
#13#10+
"end."+#13#10;
{ TSuperFormExp }
procedure TSuperFormExp.Execute;
var
Frm: TSuperForm;
UID,UName,FID,ID,Source: string;
UnitStm, FormStm: TIMemoryStream;
StmF, StmU: TMemoryStream;
begin
Frm:=TSuperForm.Create(nil);
ToolServices.GetNewModuleName(UID,UName);
ID:=Copy(UID,5,Length(UID));
FID:="SuperForm"+ID;
CreateSubClass(Frm,"T"+FID,TSuperForm);
StmF:=TMemoryStream.Create;
StmF.WriteComponentRes(FID,Frm);
Frm.Free;
FormStm:=TIMemoryStream.Create(StmF,soOwned);
Source:=Format(Template,[UID, ID, ID]);
StmU:=TMemoryStream.Create;
StmU.Write(Source[1],Length(Source));
UnitStm:=TIMemoryStream.Create(StmU,soOwned);
ToolServices.CreateModule(UName,UnitStm,FormStm,[cmAddToProject,cmShowSource,cmShowForm,cmUnNamed,cmMarkModified]);
end;
function TSuperFormExp.GetAuthor: string;
begin
Result:="AVR mailto:brat_andrew@mail.ru";
end;
function TSuperFormExp.GetComment: string;
begin
Result:="No comment";
end;
function TSuperFormExp.GetGlyph: HICON;
begin
Result:=0;
end;
function TSuperFormExp.GetIDString: string;
begin
Result:="AVR.SuperFormExp";
end;
function TSuperFormExp.GetMenuText: string;
begin
Result:="";
end;
function TSuperFormExp.GetName: string;
begin
Result:="SuperForm Expert";
end;
function TSuperFormExp.GetPage: string;
begin
Result:="AVR forms";
end;
function TSuperFormExp.GetState: TExpertState;
begin
Result:=[esEnabled];
end;
function TSuperFormExp.GetStyle: TExpertStyle;
begin
Result:=esForm;
end;
end.
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.006 c