Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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
2-1179643152
А.Брей
2007-05-20 10:39
2007.06.10
Переменная


3-1174343198
DENMEN
2007-03-20 01:26
2007.06.10
Что удобней для модификации данных IBQuery или IBDataset?


2-1179473515
Новичек
2007-05-18 11:31
2007.06.10
Вызов команды del (либо erase) в Delphi.


11-1160674421
ANTPro
2006-10-12 21:33
2007.06.10
Минимальное приложение/dll на KOL


3-1174465155
Iuliy
2007-03-21 11:19
2007.06.10
Выуживание ошибки Оракла через BDE





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский