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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.092 c
15-1158957504
Курдль
2006-09-23 00:38
2006.10.22
Что-то притомился я жить в Москве... :(


4-1149111939
ychenick
2006-06-01 01:45
2006.10.22
Своя иконка возле кнопок свернуть,развернуть, закрыть


3-1156542184
spogi
2006-08-26 01:43
2006.10.22
до 1 млн. в записях...


15-1159444290
Проггер
2006-09-28 15:51
2006.10.22
Завораживающая картинка.


15-1159643531
Ученик чародея.
2006-09-30 23:12
2006.10.22
Чем вы пользуетесь для выбора папок?





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