Форум: "Компоненты";
Текущий архив: 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.009 c