Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.016 c
14-86104
AFAIR
2002-12-05 10:05
2002.12.26
Недел так эннадцать назад тут пробегала тема слабого человека...


7-86197
Eduard_
2002-10-22 10:16
2002.12.26
Active Directory Services


1-86011
Acorus
2002-12-16 14:20
2002.12.26
Помогите с деревом :)


1-85988
Самовар - Чайник
2002-12-15 20:29
2002.12.26
Что такое MSDN, с чем его едят и где его можно взять ?


14-86158
Alexei113
2002-12-05 22:58
2002.12.26
Как сделать свой help