Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TForm новое свойство в инспекторе объектов


Автор: r00xus 14.4.2015, 09:05
здравствуйте коллеги.

хочу сделать наследника от TForm с двумя свойствами Images для указания ImageList и IconIndex для того чтобы можно было в designtime и runtime указывать иконку для формы. Пробую с ImgeList:
Код

unit uFormMdiChildBase;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, TB2Dock, TB2Toolbar, ImgList;

type
  TFormMdiChildBase = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    function GetImages : TCustomImageList;
    procedure SetImages(Value: TCustomImageList);
  protected
    FIconIndex: Integer;
  public
    constructor Create(AOwner: TComponent);
  published
    property Images: TCustomImageList read GetImages write SetImages;
  end;

var
  FormMdiChildBase: TFormMdiChildBase;

implementation

uses uDataModule;

{$R *.dfm}

constructor TFormMdiChildBase.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

procedure TFormMdiChildBase.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TFormMdiChildBase.FormCreate(Sender: TObject);
begin
  DataModuleMain.imgMain.GetIcon(FIconIndex, Icon);
end;

function TFormMdiChildBase.GetImages: TCustomImageList;
begin
  ;
end;

procedure TFormMdiChildBase.SetImages(Value: TCustomImageList);
begin
  ;
end;

end.

но свойство не появляется в инспекторе объектов. я что-то глобально делаю не так?

Автор: Poseidon 14.4.2015, 09:59
Т.е. ты решил, что если наследнику TForm просто добавить published свойство, то инспектор автоматически его подхватит? С чего вдруг? Нужно еще сообщить инспектору об этом. И, честно признаюсь, я даже не представляю как это сделать для формы. Для контролов есть специальная процедура Register, а вот как быть с формой понятия не имею.

Автор: Alexeis 14.4.2015, 13:47
  В теории если добавить форму в репозиторий Project->Add to Repository, то может что-то и получится, поскольку если новую форму создать унаследовав форму из репозитория, то получается что в качестве предка значиться уже не TForm, а своя форма. Сто лет не использовал этот механизм, так что что там получиться на самом деле не берусь утверждать.

Подробнее почитать нужно тут http://www.delphi.int.ru/articles/51/

Автор: Beltar 19.4.2015, 22:48
А интерцептор-класс?
В начале юнита пишешь класс TForm унаследованный от стандартного TForm. Т. е. указываешь полное имя родительского класса. Я не помню, где TForm определен, но если, например, в Controls, то TForm=class(Controls.TForm);

Соответственно форма будет унаследована не от стандартной, а от твоей. Но такую штуку надо в каждый юнит, где нужен данный функционал пихать, т. е. ее можно через {$INCLUDE} вставлять

Автор: Poseidon 22.4.2015, 08:28
Beltar, и что, новые свойства тут же появятся в инспекторе?

Автор: Beltar 22.4.2015, 14:10
Неа. :( Я как-то таким способом (чтобы не регистрировать) делал свой TTreeView, который бы не разворачивался по двойному щелчку без команды, сейчас проверил, у него новое свойство в published тоже появляется только если его нормально зарегистрировать, как компонент. 

Автор: Beltar 22.4.2015, 14:30
Если на то пошло и охота именно в Disign-тайм, и вообще иконку надо менять часто (не знаю зачем, но раз хочется), то может сделать невидимый компонент (TFormIconManager какой-нить) с TImageList, сделать ему редактор, чтобы в disign-time редактировать, сделать свойство для формы, которой надо др. иконку и через него менять ей Icon.

Вообще когда-то давно у меня после прочтения умной книжки возникла идея сделать компонентик с формочкой для работы со справочными таблицами в БД, коим часто вполне достаточно редактирования в сетке. И совать в него эти таблицы в дизайн-тайм. Ну сделал, было это в Delphi 2006, работало как бы не очень, возникали глюки, и компонент приходилось вычищать из dfm-файла. Потом на 2007 вообще сдохло. В итоге я плюнул, сделал тупо форму, которую просто подключаю как юнит и один раз пишу простейший код добавления в нее таблиц. Может сейчас бы и прокатило, но не вижу смысла извращаться ради копеечного выигрыша в удобстве за счет добавки ему в колекцию нескольких табличек в дизайн-тайм..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)