Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

Проблема перехода из режима 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.042 c
4-1138295443
Святослав
2006-01-26 20:10
2006.04.16
Как программно вызвать окно настройки шрифтов?


15-1143613908
Экспериментатор
2006-03-29 10:31
2006.04.16
Как в XP отключить эти всплывающие сообщения?


2-1143798876
KyRo
2006-03-31 13:54
2006.04.16
Фильтрация


15-1143028357
TStas
2006-03-22 14:52
2006.04.16
Чего почитать, чтобы понять, как винды работают?


15-1143454171
elf_ik
2006-03-27 14:09
2006.04.16
Borland s Delphi goodbye?





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