Создание своего компонента. Вопрос по property TStrings.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Создание своего компонента. Вопрос по property TStrings.

Сообщение wofs » 15.05.2018 13:09:45

Добрый день!
Создал простенький компонент:
Код: Выделить всё
  TwfEntity = class(TComponent)
  private
    fSQLGetList: TStrings;
  protected
  public
  published
    property SQLGetList: TStrings read fSQLGetList write fSQLGetList;
  end;         

В режиме дизайна, в Property Editor это выглядит так:
2018-05-15 12-57-50 Инспектор объектов.png


Вопрос - как при нажатии на кнопку с многоточием вызвать редактор строк? Сейчас получаю Access Violation.

Добавлено спустя 27 минут 53 секунды:
С Access Violation разобрался - нужно создать TStrings в конструкторе:
Код: Выделить всё
constructor TwfEntity.Create(AOwner: TComponent);
begin
  fSQLGetList:= TStrings.Create;
  inherited Create(AOwner);
end;         

Теперь, при нажатии на кнопку редактирования я получаю ошибку:
Abstract method called
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
wofs
постоялец
 
Сообщения: 339
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань

Re: Создание своего компонента. Вопрос по property TStrings.

Сообщение fedan » 15.05.2018 18:44:31

Код: Выделить всё
TStrings.Create;

Abstract method called

Ну дак TStrings это абстракный класс.

Вот например конструктор TCustomListBox:
Код: Выделить всё
constructor TCustomListBox.Create(TheOwner: TComponent);
begin
  inherited Create(TheOwner);
  fCompStyle := csListBox;
  BorderStyle:= bsSingle;
  FItems := TExtendedStringList.Create(GetCachedDataSize);
  FCacheValid := True;
  FClickOnSelChange:= True;
  FItemIndex:=-1;
  FExtendedSelect := true;
  //FScrollWidth := 0;
  FOptions := DefOptions;
  FCanvas := TControlCanvas.Create;
  TControlCanvas(FCanvas).Control := Self;
  ParentColor := false;
  TabStop := true;
  with GetControlClassDefaultSize do
    SetInitialBounds(0, 0, CX, CY);
end;

Также у Memo свой StringList.

Можно просто:
Код: Выделить всё
constructor TwfEntity.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fSQLGetList:= TStringList.Create;
end;
fedan
новенький
 
Сообщения: 35
Зарегистрирован: 15.09.2016 21:18:48

Re: Создание своего компонента. Вопрос по property TStrings.

Сообщение wofs » 15.05.2018 18:51:41

fedan
Понял! Спасибо!
Аватара пользователя
wofs
постоялец
 
Сообщения: 339
Зарегистрирован: 05.10.2009 10:16:55
Откуда: Астрахань


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu[bot] и гости: 4

Рейтинг@Mail.ru
cron