Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: 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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.044 c
2-1159770747
mfender
2006-10-02 10:32
2006.10.22
IHTMLDOMNode. nodeType?


2-1159784197
Димыч
2006-10-02 14:16
2006.10.22
Процессорное время


2-1159878142
XTD
2006-10-03 16:22
2006.10.22
Сколько максимум может быть получателей Е-майл IdSMTP1?


3-1156426216
Сергей А.
2006-08-24 17:30
2006.10.22
Длина поля в таблице MySQL


3-1156406737
qazwsx
2006-08-24 12:05
2006.10.22
Кто нибудь знает как в БД Access запихивать TStream?