Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Количество строк в выпадающем списке св-ва в Objeсе Inspector   Найти похожие ветки 

 
Priest   (2005-07-05 17:47) [0]

Я создал компонент со свойством типа TComponent. Я хочу чтобы для данного свойства в выпадающем списке появлялось 20 значений. А то не очень удобно листать :)


 
Юрий Зотов ©   (2005-07-05 18:49) [1]

Если свойство ссылается на TComponent, то, естественно, в списке появляются все лежащие на форме компоненты - Вы же сами так назначили.

Если Вам нужны не все, то измените тип свойства. Или напишите редактор свойства c перекрытым методом GetValues - и в нем вызывайте Proc только для нужных компонентов.


 
Ученик   (2005-07-06 00:59) [2]

Наверно есть где-нибудь настройка :-)

Не TComponentProperty, но все же действует для Color



unit Component1;

interface

uses
 SysUtils, Classes, Forms, Graphics;

procedure Register;

implementation

uses
 Controls, DesignIntf, VclEditors;

type
 TMyPropertyEditor = class(TColorProperty, ICustomPropertyListDrawing)
   procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
                                const ARect: TRect; ASelected: Boolean);
 end;

procedure TMyPropertyEditor.ListDrawValue(const Value: string; ACanvas: TCanvas;
                            const ARect: TRect; ASelected: Boolean);
begin
 with TControlCanvas(ACanvas).Control do
   if Screen <> nil then
     if Height < Screen.Height - Top then
       Height := Screen.Height - Top;
 inherited
end;

procedure Register;
begin
 RegisterPropertyEditor(TypeInfo(TColor), TControl, "Color", TMyPropertyEditor);
end;



 
Priest   (2005-07-06 11:19) [3]

>>Юрий Зотов ©   (05.07.05 18:49) [1]
Вы меня не поняли. Предположим у меня на форме 20 компонент. А высота выпадающего списка 7 строк. А я хочу сделать, чтобы выводились все 20 строк сразу.....

>>Ученик
Я так понимаю, что нужно копать в сторону интерфейса ICustomPropertyListDrawing...


 
Юрий Зотов ©   (2005-07-06 12:12) [4]

> Priest   (06.07.05 11:19) [3]

Насколько я понял, даже и копать уже не надо, надо только слегка изменить код примера. Например, так:

procedure TMyPropertyEditor.ListDrawValue(const Value: string; ACanvas: TCanvas; const ARect: TRect; ASelected: Boolean);
begin
 TControlCanvas(ACanvas).Control.Height :=
   20 * (ARect.Bottom - ARect.Top);
 inherited
end;

Только нужно проверить, что произойдет, если высота списка окажется слишком большой для его размещения на экране.


 
Priest   (2005-07-06 13:33) [5]

Попробовал я реализовать интерфейс ICustomPropertyListDrawing. Что ни один из его методов не вызывается. Видно где то ошибку сделал :(


 
Ученик   (2005-07-06 23:12) [6]

Пример для TComponentProperty


unit Component1;

interface

uses
 SysUtils, Classes, Graphics;

type
 TComponent1 = class(TComponent)
 private
   { Private declarations }
   FMyProperty: TComponent;
 protected
   { Protected declarations }
 public
   { Public declarations }
 published
   { Published declarations }
   property MyProperty: TComponent read FMyProperty write FMyProperty;
 end;

procedure Register;

implementation

uses
 Controls, DesignIntf, Forms, Windows, DesignEditors, VclEditors;

type
 TMyPropertyEditor = class(TComponentProperty, ICustomPropertyListDrawing)
   procedure ListMeasureHeight(const Value: string; ACanvas: TCanvas;
                                var AHeight: Integer);
   procedure ListMeasureWidth(const Value: string; ACanvas: TCanvas;
                                var AWidth: Integer);
   procedure ListDrawValue(const Value: string; ACanvas: TCanvas;
                                const ARect: TRect; ASelected: Boolean);
 end;

procedure TMyPropertyEditor.ListMeasureHeight(const Value: string; ACanvas: TCanvas;
                            var AHeight: Integer);
begin

end;

procedure TMyPropertyEditor.ListMeasureWidth(const Value: string; ACanvas: TCanvas;
                            var AWidth: Integer);
begin

end;

procedure TMyPropertyEditor.ListDrawValue(const Value: string; ACanvas: TCanvas;
                           const ARect: TRect; ASelected: Boolean);
begin
 with TControlCanvas(ACanvas).Control do
   if Screen <> nil then
     if Height < Screen.Height - Top then
       Height := Screen.Height - Top;
 DefaultPropertyListDrawValue(Value, ACanvas, ARect, ASelected)
end;

procedure Register;
begin
 RegisterComponents("Samples", [TComponent1]);
 RegisterPropertyEditor(TypeInfo(TComponent), TComponent1, "MyProperty", TMyPropertyEditor);
end;

end.


 
Priest   (2005-07-07 09:27) [7]

>>Ученик
Вот точно так сделал и я. Я только написал Height := Screen.Height - Top-10 а то на весь экран не очень красиво. Только вот Dream Designer не понимает интерфейса ICustomPropertyListDrawing. Он всё равно по умолчанию прорисовывает 7 пунктов.


 
Ученик   (2005-07-07 22:20) [8]

>Priest   (07.07.05 09:27) [7]
И что пользуетесь компонентами без исходников ? :-)


 
Priest   (2005-07-08 09:59) [9]

Да нет.Есть все исходники Дримов. Только сейчас есть и более важные задачи чем делать длинный выпадающий список :)))



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
8-1123179611
Logun
2005-08-04 22:20
2006.01.08
Управление Winamp-ом


3-1131906942
Layner
2005-11-13 21:35
2006.01.08
Помогите узнать в ADOQuery - Mode (состояние)


1-1134053998
alec_sey
2005-12-08 17:59
2006.01.08
ПОМОГИТЕ


14-1134488663
Ученик чародея
2005-12-13 18:44
2006.01.08
Microsoft должна сдохнуть!!!


2-1134755148
kami
2005-12-16 20:45
2006.01.08
Баальшие проблемы с TListView :(