Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.16;
Скачать: CL | DM;

Вниз

Проблема перехода из режима Design Time в Run Time   Найти похожие ветки 

 
bosia   (2005-10-20 02:38) [0]

Мною создан визуальный компонент, наследник о TPanel, который осуществляет градиентную заливку между двумя цветами. Есть св-во UseGradient:Boolean. В режиме Design-Time при установке этого св-во в true, всё отрабатывает хорошо.
Проблема: при переходе в режим Run-Time св-во сбрасывается или возможно не читается из файла формы. Если создавать компонент в режиме Run-Time, всё опять отлично отрабатывает. Пожайлуста подскажите как устранить проблему?
Заранее спасибо!!!


 
MBo ©   (2005-10-20 06:10) [1]

СтОит привести хотя бы интерфейсную часть класса и  реализацию конструктора.


 
Igorek ©   (2005-10-20 14:00) [2]


> Пожайлуста подскажите как устранить проблему?

- проверьте, меняется ли поле св-ва только в методе записи
- укажите Делфи путь к исходникам компонента
- поставьте точку останова на метод записи
- запустите, выведите окно стека вызовов и все увидите


 
bosia   (2005-10-20 14:36) [3]

Спасибо всем... Я уже нашёл неполадку.
Вот интерфейсная часть...

{----Gradient Direction----}
 TGradientDirection = (gdNone ,gdHorizontal);

 {----Class TGradientPanel----}
 TGradientPanel = class (TPanel)
  private
   {----private declarations----}
   FUseGradient:Boolean;
   FGradientColor1:TColor;
   FGradientColor2:TColor;
   FGradientLevel:Integer;
   FGradientDirection:TGradientDirection;
  protected
   {----protected declarations----}
   Procedure HGradient;
   Procedure Paint; Override;
   Procedure GradientDrawing;
   Procedure SetUseGradient(Enable:Boolean);
   Procedure SetGradientLevel(Level:Integer);
   Procedure SetGradientColor1(Color1:TColor);
   Procedure SetGradientColor2(Color2:TColor);
   Procedure SetGradientDirection(Direction:TGradientDirection);
  public
   {----public declarations----}
  published
   {----published declarations----}
   Property UseGradient:Boolean read FUseGradient write SetUseGradient default false;
   Property GradientLevel:Integer read FGradientLevel write SetGradientLevel default 0;
   Property GradientColor1:TColor read FGradientColor1 write SetGradientColor1 default clBlack;
   Property GradientColor2:TColor read FGradientColor2 write SetGradientColor2 default clBlack;
   Property GradientDirection:TGradientDirection read FGradientDirection write SetGradientDirection default gdNone;
 end;


 
bosia   (2005-10-20 19:29) [4]

Спасибо всем, я обнаружил неполадку, но устранить не могу... Всё по порядку... я переписал код компонента и вот что получается. Это интерфейсная часть...


{----Class TGradient----}
 TGradient = class (TGraphicControl)
  private
   {----private declaration----}
   FLevel:Integer;
   FColor1:TColor;
   FColor2:TColor;
   FEnable:Boolean;
   FDirection:TDirection;
  protected
   {----protected declaration----}
   Procedure HGradient;
   Procedure Paint; override;
   Procedure SetLevel(const Value:Integer);
   Procedure SetColor1(const Value:TColor);
   Procedure SetColor2(const Value:TColor);
   Procedure SetEnable(const Value:Boolean);
   Procedure SetDirection(const Value:TDirection);
  public
   {----public declaration----}
   Constructor Create(AOwner:TComponent); override;
  published
   {----published declaration----}
   Property Level:Integer read FLevel write SetLevel default 0;
   Property Enable:Boolean read FEnable write SetEnable default false;
   Property Color1:TColor read FColor1 write SetColor1 default clBlack;
   Property Color2:TColor read FColor2 write SetColor2 default clBlack;
   Property Direction:TDirection read FDirection write SetDirection default gdNone;
 end;


Есть направление градиентной заливки FDirection и переключатель FEnable. Если написать процедуры обработки св-в таким образом, то всё отрабатывает отлично:


{----Set "FDirection" Value----}
Procedure TGradient.SetDirection(const Value:TDirection);
begin
 if (FDirection<>Value) then
  begin
   FDirection:=Value;
   Invalidate;
  end;
end;

{----Set "FEnable" Value----}
Procedure TGradient.SetEnable(const Value:Boolean);
begin
 if (FEnable<>Value) then
  begin
   FEnable:=Value;
   Invalidate;
  end;
end;


Но мне необходимо сделать проверку:
- если направление не установлено, то не включать переключатель;
- если переключатель включён, то при установке направления в gdNone выключить его.

<CODE>{----Set "FDirection" Value----}
Procedure TGradient.SetDirection(const Value:TDirection);
begin
 if (FDirection<>Value) then
  begin
   FDirection:=Value;
   Invalidate;
   if (FDirection=gdNone) then
    FEnable:=false;
  end;
end;

{----Set "FEnable" Value----}
Procedure TGradient.SetEnable(const Value:Boolean);
begin
 if (FEnable<>Value) then
  begin
   FEnable:=Value;
   Invalidate;
   if (FDirection=gdNone) then
    FEnable:=false;
  end;
end;

При такой реализации в инспекторе объектов всё работает, но при переходе
к выполнению, опять ничего...


 
umbra ©   (2005-10-20 19:46) [5]

а как этот TGradient участвует в форме?


 
bosia   (2005-10-20 21:05) [6]

В последней реализации, как отдельный компонент, создаёться  в режиме Design-Time, все манипуляции в этом же режиме, что бы упростить работу с ним. Если подключать в режиме Rune-Time всё работает. Идея создания заключалась в том, чтобы создать панель, которая имела бы более привлекательный вид, чем стандартная. Получается, что для корректной работы необходимо убрать проверку из обоих процедур...

if (FDirection=gdNone) then
FEnable:=false;


Но это меня не устраивает.


 
DHDD   (2005-10-21 12:51) [7]

проверь в Create:

если Enable:=false то при создании формы будет false

не путай FEnable и Enable

значение Enable хранится в *.dfm



Страницы: 1 вся ветка

Текущий архив: 2006.04.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
2-1144168898
Vitalik__
2006-04-04 20:41
2006.04.16
combobox


2-1144045771
DelphiLexx
2006-04-03 10:29
2006.04.16
Выделение текста


2-1143617570
Лёха
2006-03-29 11:32
2006.04.16
сетевое подключение


2-1143821900
Delphi_is_cool
2006-03-31 20:18
2006.04.16
Создание кнопки на GroupBox


5-1129761486
bosia
2005-10-20 02:38
2006.04.16
Проблема перехода из режима Design Time в Run Time