|
Вопрос # 3 295/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!У меня к вам следующий вопрос.Не могли бы вы подробно рассказать с примером, как создать свой собственный компонент.Допустим взять какой нибудь стандартный и добавить ему свойства и методы которых у него не было.
 |
Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 17 октября 2009, 08:44
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Я таких компонентов написал же гору целую. Вот пример нашёл: недавно писал для одного товарища потомок TListBox, принимающий файлы из проводника WIndows путём перетаскивания мышой (Drag&Drop). Добавлены новые: метод, свойство и событие.
type
// Тип события принятия файла ListBox'ом
TDropFileEvent = function (Sender: TObject; const FileName: string): Boolean of object;
// Класс ListBox, принимающий файлы
TDropFilesListBox = class(TListBox)
private
FDropFiles: Boolean;
FOnDropFile: TDropFileEvent; // Событие принятия каждого файла, в которм
// можно принять или отказаться от файла FileName
procedure SetDropFiles(const Value: Boolean);
protected
procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
published
property DropFiles: Boolean read FDropFiles write SetDropFiles;
property OnDropFile: TDropFileEvent read FOnDropFile write FOnDropFile;
end;
Подойдёт для примера? Прицепляю к ответу. К ответу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки ответа)
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 17 октября 2009, 10:01
Оценка за ответ: 5
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 18 октября 2009, 09:51; участников в обсуждении: 4.
|
min@y™ (статус: Доктор наук), 17 октября 2009, 10:03 [#1]:
Кстати, обрати внимание, что событие OnDropFile - это функция, а не процедура, как везде.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 17 октября 2009, 10:36 [#2]:
min@y™:
а где же "подробно рассказать с примером, как создать свой собственный компонент"?
я вижу готовый код. а куда его вставлять, как устанавливать в дельфи?
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
Вадим К (статус: Академик), 17 октября 2009, 10:39 [#3]:
рекомендую поискать книгу Рэй Конопка - Создание оригинальных компонент в Delphi. И хотя там описывается старая делфи, но там сколько примеров, что хватит на всех.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
min@y™ (статус: Доктор наук), 17 октября 2009, 10:49 [#4]:
Цитата (Егор):
а где же "подробно рассказать с примером, как создать свой собственный компонент"? я вижу готовый код. а куда его вставлять, как устанавливать в дельфи?
Хохохо! Я ответил на вопрос именно так, как он был сформулирован. И пример привёл (работающий). Ну неужели надо разжёвывать, типа, берём Delphi, создаём новый модуль, пишем в нём то-то и то-то, когда есть готовый пример с новым компонентом, в котором есть не только новое свойство, но и нестандартное событие?
Как устанавливать в Delphi - на спрашивалось.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 17 октября 2009, 11:00 [#5]:
min@y™:
по-моему, есть разница между
"подробно рассказать с примером, как создать свой собственный компонент"
и
"приведите код компонента"
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 17 октября 2009, 11:10 [#6]:
Цитата (Егор):
по-моему, есть разница между "подробно рассказать с примером, как создать свой собственный компонент" и "приведите код компонента"
А по моему - лучше работающего примера нет ничего.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 17 октября 2009, 11:23 [#7]:
код - это часть подробного примера, а не его альтернатива
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
min@y™ (статус: Доктор наук), 17 октября 2009, 11:26 [#8]:
Цитата (Егор):
код - это часть подробного примера, а не его альтернатива
Предполагалось, что если аффтару что-то будет непонятно, то он спросит у меня на форуме.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Егор (статус: 10-ый класс), 17 октября 2009, 11:40 [#9]:
а, ну если так, то согласен.
тем более, что автор как-то молчит. значит, всё понял.
Опасайтесь багов в приведенном выше коде; я только доказал корректность, но не запускал его.
— Donald E. Knuth.
|
|
GAZ (статус: Посетитель), 18 октября 2009, 08:18 [#10]:
min@y™
Егор отчасти прав,как бы хотелось побольше информации.Нет конечно не по установке и запуску delphi,а допустим существуют ли какие либо правила написания нового компонента или по шагово расписать весь путь создания,ну а пример вы вроде бы привели,только вот с событием понятно, а что за свойство вы добавили не очень.
|
|
min@y™ (статус: Доктор наук), 18 октября 2009, 09:51 [#11]:
Цитата (GAZ):
только вот с событием понятно, а что за свойство вы добавили не очень.
Свойство
property DropFiles: Boolean read FDropFiles write SetDropFiles;
Если оно равно True, то листбокс будет принимать файлы. Чего тут непонятно-то? Ты спрашивай, не стесняйся.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|