Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Добавление свойства   Найти похожие ветки 

 
RASkov   (2006-09-10 03:38) [0]

Подскажите пожалуйста как при написании компанента добавить ему паблишед свойство чтобы в инспекторе объектов, значение свойства выбиралось из выподающего списка. В список должны добавляться компаненты имеющиеся на форме и имеющие Canvas. В написании компанент опыта мало т.е. нет.

TMyCompanent = class(TCompanent)
private
FCanvas: TCanvas;
....
published
property Canvas: TCanvas ....?????...
....
end;

Можно кусок примера как это делается. Т.е. если "кинуть" мой компанент на читую("голую") форму то в Инсп.Объектов у моего компанента в списке свойства Canvas должна быть Form1. Бросили на форму Image1 - и его в список. Ну и так всех у кого есть канва.


 
Loginov Dmitry ©   (2006-09-10 10:26) [1]

Все компоненты, идущие от TCustomControl, имеют свойство Canvas. Тогда можно попытаться так:


published
 property CanvasControl: TCustomControl read FCanvasControl write FCanvasControl;


В некоторых компонентах свойство Canvas закрыто, придется открывать его самостоятельно.


 
RASkov   (2006-09-10 15:14) [2]

> [1] Loginov Dmitry ©   (10.09.06 10:26)

Вот так просто оказывается добавить свойство? И что не надо описывать никаких действий в разделе implementation?
Тока тады надо наверное так
property CanvasCtrl: TGraphicControl read FCanvasControl write FCanvasControl;
Отсюда вопросы:
1 почему в список не попадает форма?
2 как в этот список добавлять такие компаненты у которых доступен канвас? А то получается туда и Label"ы лезут а их туда не надо.
Ну на первый вопрос ответ я наверное знаю - потому что форма не от TGraphicControl. А на второй - Label"ы туда лезут все из-за того же TGraphicControl.
Можно кусок кода про это мое свойство полностью т.к. <В написании компанент опыта мало т.е. нет.>
Спасибо.


 
Anatoly Podgoretsky ©   (2006-09-10 15:38) [3]

RASkov   (10.09.06 15:14) [2]
А какие действия, раз не используются никакие методы, а только доступ до поля.


 
RASkov   (2006-09-10 16:40) [4]

> [3] Anatoly Podgoretsky ©   (10.09.06 15:38)

Да это понятно, просто я думал вручную надо заполнять список(поле).
Хотя оно наверное так и должно быть в моем случае. Вопрос как это сделать?


 
RASkov   (2006-09-10 16:48) [5]

Т.е. при таком описании property CanvasCtrl: TGraphicControl read FCanvasControl write FCanvasControl;
В список (property CanvasControl: TCustomControl;) попадают все контролы и которые надо и которые не надо. Как их отфильторовать, что бы попадали только те у кого канва доступна напрямую т.е. Form1.Canvas, Image1.Canvas, PaintBox.Canvas, и ижи с ними, а вот Label хоть и от TGraphicControl он туда не должен попасть - в список CanvasCtrl.
Из моего компанента происходит рисование на этой канве. Т.е. если выбрали в MyCompanent.CanvasCtrl:=Form1; то компанент должен рисовать на канве формы.
Спасибо.


 
RASkov   (2006-09-10 16:49) [6]

Поправка к [5]
В список property CanvasCtrl: TGraphicControl


 
RASkov   (2006-09-10 17:18) [7]

И это.... компанент пишу для себя, в свет может и не выйдет. Поэтому не обращайте внимание на то что вопрос задает "новичек" и если Вы выложите код то я его припишу к своему компаненту и это будет "единственное нормальное место в компаненте"...Я учусь и с Вашей помощью это удается намного лучше чем с книгами. Многие книги тут так обосрали (некоторые у меня есть) отсюда вывод..., да и просто ответ на конкретно заданный вопрос намного понятней и поучительней для меня чем строить тот же самый велосипед через ж, я неспорю, что я сам догадаюсь как это сделать но как я это сделаю....вопрос...может вооще не тем путем пойду. А на вопрос типа что ответом и сдесь могут сбить с толку у меня реакция нормально общие принцыпы мне известны могу подкорректировать.
Хотя есть одна нормальная книга и она у меня имеет первый приоритет это Delphi 4 для профессионалов Марко Кэнту, хорошая книга хоть и для 4 но актуальна и для Delphi 7 на которой и работаю. А вот с Фленовым поспешил...хотя и там есть моменты(идеи) из которых можно что-то сделать.
Блин, не получается в двух словах:) Народ здесь краткость не понимает и это нормально:)
Спасибо.


 
RASkov   (2006-09-10 17:23) [8]

На каком месте вообще происходит фильтрация и как это свойство заполняется?
в конструкторе? а как заполнить список с выборкой нужен-ненужен... но наверное всетаки не в конструкторе потому что если бросить на форму Image1 и в моем компаненте его(Image1) выбрать, а потом удалить с формы Image1 он должен пропасть из списка.... это уже наверное не в конструкторе.


 
RASkov   (2006-09-10 19:36) [9]

Никто не подскажет?


 
PSPF2003 ©   (2006-09-11 07:57) [10]


> Никто не подскажет?

Что?


 
PSPF2003 ©   (2006-09-11 08:01) [11]

Если вопросы по созданию компонентов ищи: “Валерий Фаронов Искусство создания компонентов Delphi” Там найдешь ответы на все свои вопросы.


 
Наиль ©   (2006-09-11 08:09) [12]

Для начала открой модуль DesignEditors [D7].
Найди класс TComponentProperty. Тебе нужно создать потомка от него, поэтому проанализируй.
Метод для перекрывания GetValues.
Список "нужен-ненужен" создаётся этой строкой:
 Designer.GetComponentNames(GetTypeData(GetPropType), Proc);
Суть кода - передать дизайнеру процедурную переменную Proc, с помощью которой Object Inspector должен получить список. Дизайнер вызывает эту процедуру необходимое число раз передавая в качестве параметра имена подходящих компонент.
Твоя задача - подсунуть вместо Proc свою поцедуру MyProc, которая:
1. Делает проверку наличия у компонента свойства Canvas
2. Передаёт в переменую Proc имя подходящего компонента
Примерно так:
var
 P: PPropInfo;
begin
 // Здесь находим xComponent по имени
 ...
 // Далее п.1 и п.2
 P := GetPropInfo(xComponent, PropName);
 if P <> nil then Proc(s);


PS. Прочитай статью "RTTI" на этом сайте.


 
Loginov Dmitry ©   (2006-09-11 10:03) [13]

Свойство Canvas никакого отношения к RTTI не имеет.


 
Наиль ©   (2006-09-11 10:19) [14]


> Свойство Canvas никакого отношения к RTTI не имеет.

Действительно, с какого перепугу решил, что Canvas - published?
Это наверное из-за упоминания TImage. C недосыпу принял Canvas за Picture.


 
RASkov   (2006-09-11 12:18) [15]


> PSPF2003 ©   (11.09.06 08:01) [11]

Книги этой нет, но да ладно, спасибо. А вот модуль DesignEditors надо будет посмотреть...



Страницы: 1 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.047 c
2-1157969053
Officeman
2006-09-11 14:04
2006.10.01
Поиск строки в строке ;)


2-1157703974
P2P
2006-09-08 12:26
2006.10.01
Помогите перевести конструкцию с C++


5-1139913121
max1000
2006-02-14 13:32
2006.10.01
Возвращаясь к Tpanel .Зависает Delphi.


11-1133828548
-=Mike=-
2005-12-06 03:22
2006.10.01
Два вопроса по разработке компонентов.


11-1133060395
Neiroman
2005-11-27 05:59
2006.10.01
Помогите чайнику!