|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Свойство Lines в TEdit
Приветствую. Подскажите как добавить в компонент TEdit свойство Lines, чтобы он отображался в инспекторе объектов?
Аналогичный как в Мемо, чтоб при двойном щелчке открывался String List Editor. Простые свойства в виде одной строки получается добавить, а тут вроде как должен быть тип TStrings, а его в { Published declarations } описать нельзя. Последний раз редактировалось Kobelev, 03.12.2010 в 19:04. |
#2
|
||||
|
||||
Как ты это себе представляешь в едит много строк? TEdit предназначен для ввода одной строки, а не многих. То бишь чтоб ввести в едит пиши: Edit1.Text:=...;
Помогаю за Спасибо |
#3
|
|||
|
|||
Цитата:
|
#4
|
||||
|
||||
А что тебе мешает посмотреть на исходник именно combobox 'a то?
Помогаю за Спасибо |
#5
|
|||
|
|||
не получается его найти(
|
#6
|
||||
|
||||
Найди модуль 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
|
|||
|
|||
у комбобокса предок другой, в TEdit нет свойств ни Items ни Lines.
Пробывал в published прописать property Items; Ошибка: Property 'Items' does not exist in base class |
#8
|
||||
|
||||
Конечно ошибка будет. Скажи, зачем тебе писать обязательно от TCustomEdit? Сделай предка от TCustomComboBox, тогда и Items у тебя будет
Помогаю за Спасибо |
#9
|
|||
|
|||
Цитата:
|
#10
|
||||
|
||||
Тогда сделай массив TEdit'ов, которые будут при нажатии на кнопку "стрелочка вниз" рисоваться под основным, вписывая в себя определенный текст, и при щелчке - прятаться и писать в основной нужное
Иначе имхо проще написать с нуля, чем полностью перепрошить делфийский компонент. бредовое задание... jmp $ ; Happy End! The Cake Is A Lie. |
#11
|
|||
|
|||
Человеку надо добавить свое свойство.
Но он не понимает что такое свойство, вот отсюда и все пробьлемы. Свойство, это некоторая виртуальная конструкция, которая предназначена для обеспечения работы с некоторым тарибутом объекта, т.е. по сути представляет ссылку на реальное поле класса. В данном случае: Код:
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
|
||||
|
||||
Сдается мне, не все так просто.
Надо в Edit кнопку впихнуть со стрелкой вниз и по щелчку на ней отображать ListBox поверх всего и обработать там событие выбора. А Items тогда типа Код:
function TMyComboBox.GetItems : TStrings; begin Result := FListBox.Items As TStrings; end; |
#13
|
||||
|
||||
Только вот ему ж надо вроде на основе TEdit а не TListBox...
jmp $ ; Happy End! The Cake Is A Lie. |
#14
|
||||
|
||||
Так и будет на основе TEdit.
Только там будет еще кнопка и TListBox. Не сказано же сделать из одних TEdit. Где то даже видел примеры встраивания кнопки в TEdit. А в последних Делфях есть TButtonedEdit если ему подойдет. Можно в место TListBox взять TPopupMenu. Будет проще но немного некрасиво. Типа DropDownButton только с Edit-ом в место кнопки. |
#15
|
|||
|
|||
Оо, всем спасибо за помощь=) кнопку в 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. |