Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2016, 13:53   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию как создать свой ListBox?

Хочу создать компонент типа ListBox.
Код:
type
  TMyListBox = class(TcustomListBox)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
    class constructor Create;
    class destructor Destroy;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy;
  published
    { Published declarations }

  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('My', [TMyListBox]);
end;

class constructor TMyListBox.Create;
begin
  TCustomStyleEngine.RegisterStyleHook(TMyListBox, TListBoxStyleHook);
end;

class destructor TMyListBox.Destroy;
begin
  TCustomStyleEngine.UnRegisterStyleHook(TMyListBox, TListBoxStyleHook);
end;

constructor TmyListBox.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
end;

destructor TmyListBox.Destroy;
begin
  inherited;
end;
end.
При выбрасывании компонента на форму, Delphi вылетает.
Что не так?

Последний раз редактировалось BLACK_RAIN; 23.05.2016 в 14:09.
BLACK_RAIN вне форума Ответить с цитированием
Старый 23.05.2016, 14:02   #2
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

inherited?

http://programmersforum.ru/showthread.php?t=290569 - тут же получилось как-то?
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Старый 23.05.2016, 14:02   #3
zvygin1964
Старожил
 
Аватар для zvygin1964
 
Регистрация: 19.06.2013
Сообщений: 2,463
По умолчанию

Я в этом ничего не понимаю, но разве
Код:
procedure Register;
может быть после end; //?
Репутация: полный "0"
zvygin1964 вне форума Ответить с цитированием
Старый 23.05.2016, 14:16   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TCustomListBox это уже по сути готовый TListBox. Чего тут своего? Свой, так уж от TCustomMultiSelectListControl, или TCustomListControl, или еще ниже.
Цитата:
может быть после end;
Вообще-то после описания типов. Может. То декларация процедуры в interface, тело процедуры - в implementation. Такая процедура доступна всем юнитам, у которых в области видимости этот юнит. Посмотри исходник любого системного юнита
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2016, 14:17   #5
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от TaLadno Посмотреть сообщение
inherited?

http://programmersforum.ru/showthread.php?t=290569 - тут же получилось как-то?
Да, но ListBox не получается.
какой inherited?
BLACK_RAIN вне форума Ответить с цитированием
Старый 23.05.2016, 14:22   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
какой inherited?
http://www.delphibasics.ru/inherited.php
И так для любого не знакомого делфийского слова
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.05.2016, 14:24   #7
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
TCustomListBox это уже по сути готовый TListBox. Чего тут своего?
Нужно перекрыть стандартную процедуру отрисовки, чтобы она не рисовала рамку у выделенной строки. Ну и пару своих методов добавить.
BLACK_RAIN вне форума Ответить с цитированием
Старый 23.05.2016, 14:26   #8
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Цитата:
Сообщение от BLACK_RAIN Посмотреть сообщение
Да, но ListBox не получается.
Ох уж эта копирастия. Копируем, вставляем не понимая - зато яжпрограммист.
ты хоть попытайся вникнуть в то что делаешь.

Посмотри в той теме, как ты наследника делал для TButton и как делаешь для TListBox - найди 100500 отличий, хотя бы для конструктора
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Старый 23.05.2016, 14:27   #9
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
http://www.delphibasics.ru/inherited.php
И так для любого не знакомого делфийского слова
всмысле куда тут его? он же есть в конструкторе и деструкторе. Куда его еще?
BLACK_RAIN вне форума Ответить с цитированием
Старый 23.05.2016, 14:30   #10
TaLadno
Форумчанин
 
Регистрация: 03.06.2015
Сообщений: 393
По умолчанию

Чукча не читатель, чукча писатель
Вы там держитесь.
TaLadno вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать свой язык программирования? future7 Свободное общение 19 05.05.2015 01:08
как создать свой курсор darya19 Visual C++ 1 15.03.2013 14:32
Как создать свой компонент? Д'якон Компоненты Delphi 1 21.05.2008 16:37
Как создать свой формат? Rahim1993 Общие вопросы Delphi 2 04.03.2008 17:04