Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

published свойство - класс


DevilDevil ©   (2006-08-14 14:42:00) 

у многих компонентов имеется свойство Font. Его опции можно настраивать и в Object Inspector. Вопрос собственно и заключается в том, как реализовать такое свойство. В моём случае правда не всё так просто. У меня есть нескольк класс - стиль (цвет, шрифт, ...). В моём компоненте имеется определённое число (на данный момент 3) стилей, которые необходимо уметь изменять в Инспекторе.
Причём желательно, чтобы выглядело всё это так: у компонента есть свойство Styles (с плюсиком). Нажимаешь на плюсик, появляются 3 опции: csStandart1, csStandart2, csStandart3 (у каждого плюсик). Нажимаешь на плюсик необходимого стиля, настраиваешь его опции...

Очень прошу помочь. Объясняя слов не жалеть! :)


DevilDevil   (2006-08-16 18:12:00) [1]

не поможет, - в DFM не сохраняется.
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1155654550&n=12


DimaBr   (2006-08-16 10:06:00) [2]

BreakPoint вам поможет.


DevilDevil   (2006-08-15 19:09:00) [3]

Нет, чё-то не фига: и перебилдил, и перекомпилил, и переустановид - безрезультатно :(((


DimaBr   (2006-08-15 15:58:00) [4]

Удалите DCU-шку компонента.


DevilDevil   (2006-08-15 15:55:00) [5]

нет, у меня всё лежит в группе проектов, новых директорий и файлов я не создавал, всё писал в существующем модуле


DimaBr   (2006-08-15 15:49:00) [6]

Из-за того что вы скорее всего скапирывали компонент в другую папку а пути прописанны к старой.


DevilDevil   (2006-08-15 15:31:00) [7]


> Юрий Зотов ©   (14.08.06 19:28) [4]
> DimaBr   (15.08.06 09:31) [5]

Спасибо, вроде первго и второго ответов должно хватить.

У меня почему то в дизайн тайм всё изменяется, а если я запускаю программу на выполнение, то всё остаётся по-старому. Из-за чего это может происходить?


DimaBr   (2006-08-15 09:31:00) [8]


> Юрий Зотов ©   (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;


Юрий Зотов   (2006-08-14 19:28:00) [9]

Чем эти три класса стиля отличаются друг от друга? Они как-то пересекаются, или нет?

Или же это три разных СВОЙСТВА одного и того же типа "мой_стиль"? Или же это ОДНО свойство, но с тремя разными значениями csStandart1, csStandart2, csStandart3? Или еще что-то?


DevilDevil   (2006-08-14 16:17:00) [10]

скоро попробую. Надеюсь, поможет...
В любом случае, Спасибо!


DimaBr   (2006-08-14 16:09:00) [11]

Нечто подобное:


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;


DimaBr   (2006-08-14 15:56:00) [12]

Породите свой класс СТИЛЕЙ от TPersistent. В компоненте (в конструкторе) создаёте , а в деструкторе уничтожаете.

Если нужно несколько вариантов стилей (на одном месте в инспекторе), пишите класс родитель стилей, от коророго и порождаете собственные стили.


Наверх

Титульная страница Поиск, карта сайта Написать письмо