Головна сторінка
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-х місцях:

використовує
..., MyFormUnit;

тип
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.58 MB
Час: 0.035 c
14-86096
RV
2002-12-05 11:24
2002.12.26
Мене на математику пробило ... e ^ (i pi) -1 = 0.


3-85821
міо
2002-12-03 14:11
2002.12.26
НЕ-мережевий обмін даними між двома БД


14-86125
Санчо
2002-12-05 17:38
2002.12.26
&&&&&&&&&&&&&


6-86066
k-sergey
2002-10-30 11:38
2002.12.26
Як відрубати немає в потім включити його ...


3-85816
Шурик Ш
2002-12-05 12:39
2002.12.26
Зміна типу поля





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська