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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TForm новое свойство в инспекторе объектов, как добавить в наследника TForm  
:(
    Опции темы
r00xus
Дата 14.4.2015, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



здравствуйте коллеги.

хочу сделать наследника от 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.

но свойство не появляется в инспекторе объектов. я что-то глобально делаю не так?
PM MAIL   Вверх
Poseidon
Дата 14.4.2015, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



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


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Alexeis
Дата 14.4.2015, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



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

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

Это сообщение отредактировал(а) Alexeis - 14.4.2015, 13:51


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

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

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


Опытный
**


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

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



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

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


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Poseidon
Дата 22.4.2015, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


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

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



Beltar, и что, новые свойства тут же появятся в инспекторе?


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
Beltar
Дата 22.4.2015, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
Beltar
Дата 22.4.2015, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

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

Это сообщение отредактировал(а) Beltar - 22.4.2015, 14:38


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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