Вниз
Скачать: CL | DM;

Не инициализируются переменные в конструкторе   Найти похожие ветки 

← →
Plotnick   (2006-02-28 16:44) [0]

Создаю компонент от TGraphicControl.
В конструкторе производится инициализация начальными значениями. Ну, например...

 
 FBtnWidths := 20;

 FVertMovement := False;
 FMaxValue := Now;
 FMinValue := FMaxValue - 90;
 FMaxHeight := 68;
 FMinHeight := 0;


Эти значения используются в

procedure Paint; override;


Однако при первом вызове Paint все они оказываются непроинициализированными. Так, например FBtnWidths оказывается равной нулю.

Что я не так делалю или не делаю?


← →
MBo ©   (2006-02-28 16:47) [1]

>Что я не так делалю или не делаю?
Более полный код приведи


← →
Plotnick   (2006-02-28 16:56) [2]

Точнее так. Если через ObjectInspector, то все получается. А если в конструкторе, то нет. Это касается, как published, так и не published свойств.


← →
Plotnick   (2006-02-28 16:58) [3]


constructor TEZGraphScroll.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 Width := 260;
 Height := 70;

 FBtnWidths := 20;

 FVertMovement := False;
 FMaxValue := Now;
 FMinValue := FMaxValue - 90;
 FMaxHeight := 68;
 FMinHeight := 0;
 FViewHeight := FMaxHeight - FMinHeight;
 FViewWidth := FViewHeight/GetTimeInOneHorzPixel;
 FHorzPos := FMinValue;
 FVertPos := FMinHeight;

 CustomDrawBk := False;
 CustomDrawView := False;
 BkColor := clWhite;
 ViewColor := clRed;

end;

procedure TEZGraphScroll.DrawButtons;
var
 BtnHeight: Integer;
 LeftR,RightR: TRect;
 Border: Integer;
 BmWidth: Integer;
 LeftBmP,RightBmP: TPoint;
begin
   BtnHeight := Height;
   LeftR := Rect(0,0,FBtnWidths,BtnHeight);
   RightR := Rect(Width - FBtnWidths,0,Width,BtnHeight);

   if FLeftBtnDown then
     Border := BDR_SUNKENOUTER
   else
     Border := BDR_RAISEDINNER;

............................


Можно чуть конкретнее, что именно привести?


← →
Reindeer Moss Eater ©   (2006-02-28 17:06) [4]

Волшебство бывает, но не в программировании.
У тебя есть приватное поле, объявленное в конкретном классе.
Изменения значения поля возможны только операциями присвоения.
Ищи по тексту, где у тебя идет присвоение значения FBtnWidths.


← →
Plotnick   (2006-02-28 17:06) [5]

Еще такой момент:
Если я в конструкторе напишу Bitmap := TBitmap.Create
то конструктор отработает и Bitmap создастся, но в Paint он становится равен nil, хотя такого приравнивания у меня нет в коде.

И еще, на компоненте у меня руками создаются кнопки со стрелками, стрелки в виде битмапов загружаются из ресурсов. Но в дизайнтайме дельфи кричит, что ресурс не найден, хотя в рилтайме все работает.


← →
Plotnick   (2006-02-28 17:10) [6]


> Ищи по тексту, где у тебя идет присвоение значения FBtnWidths.


Есть такое место:
procedure TEZGraphScroll.SetBtnWidths(const Value: Integer);

Однако, чуть выше я написал про битмап. Все то же самое.
Кроме того, те значения которые я задаю в конструкторе, не отображаются в ObjectInspectore. То есть не происходит начальная инициаизация при помещении компонента на форму.


← →
Plotnick   (2006-02-28 17:28) [7]

Все, спасибо. Сам разобрался. Вся беда, похоже исключительно из-за дельфовых заморочек с работающими двумя копиями дельфи с одновременной правкой компонентов.


← →
Юрий Зотов ©   (2006-03-01 10:02) [8]

> Plotnick   (28.02.06 17:28) [7]

Вся беда, похоже, не в этом, а в том, что в объявлении конструктора пропущено слово override.


← →
Гошик Кувшинов   (2006-03-03 12:21) [9]

а ещё может быть, что конструктор предка создаёт окно и сразу его показывает и тогда первый вызов paint будет раньше, чем твой код в конструкторе. попробуй сделать присвоения до вызова inherited create


← →
ancara ©   (2006-03-03 13:24) [10]


> Гошик Кувшинов   (03.03.06 12:21) [9]

конструктор предка создаёт окно и сразу его показывает и тогда первый вызов paint будет раньше


невозможно, т.к. для рисования нужно DC, а без Parent"а его не получить,
поэтому после Create будет SetParent и только потом Paint. Вызов Paint без Parent"а приведет к собщению
Control "" has no parent window.



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

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.026 c
3-1156767901
Shaman_
2006-08-28 16:25
2006.10.22
Отключить механизм кэширования у TClientDataSet


6-1149007980
nikitian
2006-05-30 20:53
2006.10.22
не работает post в idHTTP (indy 9)


2-1160311412
Del_
2006-10-08 16:43
2006.10.22
Инициализация события из потока


15-1159783478
Slider007
2006-10-02 14:04
2006.10.22
С днем рождения ! 1 октября


2-1159794964
DevilDevil
2006-10-02 17:16
2006.10.22
TMEMO




   Наверх