Глючит TScrollBox

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Глючит TScrollBox

Сообщение de-signer » 22.03.2016 12:22:44

Привет всем.

На форме имеется ScrollBox. В него в RunTime напихиваются компоненты TLabel и TCheckBox. Ничего сверхестественного с ним не делается, НО на одном компе под виндой всё отображается корректно, а на другом пустой ScrollBox. Проект разрабатывается под linux, win32 версия проекта собирается в VirtualBox с гостевой Windows XP (кстати в ней всё работает как надо). Может кто сталкивался с таким или похожим глюком. Может дело не в lazarus и fpc, а в самой windows, в которой не пашет.
Я в растерянности. Даже не знаю какой вопрос гуглю задать.

Вот так запихиваю компоненты:
Код: Выделить всё
  for i := 0 to Length(mark_names) - 1 do begin
    mark_labels[i] := TLabel.Create(nil);
    mark_drawed[i] := TCheckBox.Create(MarkScrollBox); // это уже от безысходности, всё равно не пашет
    mark_labels[i].Caption := mark_names[i].gost;
    mark_labels[i].Font.Size := 12;
    mark_drawed[i].Caption := '';
    mark_drawed[i].Checked := mark_names[i].drawed;
    mark_labels[i].Parent := MarkScrollBox;
    mark_drawed[i].Parent := MarkScrollBox;
    mark_labels[i].Visible := True; // тоже от безысходности, уже и не знаю куда ткнуться
    mark_drawed[i].Visible := True;
    mark_drawed[i].OnChange := @MarkCheckBoxChange;

    mark_labels[i].Left := xstart;
    mark_labels[i].Top := y - 3;
    mark_drawed[i].Left := xstart + xdist;
    mark_drawed[i].Top := y;

    y := y + ydist;
  end;


Добавлено спустя 1 минуту 58 секунд:
Забыл добавить: если я брошу на форму тот же TCheckBox в DesignTime, то он отображается даже на глючной windows xp.
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Глючит TScrollBox

Сообщение DYUMON » 22.03.2016 15:18:39

там на глючном компе случайно не стоит какая нибудь пиратская тема оформления ?
Аватара пользователя
DYUMON
постоялец
 
Сообщения: 234
Зарегистрирован: 11.03.2009 13:32:54

Re: Глючит TScrollBox

Сообщение de-signer » 22.03.2016 16:16:27

Тема стандартная winXP. Блин, в VirtualBox установлена гостевая WinXP с _того же_ установочного пакета. Что за глюк никак не въеду. Если контрол создаётся в IDE, то всё люкс, если я создаю его руками в рантайме - всё капец. Может в Qt созданный контрол как-то регистрировать нужно?
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Глючит TScrollBox

Сообщение vitaly_l » 22.03.2016 16:22:31

de-signer писал(а):Если контрол создаётся в IDE, то всё люкс, если я создаю его руками в рантайме - всё капец

Попробуйте, создать его изначально на форме, а потом копировать все установки.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Глючит TScrollBox

Сообщение de-signer » 22.03.2016 17:05:53

Думаю, что если не разберусь, то так и сделаю. Накидаю контролов с запасом, всем Visible := False, а потом нужные выдёргивать, расставлять, задавать свойства.
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Глючит TScrollBox

Сообщение vitaly_l » 22.03.2016 17:10:42

de-signer писал(а):Думаю, что если не разберусь, то так и сделаю. Накидаю контролов с запасом, всем Visible := False, а потом нужные выдёргивать, расставлять, задавать свойства.

возможно проблема в местоположении объявления в uses;


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Глючит TScrollBox

Сообщение sts » 22.03.2016 17:13:10

y инициализируется значением?

Код: Выделить всё
MarkScrollBox.DisableAlign;
try

for i := 0 to Length(mark_names) - 1 do begin
    mark_labels[i] := TLabel.Create(MarkScrollBox);
    mark_labels[i].Visible := False;
    mark_labels[i].Parent := MarkScrollBox;

    mark_drawed[i] := TCheckBox.Create(MarkScrollBox);
    mark_drawed[i].Visible := False;
    mark_drawed[i].Parent := MarkScrollBox;

    mark_labels[i].Caption := mark_names[i].gost;
    mark_labels[i].Font.Size := 12;
    mark_drawed[i].Caption := '';
    mark_drawed[i].Checked := mark_names[i].drawed;
    mark_labels[i].Visible := True; // тоже от безысходности, уже и не знаю куда ткнуться
    mark_drawed[i].Visible := True;
    mark_drawed[i].OnChange := @MarkCheckBoxChange;

    mark_labels[i].Left := xstart;
    mark_labels[i].Top := y - 3;
    mark_drawed[i].Left := xstart + xdist;
    mark_drawed[i].Top := y;

    y := y + ydist;
  end;
finally
  MarkScrollBox.EnableAlign;
end;


Добавлено спустя 1 минуту 48 секунд:
както так попробовать надо
зы: некоторые свойства требуютглючат без парента

Добавлено спустя 1 минуту 15 секунд:
временный MarkScrollBox.DisableAlign - увеличивает скорость заполнения
sts
постоялец
 
Сообщения: 455
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Глючит TScrollBox

Сообщение de-signer » 22.03.2016 17:45:03

Спасибо. Завтра попробую.
зы: некоторые свойства требуютглючат без парента
Не знал =(

Добавлено спустя 23 часа 5 минут 23 секунды:
О прикол!
Код: Выделить всё
if MarkScrollBox.ControlsCount = 0 then ShowMessage('Контролов нет!');

Угадайте что я увидел после запуска? "Контролов нет!" 8-0 Что за хрень?
Создал новый проект накидал на форму всё, что нужно. Вобщем, воспроизвёл ситуацию. Опробовал - всё работает как часы и в гостевой ОС и в глючной винде. Вот это для меня вообще новость. Ок. Покопаюсь ещё. Может мысль меня посетит.

Добавлено спустя 18 часов 59 минут 21 секунду:
Нашёл. Глючит не скроллбокс, а моя голова. mark_names грузится из файла настроек, свежую версию которого я забыл скопировать на машину с виндой. В итоге Length(mark_names) = 0 отсюда и вся петрушка =(
Обидно чуть не до слёз, ведь всё уже проверил, ан нет подвох как обычно лежал на поверхности.
Всем спасибо. Закрыто.
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Глючит TScrollBox

Сообщение Alex2013 » 25.03.2016 01:11:58

"Вы панике не подавайтесь организовано спасайтесь ... " :idea: программирование вообще "по умолчанию " занятие малость пароноидальное ... :D
Слишком много всего в уме держать нужно и заранее предусматривать совсем уж вроде как "невероятные ситуации" ... :wink:
Alex2013
долгожитель
 
Сообщения: 3145
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 227

Рейтинг@Mail.ru