| 
| 
 | Вопрос # 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. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |