Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

Свойства формы, порождённой от 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.59 MB
Время: 0.042 c
14-86111
Сергей Бушин
2002-12-05 15:04
2002.12.26
Конфликты с драйверами


14-86177
Separator
2002-12-06 11:10
2002.12.26
Поиск в массиве.


3-85783
Андрусь
2002-12-03 20:37
2002.12.26
как оптимально обработать разделенный запрос


1-85949
Tik
2002-12-15 06:46
2002.12.26
TreeView


14-86079
Кокандокало
2002-12-06 14:35
2002.12.26
Чем сжимать программы на дельфи ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский