Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.12.2010, 18:28
Kobelev Kobelev вне форума
Прохожий
 
Регистрация: 03.12.2010
Сообщения: 12
Репутация: 10
По умолчанию Свойство Lines в TEdit

Приветствую. Подскажите как добавить в компонент TEdit свойство Lines, чтобы он отображался в инспекторе объектов?
Аналогичный как в Мемо, чтоб при двойном щелчке открывался String List Editor. Простые свойства в виде одной строки получается добавить, а тут вроде как должен быть тип TStrings, а его в { Published declarations } описать нельзя.

Последний раз редактировалось Kobelev, 03.12.2010 в 19:04.
Ответить с цитированием
  #2  
Старый 03.12.2010, 18:40
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Как ты это себе представляешь в едит много строк? TEdit предназначен для ввода одной строки, а не многих. То бишь чтоб ввести в едит пиши: Edit1.Text:=...;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 03.12.2010, 18:47
Kobelev Kobelev вне форума
Прохожий
 
Регистрация: 03.12.2010
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от v1s2222
Как ты это себе представляешь в едит много строк? TEdit предназначен для ввода одной строки, а не многих. То бишь чтоб ввести в едит пиши: Edit1.Text:=...;
Да, я знаю. У меня задание сделать что то типо ComboBox на основе компонента TEdit. В комбобоксе есть свойство Items.
Ответить с цитированием
  #4  
Старый 03.12.2010, 19:05
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

А что тебе мешает посмотреть на исходник именно combobox 'a то?
__________________
Помогаю за Спасибо
Ответить с цитированием
  #5  
Старый 03.12.2010, 19:14
Kobelev Kobelev вне форума
Прохожий
 
Регистрация: 03.12.2010
Сообщения: 12
Репутация: 10
По умолчанию

не получается его найти(
Ответить с цитированием
  #6  
Старый 03.12.2010, 19:23
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Найди модуль StdCtrls, там этот компонент описан.
Код:
  TComboBox = class(TCustomComboBox)
  published
    property AutoComplete default True;
    property AutoDropDown default False;
    property AutoCloseUp default False;
    property BevelEdges;
    property BevelInner;
    property BevelKind default bkNone;
    property BevelOuter;
    property Style; {Must be published before Items}
    property Anchors;
    property BiDiMode;
    property CharCase;
    property Color;
    property Constraints;
    property Ctl3D;
    property DragCursor;
    property DragKind;
    property DragMode;
    property DropDownCount;
    property Enabled;
    property Font;
    property ImeMode;
    property ImeName;
    property ItemHeight;
    property ItemIndex default -1;
    property MaxLength;
    property ParentBiDiMode;
    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PopupMenu;
    property ShowHint;
    property Sorted;
    property TabOrder;
    property TabStop;
    property Text;
    property Visible;
    property OnChange;
    property OnClick;
    property OnCloseUp;
    property OnContextPopup;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;
    property OnDrawItem;
    property OnDropDown;
    property OnEndDock;
    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMeasureItem;
    property OnSelect;
    property OnStartDock;
    property OnStartDrag;
    property Items; { Must be published after OnMeasureItem }
  end;
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 03.12.2010, 19:38
Kobelev Kobelev вне форума
Прохожий
 
Регистрация: 03.12.2010
Сообщения: 12
Репутация: 10
По умолчанию

у комбобокса предок другой, в TEdit нет свойств ни Items ни Lines.
Пробывал в published прописать property Items;
Ошибка: Property 'Items' does not exist in base class
Ответить с цитированием
  #8  
Старый 03.12.2010, 19:45
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Конечно ошибка будет. Скажи, зачем тебе писать обязательно от TCustomEdit? Сделай предка от TCustomComboBox, тогда и Items у тебя будет
__________________
Помогаю за Спасибо
Ответить с цитированием
  #9  
Старый 03.12.2010, 20:05
Kobelev Kobelev вне форума
Прохожий
 
Регистрация: 03.12.2010
Сообщения: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от v1s2222
Конечно ошибка будет. Скажи, зачем тебе писать обязательно от TCustomEdit? Сделай предка от TCustomComboBox, тогда и Items у тебя будет
по заданию предок должен быть TEdit. Я студент, задание по программированию=)
Ответить с цитированием
  #10  
Старый 03.12.2010, 20:19
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Тогда сделай массив TEdit'ов, которые будут при нажатии на кнопку "стрелочка вниз" рисоваться под основным, вписывая в себя определенный текст, и при щелчке - прятаться и писать в основной нужное
Иначе имхо проще написать с нуля, чем полностью перепрошить делфийский компонент.
бредовое задание...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #11  
Старый 03.12.2010, 21:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Человеку надо добавить свое свойство.
Но он не понимает что такое свойство, вот отсюда и все пробьлемы.

Свойство, это некоторая виртуальная конструкция, которая предназначена для обеспечения работы с некоторым тарибутом объекта, т.е. по сути представляет ссылку на реальное поле класса.

В данном случае:
Код:
type
  TMyComboBox = class(TCustomEdit)
  private
    FItems : TStringList;
    function GetItems : TStrings;
  ...
  published
    property Items : TStrings Read GetItems;
  end;

implementation

function TMyComboBox.GetItems : TStrings;
begin
  Result := FItems As TStrings;
end;
Ответить с цитированием
  #12  
Старый 04.12.2010, 12:53
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Сдается мне, не все так просто.
Надо в Edit кнопку впихнуть со стрелкой вниз и по щелчку на ней отображать ListBox поверх всего и обработать там событие выбора.
А Items тогда типа
Код:
function TMyComboBox.GetItems : TStrings;
begin
 Result := FListBox.Items As TStrings;
end;
Ответить с цитированием
  #13  
Старый 04.12.2010, 17:22
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Только вот ему ж надо вроде на основе TEdit а не TListBox...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #14  
Старый 04.12.2010, 17:48
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Так и будет на основе TEdit.
Только там будет еще кнопка и TListBox.
Не сказано же сделать из одних TEdit.
Где то даже видел примеры встраивания кнопки в TEdit.
А в последних Делфях есть TButtonedEdit если ему подойдет.
Можно в место TListBox взять TPopupMenu. Будет проще но немного некрасиво.
Типа DropDownButton только с Edit-ом в место кнопки.
Ответить с цитированием
  #15  
Старый 04.12.2010, 20:38
Kobelev Kobelev вне форума
Прохожий
 
Регистрация: 03.12.2010
Сообщения: 12
Репутация: 10
По умолчанию

Оо, всем спасибо за помощь=) кнопку в TEdit мне не нужно. Я сделаю просто автозаполнение при вводе данных.

Использовал код lmikle, свойство в компоненте появилось, потом были проблемки с редактированием этого свойства. При двойном щелчке по свойству появлялась ошибка 'Cannot assign a nil to a TRichEditStrings'. погуглил нашел ответ. Вот начало кода, что получилось, вроде работает правильно.

Код:
type
  TMyComboBox = class(TEdit)
  private
    { Private declarations }
    FLines: TStringList;
    function GetLines: TStrings;
    procedure SetLines(Value: TStrings);
  protected
    { Protected declarations }
  public
    { Public declarations }
...
    constructor Create(AOwner: TComponent); override;
  published
    { Published declarations }
  property Lines: TStrings read GetLines write SetLines;
  end;
procedure Register;

implementation

constructor TMyComboBox.Create(AOwner: TComponent); 
begin
 inherited Create(AOwner);
 FLines:=TStringList.Create;
end;

function TMyComboBox.GetLines : TStrings;
begin
  Result:=FLines As TStrings;
end;

procedure TMyComboBox.SetLines(Value:TStrings);
begin
  FLines.assign(value);
end;

Последний раз редактировалось Kobelev, 04.12.2010 в 21:13.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter