Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Добавление published свойства


Страницы:   1 2 3 4 5 6

RASkov ©   (2006-09-10 05:27:00) 

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

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

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


RASkov   (2006-10-10 15:44:00) [21]

> [99] DimaBr   (10.10.06 08:20)

Ну дык если кто нить попросит компанент а у него D4 или ниже?
Точнее выложу в инете для "ознакомления" без исходников:) ну и чебы ...
Ведь как то можно вопрос решить?:) Не, ну да ладно, я не сильно за это переживаю:)


DimaBr   (2006-10-10 08:20:00) [22]


> А может я зря переживаю?

Зря, если не будите устанавливать на < Delphi 6


RASkov   (2006-10-10 01:10:00) [23]

> помоему ничего сложного, вечером попробую.

Спасибо разобрался, минут 10 попарился с регистрацией... с толку сбило TypeInfo( string) у меня то TFileName; (TFileName = type string;)
И я у метода Edit убрал inherited, он ведь в цепочке TFindFileProperty = class(TStringProperty) вызывается непосредственно из TPropertyEditor в котором ничего путевого для OpenDialog не нашел, да еще TStringList там создается к чему то - незнаю... может я и неправ - убрав его.
DimaBr, вот уже я немного вник в редакторы свойст, спасибо большое за [92].
Близится к завершению мой чудо-юдо компанент.
>
И вот еще вопросик: как ограничить установку моего компанента только в D7?
Потому, что делал его в D7, а заморачиваться с дерективами пока нехочу.
Знаю, что это грубое решение... но пока учусь сойдет, тем более для себя его делал. Хотя сам компанент использует
Windows, SysUtils, Classes, Graphics, Controls; У меня нет уверенности, что везде они одинаковые... да еще редактор свойства
SysUtils, DesignIntf, DesignEditors, PicMenu;
То что подчеркнул сомнительные; А может я зря переживаю?


RASkov   (2006-10-09 16:52:00) [24]


> Начиная с шестёрки идёт разделение дизайн кода и Run-Time
> кода. Вы просто не сможете добавить DesignEditors (в котором
> описаны редакторы) и скомпилять в одном модуле - будет ругаться
> - не хватает Proxies.dcu


Я вот в прочих вопросик задавал - ответа толкового нет. Может есть соображения какие. Вопрос кое каким боком относится к компанентам.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1159716860&n=3
и вот из последнего

> Paket и ни в каком другом (пакете) он не already, кроме
> как в тестовом проекте в модуле тестовой формы.....

Даже если и просто один пакет открыть в IDE и ничего более, иногда (даже без явных и неявных ошибках) т.е. проверяешь синтаксис нормально (не хинтов не варнингов ни errorов), произведешь несущественное изменение (сотрешь буковку и ее же напишешь), хочешь опять проверить синтаксис - и тут эта ошибка.:( Спасибо.


DimaBr   (2006-10-09 15:01:00) [25]

Начиная с шестёрки идёт разделение дизайн кода и Run-Time кода. Вы просто не сможете добавить DesignEditors (в котором описаны редакторы) и скомпилять в одном модуле - будет ругаться - не хватает Proxies.dcu


RASkov   (2006-10-09 14:16:00) [26]

> [94] DimaBr   (09.10.06 13:52)

Ух. Понял. У меня D7. А ведь я бы все в одном прикрутил и "заработало" бы:)
т.е. в пакете создать новый модуль в нем описать редактор свойства и добавить еще и DesignIDE.dcp в пакет? DesignIDE.dcp а че в нем? он тай большой. Спасибо.


DimaBr   (2006-10-09 13:52:00) [27]


>  Ну т.е. это все в одном модуле с компанентом писать?

Всё зависит от версии Delphi, для шестёрке и выше - отдельный модуль с регистрацией + DesignIDE.dcp в пакет


RASkov   (2006-10-09 13:32:00) [28]

> [92] DimaBr   (09.10.06 11:12)

Спасибо, помоему ничего сложного, вечером попробую.
procedure Register; я так понимаю одна и для регистрации компанента и свойства. Ну т.е. это все в одном модуле с компанентом писать? ответ наверное: можно но не обязательно. Верно?
А по второму вопросу про "звуки в компаненте"?


DimaBr   (2006-10-09 11:12:00) [29]


TFindFileProperty = class(TStringProperty)
 function GetAttributes: TPropertyAttributes; override;
 procedure Edit; override;
end;

{ TFindFilerProperty }

procedure TFindFolderProperty.Edit;
begin
 inherited;
 with TOpenDialog.Create(nil) do
    try
      Filter := '*.wav';
      if Execute then SetValue(FileName);
    finally
       Free;
    end;{try}
end;

function TFindFolderProperty.GetAttributes: TPropertyAttributes;
begin
 Result := inherited GetAttributes + [paDialog];
end;

procedure Register;
begin
...
 RegisterPropertyEditor(TypeInfo(string), TMyComponent, 'NameProperty', TFindFileProperty);
end;


atruhin   (2006-10-09 03:49:00) [30]

В двух словах не получится. Найди в сети книгу "Создание оригинальных компонент с среде Delphi 2" Рэй Конопка, там все хорошо описано, с примерами.


RASkov   (2006-10-08 17:41:00) [31]

> [88] atruhin ©   (08.10.06 16:20)

Да не приходилось никогда иметь дело с PropertyEditor, даже не знаю с какой стороны подойти... Если не трудно в трех словах с кодом - можно рассказать про это нехитрое дело. Создание своих редакторов свойств. Или как это делает например, RxLib, подменяет обычный/стандартный редактор Caption'ов на свой диалог?


RASkov   (2006-10-08 17:36:00) [32]

> как можно задать фильтр в диалоговом окне выбора файлов
> когда в инспекторе щелкаем [...] кнопку?

Блин, щас вот второй раз прочитал... короче вот:
в published добавил вышеописанное свойство -  в инспекторе для этого свойства прикрутился FileOpenDialog - как задать фильтр на типы файлов которые можно выбрать в нем *.wav;*.mp3... Вооще одного wav'a хватит.


atruhin   (2006-10-08 16:20:00) [33]

Создать свой PropertyEditor в твоем варианте не сложно.


RASkov   (2006-10-08 15:53:00) [34]

Вот такой вот вопрос - добавил свойство:
propertyFileSoundEnter: TFileName readFFileSoundEnter writeSetFileSoundEnter;
ну и такое же для Leave.
как можно задать фильтр в диалоговом окне выбора файлов когда в инспекторе щелкаем [...] кнопку?
Или это опять ужасно сложно?
На данный момент компанент почти готов осталось реализовать клики по итемам, думаю с этим справлюсь. А прикольный получается компанентик:)
А реально ли в компаненте использовать библиотеку, к примеру BASS?(само собой эту версию BASS распростронять с компанентом), или никчему это.
Хотел сделать (т.е. уже сделал) звуки на смену итемов, ну и само собой есть свойство UseSound которое запрещает звуки.
Доделаю полностью выложу - но только в скомпелированном виде (стыдно за код:|) постараюсь с ридмиком, но если кого заинтересует.... хотя врядли, писал его для себя и в целях обучения:) DimaBr если нужно код - без разговора:)
ЗЫ 2 вопросика в посте. Спасибо.


RASkov   (2006-10-04 14:02:00) [35]

Блин, почему мне такая мысль не пришла на ум, ведь элементарно ж:)
DimaBr, незнаю уже как и благодарить.... постараюсь "мелочные" вопросы в этой ветке больше не спрашивать. Спасибо.


DimaBr   (2006-10-04 11:18:00) [36]

Не знаю, отрабатывает ли Notify в дизайнере, можно и в TPicMenuCollectionItem.Destroy;


procedure TPicMenuCollectionItem.Destroy;
var AOwner: TPicMenus;
begin
 AOwner := GetPicMenus;
 inherited Destroy;
 AOwner.Invalidate
end;


RASkov   (2006-10-04 10:32:00) [37]


> Вы можете написать свой редактор ?

Я пока даже и незнаю что и ответить. Впервой с написанием компанентов и ихими "причендалами". А почему не смогу - смогу, но только потом:). По всей видимости пока отставить в эту сторону. Сейчас нужно немного доделать (на данный момент компанент умеет себя рисовать) функционал компанета а там посмотрим....
Ну я так понял, что не совсем просто это [82].
А вот при удалении элемента коллекции нужно перерисовать компанент - я так думаю нужно перекрыть метод коллекции (TOwnedCollection - он получше:) чутьчуть) Notify  - наверное в перекрытом нужно просто вызвать inherited; и GetOwner.Invalidate; Его параметр (Notify(Item: TColl...Item;...) Item я так думаю не надо ни с кем сравнивать?


DimaBr   (2006-10-04 09:19:00) [38]

Не знаю точно, но думаю что со стандартным редактором ничего не выйдет.
Я бы ввёл в элемент коллекции свойство DesignerSelected: boolean и написал свой редактор для коллекции, который изменяет это свойство. А отрисовка уже просто. Вы можете написать свой редактор ?


RASkov   (2006-10-04 02:52:00) [39]

DimaBr, Вот еще такокой вот вопрос попробую сформулировать...
Как отловить в дизайнтайме выделение/выбор-невыбор itema в редакторе TCollection в инсп. объектов. (ниже конкретней попробую описать) Если это возможно конечно, я думаю возможно, но если это сложно то отставить пока.
Вообщем идея такая когда выделяю на форме свой компанент и жму кнопку[...] в поле MenuCollection - то открывается редактор этого поля - так вот хотелось бы при выборе элемента в коллекции (именно в дизайнтайме) группа итемов меню этого элемента, которые рисуются на канве вертикально или горизонтально, обводились пунктир. прямоугольником ну или еще как выделялись бы. Т.е. когда их (эл. коллекции) штуки 3 и более при выборе различать где он свои итемы рисует... Вот. Если вопрос не понятен, то не судьба мне...:( все равно спасибо.


DimaBr   (2006-10-02 17:02:00) [40]


> я имел ввиду обработать OnMove  и PtInRect() или еще как?

Да, естественно, только не OnMove, а procedure MouseMove(Shift: TShiftState; X, Y: Integer);override;

> 5 - Чем лучше?

Тем что в OwnedCollection уже реализован GetOwner и гораздо удобнее динамически менять класс элементов коллекции (хотя в вашем случае в этом не необходимости)


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо