Форум: "Начинающим";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];
ВнизДобавление свойства Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.024 c