Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Object inspector 
:(
    Опции темы
Frees
Дата 21.3.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Суть проблемы : делаю родительскую форму в ней в блоке published описываю ряд property

после того как создаю потомков от етой формы хотелось бы чтобы созданные в родителе property были видны
в Object inspector, но етого не происходит

Как решить такую проблему,

PS использую Delphi 2006


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
bems
Дата 21.3.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



имхо никак

иначе бы все невизуальные компоненты типа "форма с заливкой" или "непрямоугольная форма" были бы наследниками формы, а не невизуальными компонентами


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Romikgy
Дата 21.3.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Имхо твою форму надо зарегестрировать в дельфи, а вот как я не в курсе smile
(это по аналогии с компонентами говорю)


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Frees
Дата 22.3.2006, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата

Имхо твою форму надо зарегестрировать в дельфи, а вот как я не в курсе


а кто нить в курсе?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Snowy
Дата 22.3.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



IMHO никак.
PM MAIL   Вверх
Alexeis
Дата 22.3.2006, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Я думаю что способ всетаки есть. Ведь в delphi ничего уникального для класса tform не делалось, а работает ведь. Вообше среда делфи может много (даже програмировать себя). Сам ищу подобную информацию.
Frees, не унывай я считаю что ответ "никак" здесь не совсем верный.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alex
Дата 22.3.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 80
Всего: 162



Ответ ни как конечно не совсем точен, т.к. кто мешает эту форму оформить ввиде компонента и вы получите, что хотите.

Object Inspector показывает published свойства компонентов, а вы создаете свою форму на основе некой базовой, но для Object Inspector она как была обычной формой так формой и осталась.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alexeis
Дата 22.3.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Вообщем нашел решение правда для делфи 4.
Есть для этого оказываетя специальный пакет
вот ссылка


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Frees
Дата 22.3.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



как то с етим компонентом в В2006 глухо


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Msl
Дата 23.3.2006, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 18.8.2005

Репутация: нет
Всего: нет



Хотел бы напомнить: У Борланд есть два ключевых момента,
связанных с основным отличием Delphi/Builder от всех прочих
визуальных сред программирования.


1. RTTI -механизм/способ доступа к зарегистрированным
(помеченным как published) свойствам объектов

2. ToolsAPI -способ доступа к зарегистрированным объектам и
зарегистрированным свойствам объектов под Delphi IDE

Думается, что Все идеи, которые изложены ниже относятся к ко всем версиям Delphi

C Delphi 2005-2006 не работал, но думаю что Борланд свой конек сохранила и там.

Для начала проверь, есть ли аналоги процедур

RegisterClass, RegisterClasses,RegisterCustomModule в библиотеках Delphi 2006.


См. книги и примеры Delphi Developer HandBook, Mastering Delphi (на marcocantu.com)

{
This explains how to set up a new form descendant which will have editable
properties via the object inspector
}

Код


{In Delphi 3.0 there is a new approach which you can use that I will try
to briefly describe.  The idea is to use a custom module to create a new
form class that has new properties etc.  This can be done by registering a
classtype with the IDE by calling RegisterCustomModule (in the expert API).
 With a custom module you can add your own new properties to forms which
will appear in the object inspector.  The mechanism to get this to work is
as follows: 

- Create a unit that declares your new form class descending from TCustomForm
- Create an expert that will generate a new instance of the above class in
  the IDE
- Install the expert in the IDE by including the expert unit below in a new
  package and simply install the package.

Once you have followed these steps you will have a new item on the Form
page of the File|New dialog which will be your new form class.

The new form class unit:}
>>>> Begin unit <<<<<<

unit myForm;

interface

uses Messages, Windows, SysUtils, Classes, Controls, Forms;

type
  TMyForm = class(TCustomForm)
  private
    FNewProp: String;  
  protected
  public
  published
    property NewProp: String read FNewProp write FNewProp;  // ex. of a new form property
    property ActiveControl;
    property Align;
    property AutoScroll;
    property BorderStyle;
    property BorderIcons;
    property Caption stored True;
    property ClientHeight;
    property ClientWidth;
    property Color;
    property DragCursor;
    property DragMode;
    property Enabled;
    property Font;
    property Height stored True;
    property HorzScrollBar;
    property KeyPreview;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PixelsPerInch;
    property PopupMenu;
    property PrintScale;
    property Scaled;
    property ShowHint;
    property TabStop;
    property VertScrollBar;
    property Width stored True;
    property OnActivate;
    property OnClick;
    property OnClose;
    property OnCloseQuery;
    property OnCreate;
    property OnDblClick;
    property OnDestroy;
    property OnDeactivate;
    property OnDragDrop;
    property OnDragOver;
    property OnHide;
    property OnHelp;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnPaint;
    property OnResize;
    property OnShow;
  end;

implementation

end.
>>>>  end unit <<<<

{Here is the expert necessary to create instances of this class from the IDE:}
>>>> begin expert <<<<
unit newmod;

interface

procedure Register;

implementation

uses Windows, SysUtils, Classes, Controls, Forms, ExptIntf, ToolIntf,
VirtIntf,
  IStreams, DsgnIntf, MyForm;

type
  TMyFormExpert = class(TIExpert)
    function GetName: string; override;
    function GetComment: string; override;
    function GetGlyph: HICON; override;
    function GetStyle: TExpertStyle; override;
    function GetState: TExpertState; override;
    function GetIDString: string; override;
    function GetAuthor: string; override;
    function GetPage: string; override;
    function GetMenuText: string; override;
    procedure Execute; override;
  end;

{ TMyFormExpert }

function TMyFormExpert.GetName: string;
begin
  Result := 'My Form';
end;

function TMyFormExpert.GetComment: string;
begin
  Result := 'Custom form';
end;

function TMyFormExpert.GetGlyph: HICON;
begin
  Result := LoadIcon(HInstance, '');
end;

function TMyFormExpert.GetStyle: TExpertStyle;
begin
  Result := esForm;
end;

function TMyFormExpert.GetState: TExpertState;
begin
  Result := [esEnabled];
end;

function TMyFormExpert.GetIDString: string;
begin
  Result := 'MyForm.Expert';
end;

function TMyFormExpert.GetAuthor: string;
begin
  Result := 'Borland';
end;

function TMyFormExpert.GetPage: string;
begin
  Result := 'Forms';
end;

function TMyFormExpert.GetMenuText: string;
begin
  Result := '';
end;

const
  FormUnitSource =
    'unit %0:s;'#13#10 +
    #13#10 +
    'interface'#13#10 +
    #13#10 +
    'uses Windows, SysUtils, Messages, Classes, Graphics, Controls,'#13#10 +
    '  StdCtrls, ExtCtrls, MyForm;'#13#10 +
    #13#10 +
    'type'#13#10 +
    '  T%1:s = class(TMyForm)'#13#10 +
    '  private'#13#10 +
    '    { Private declarations }'#13#10 +
    '  public'#13#10 +
    '    { Public declarations }'#13#10 +
    '  end;'#13#10 +
    #13#10 +
    'var'#13#10 +
    '  %1:s: T%1:s;'#13#10 +
    #13#10 +
    'implementation'#13#10 +
    #13#10 +
    '{$R *.DFM}'#13#10 +
    #13#10 +
    'end.'#13#10;

  FormDfmSource = 'object %s: T%0:s end';

procedure TMyFormExpert.Execute;
var
  UnitIdent, Filename: string;
  FormName: string;
  CodeStream: TIStream;
  DFMStream: TIStream;
  DFMString, DFMVCLStream: TStream;
begin
  if not ToolServices.GetNewModuleName(UnitIdent, FileName) then Exit;
  FormName := 'MyForm' + Copy(UnitIdent, 5, 255);
  CodeStream :=
TIStreamAdapter.Create(TStringStream.Create(Format(FormUnitSource,
    [UnitIdent, FormName])), True);
  try
    CodeStream.AddRef;
    DFMString := TStringStream.Create(Format(FormDfmSource, [FormName]));
    try
      DFMVCLStream := TMemoryStream.Create;
      try
        ObjectTextToResource(DFMString, DFMVCLStream);
        DFMVCLStream.Position := 0;
      except
        DFMVCLStream.Free;
      end;
      DFMStream := TIStreamAdapter.Create(DFMVCLStream, True);
      try
        DFMStream.AddRef;
        ToolServices.CreateModuleEx(FileName, FormName, 'TMyForm', '',
          CodeStream, DFMStream, [cmAddToProject, cmShowSource, cmShowForm,
            cmUnNamed, cmMarkModified]);
      finally
        DFMStream.Free;
      end;
    finally
      DFMString.Free;
    end;
  finally
    CodeStream.Free;
  end;
end;

procedure Register;
begin
  RegisterCustomModule(TMyForm, TCustomModule);
  RegisterLibraryExpert(TMyFormExpert.Create);
end;
end.
>>>> end expert <<<<

{To get the expert installed you have to add the unit to a package and
install the package.  Once this is complete your new form class will be
available from the File|New dialog.}


Удачи!
PM MAIL   Вверх
Romikgy
Дата 23.3.2006, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Вот еще на этуже тему
Добавлено @ 09:58
Название незахотело писаться smile
Открытые интерфейсы среды программирования Delphi

Присоединённый файл ( Кол-во скачиваний: 46 )
Присоединённый файл  ___________________________________________Delphi.zip 116,18 Kb


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Seldon
Дата 26.7.2006, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 23.12.2005
Где: Minsk

Репутация: нет
Всего: 2



Цитата(Msl @ 23.3.2006,  08:21)
{
This explains how to set up a new form descendant which will have editable
 properties via the object inspector
}


Под D7 пришлось чуть-чуть подправить исходник, но в целом всё поставилось и новые свойства отображаются в OI.

Под BDS (D2006) появились проблемы:

П: компилятор не мог найти модули ExptIntf,ToolIntf,VirtIntf,IStreams,DesignIntf,DesignEditors
Р: добавил %BDS%\Source\ToolsAPI к путям поиска
---
П: в модуле ToolsAPI.pas (на который ссылаются вышеуказанные модули) ругань на
{$IFDEF MSWINDOWS}
uses Windows, SysUtils, Classes, ActiveX, TypInfo, DockForm, DesignIntf, Menus,
  ActnList, Graphics, ImgList, Forms, Controls, ComCtrls, XMLIntf;
{$ENDIF}
[Pascal Fatal Error] ToolsAPI.pas(20): F1026 File not found: 'DockForm.dcu' 
Р: поиск модуля DockForm по папке с дистрибом BDS результатов не дал. пришлось убрать этот модуль из uses

что интересно, при поиске по дистрибу, был найден файл DOCKFORM.HPP, который был сгенерирован по Dockform.pas
// (DO NOT EDIT: machine generated header) 'Dockform.pas' rev: 10.00
---
П: теперь ругань в нескольких местах ToolsAPI.pas на отсутствие класса TDockableForm
Р: поиск по дистрибу файла с описанием класса TDockableForm результатов не дал. я заменил TDockableForm на TCustomForm - просто чтобы успокоить компилятор
---
П: в модуле DesignEditors.pas ругань на
uses DesignConst, Consts, RTLConsts, Contnrs, Proxies, ToolsAPI, ActnList;
[Pascal Fatal Error] DesignEditors.pas(609): F1026 File not found: 'Proxies.dcu'
Р: поиск модуля Proxies по папке с дистрибом BDS результатов не дал (правда опять нашёлся файл PROXIES.HPP). пришлось убрать этот модуль из uses
---
П: теперь ругань на функцию IsProxyClass в двух местах
Р: пришлось их закомментировать
---
это были проблемы в используемых кодом модулях, теперь проблемы в самом коде

П: ругань на TIStream
Р: заменил на IStream и подключил модуль ActiveX, где он объявлен
---
П: ругань на последний параметр (true) в
CodeStream:=TIStreamAdapter.Create(TStringStream.Create(Format(FormUnitSource,[UnitIdent,FormName])),true);
Р: убрал его
---
П: ругань на CodeStream.AddRef;
Р: заменил на _AddRef
---
П: ругань на последний параметр (true) в
DFMStream:=TIStreamAdapter.Create(DFMVCLStream,true);
Р: убрал его
---
П: ругань на DFMStream.AddRef;
Р: заменил на _AddRef
---
П: ругань на DFMStream.Free; и CodeStream.Free;
Р: убрал их

в результате оно скомпилировалось
но в репозитарии новых объектов не появилось. все вышеперечисленные проблемы к этому отношения, по видимому, не имеют т.к. за появление эксперта в репозитарии отвечает единственная строчка 
RegisterLibraryExpert(TMiBFormExpert.Create);

вот такие пироги... сдаётся мне, что в BDS4 ToolsAPI просто не доделан. 
--------------------
MiBEditor v2.Alpha 10 - Программерский редактор
PM MAIL WWW   Вверх
drkot
Дата 4.8.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ищущий
***


Профиль
Группа: Завсегдатай
Сообщений: 1042
Регистрация: 5.5.2006

Репутация: 5
Всего: 8



Цитата(Seldon @  26.7.2006,  10:25 Найти цитируемый пост)
сдаётся мне, что в BDS4 ToolsAPI просто не доделан

здается неправильно здается. StarTeam, темплеты кодов подсветка и все прочие навароты сделаны на ToolAPI.

там просто поменялись интерфейсы. После причесвания приведенного Msl  примера и установки его под BDS2006 результат оказался нулевой. 
Все наследники Extert-а можно прописать только в меня help.
Для добавления в другие места оболочки используются NTA интерфейсы (тока примеров их использования нет). Те примеры что поставляются с делфей расчитаны на ранние версии (D7), хотя компилятся замешательно, но при инсталяции в оболочку не прописываются.


--------------------
Ошибка не становится истиной по причине широкого распространения,
как и Истина не становится Ошибкой из-за того, что никто её не видит.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0840 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.