![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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.  |