Головна сторінка
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.024 c
14-86116
JC
2002-12-04 01:23
2002.12.26
Need Help


3-85786
бобер
2002-12-05 16:44
2002.12.26
IB


1-85885
Кокандокало
2002-12-16 19:44
2002.12.26
Великий обсяг даних в TTreeView і проблеми з їх перемальовуванням


14-86124
Slava_K
2002-12-05 09:17
2002.12.26
Пакет оновлень SP для Delphi 7


1-85892
Serg_ua
2002-12-16 22:46
2002.12.26
клавіатура





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