Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.01.08;
Скачать: [xml.tar.bz2];

Вниз

Количество строк в выпадающем списке св-ва в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.008 c
2-1134918079
Out84
2005-12-18 18:01
2006.01.08
Работа с ini файлами


4-1130765521
Чапаев
2005-10-31 16:32
2006.01.08
Регистрация сервиса


2-1134977546
oleg777
2005-12-19 10:32
2006.01.08
Регистрация в MSSQL Server 2000


2-1134920031
Out84
2005-12-18 18:33
2006.01.08
Поправка работы с ini файлами


2-1134849844
malenkii_myk
2005-12-17 23:04
2006.01.08
Данные из TFileStream в TString, как реализовать ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский