Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
8-1142237353
Alex_Delphi
2006-03-13 11:09
2006.10.01
Как сознать виртуальний CD диск


1-1155896126
Michael Makushev
2006-08-18 14:15
2006.10.01
Документатор исходных текстов


1-1155885997
Mechanic
2006-08-18 11:26
2006.10.01
Отрисовка Формы


1-1155876271
mefodiy
2006-08-18 08:44
2006.10.01
Автоматическое открытие ComboBox


6-1141065397
Daimyo
2006-02-27 21:36
2006.10.01
проблема с indy компонентом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский