Форум: "Компоненты";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];
Внизpublished свойство - класс Найти похожие ветки
← →
DevilDevil © (2006-08-14 14:42) [0]у многих компонентов имеется свойство Font. Его опции можно настраивать и в Object Inspector. Вопрос собственно и заключается в том, как реализовать такое свойство. В моём случае правда не всё так просто. У меня есть нескольк класс - стиль (цвет, шрифт, ...). В моём компоненте имеется определённое число (на данный момент 3) стилей, которые необходимо уметь изменять в Инспекторе.
Причём желательно, чтобы выглядело всё это так: у компонента есть свойство Styles (с плюсиком). Нажимаешь на плюсик, появляются 3 опции: csStandart1, csStandart2, csStandart3 (у каждого плюсик). Нажимаешь на плюсик необходимого стиля, настраиваешь его опции...
Очень прошу помочь. Объясняя слов не жалеть! :)
← →
DimaBr (2006-08-14 15:56) [1]Породите свой класс СТИЛЕЙ от TPersistent. В компоненте (в конструкторе) создаёте , а в деструкторе уничтожаете.
Если нужно несколько вариантов стилей (на одном месте в инспекторе), пишите класс родитель стилей, от коророго и порождаете собственные стили.
← →
DimaBr (2006-08-14 16:09) [2]Нечто подобное:
type
TMyFirstStyle = class(TPersistent)
private
fFirstProperty: integer;
public
constructor Create(AOwner: TPersistent);virtual;
published
property FirstProperty: integer read fFirstProperty write fFirstProperty;
end;
TMySecondStyle = class(TPersistent)
.......
end;
TStyles = class(TPersistent)
private
fOwner: TPersistent;
fFirstStyle: TMyFirstStyle;
fSecondStyle: TMySecondStyle;
public
function GetOwner: TPersistent;override;
constructor Create(AOwner: TPersistent);virtual;
destructor Destroy;override;
publiched
property FirstStyle: TMyFirstStyle read fFirstStyle write fFirstStyle;
property SecondStyley: TMySecondStyle read fSecondStyle write fSecondStyle;
end;
TMyComponent = class(TComponent) // или от чего другого
private
fMyStyle: TStyles;
public
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
published
property Styles: TStyles read fMyStyle write ffMyStyle;
end;
implementation
constructor TMyComponent.Create(AOwner: TComponent);
begin
inherited;
fStyles := TStyles.Create(self);
end;
destructor TMyComponent.Destroy;
begin
fStyles.free;
inherited;
end;
constructor TStyles.Create(AOwner: TPersistent);
begin
inherited Create;
fOwner := AOwner;
fFirstStyle := TMyFirstStyle.Create(AOwner);
fSecondStyle := TMySecondStyle.Create(AOwner);
end;
destructor TStyles.Destroy;
begin
fFirstStyle.free;
fSecondStyle.Free;
inherited;
end;
function TStyles.GetOwner: TPersistent;
begin
Result := fOwner;
end;
← →
DevilDevil © (2006-08-14 16:17) [3]скоро попробую. Надеюсь, поможет...
В любом случае, Спасибо!
← →
Юрий Зотов © (2006-08-14 19:28) [4]Чем эти три класса стиля отличаются друг от друга? Они как-то пересекаются, или нет?
Или же это три разных СВОЙСТВА одного и того же типа "мой_стиль"? Или же это ОДНО свойство, но с тремя разными значениями csStandart1, csStandart2, csStandart3? Или еще что-то?
← →
DimaBr (2006-08-15 09:31) [5]
> Юрий Зотов © (14.08.06 19:28) [4]
Скорее всего, (предполагаю), это стили раличной отрисовки отрисовки и активен может быть только один стиль. Тогда :
> пишите класс родитель стилей, от которого и порождаете собственные
> стили.
TCustomStyle = class(TPersistent)
end;
TFirstStyle = class(TCustomStyle)
end;
TStyles = (csStandart1,csStandart2,csStandart3);
TMyComponent = class(TComponent)
private
fStyle: TStyle;
fStyles: TCustomStyle;
published
property Styles: TCustomStyle read fStyles write fStyles;
property Style: TStyles read fStyle write SetStyle;
end;
procedure TMyComponent.SetStyle(const Value: TStyles);
var OldStyle: TCustomStyle;
begin
OldStyle := fStyles;
try
fStyles := nil;
case Value of
csStandart1: fStyles := TFirstStyle.Create(self);
csStandart2: ;
csStandart3: ;
else raise Exception.Create("Invalide Style");
end;{case}
if fStyles <> nil then fStyle := Value;
OldStyle.Free;
except
fStyles := OldStyle;
end;{try}
end;
← →
DevilDevil © (2006-08-15 15:31) [6]
> Юрий Зотов © (14.08.06 19:28) [4]
> DimaBr (15.08.06 09:31) [5]
Спасибо, вроде первго и второго ответов должно хватить.
У меня почему то в дизайн тайм всё изменяется, а если я запускаю программу на выполнение, то всё остаётся по-старому. Из-за чего это может происходить?
← →
DimaBr (2006-08-15 15:49) [7]Из-за того что вы скорее всего скапирывали компонент в другую папку а пути прописанны к старой.
← →
DevilDevil © (2006-08-15 15:55) [8]нет, у меня всё лежит в группе проектов, новых директорий и файлов я не создавал, всё писал в существующем модуле
← →
DimaBr (2006-08-15 15:58) [9]Удалите DCU-шку компонента.
← →
DevilDevil © (2006-08-15 19:09) [10]Нет, чё-то не фига: и перебилдил, и перекомпилил, и переустановид - безрезультатно :(((
← →
DimaBr (2006-08-16 10:06) [11]BreakPoint вам поможет.
← →
DevilDevil © (2006-08-16 18:12) [12]не поможет, - в DFM не сохраняется.
http://delphimaster.net/view/5-1155654550/
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.04 c