Форум: "Компоненты";
Текущий архив: 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.04 c