![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Приветствую. Подскажите как добавить в компонент 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'ов, которые будут при нажатии на кнопку "стрелочка вниз" рисоваться под основным, вписывая в себя определенный текст, и при щелчке - прятаться и писать в основной нужное
![]() Иначе имхо проще написать с нуля, чем полностью перепрошить делфийский компонент. бредовое задание... |
|
#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...
|
|
#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. |