Не получается поместить ProgressBar в StatusBar

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

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

Re: Не получается поместить ProgressBar в StatusBar

Сообщение alaken » 24.04.2010 23:39:33

qivi писал(а):
alaken писал(а):
RomanS писал(а):выкладываю порт с Delphi QprogressBar пример использования внутри архива
QprogressBar позволяет менять стиль и цвет отрисовки, в том числе градиент. Позволяет выводить текст(свойство caption), позволяет убирать границу компонента, и многое другое.


Порт завязан на модуле Windows, в линукс не работает... :(


он нигде не работает, даже в винде...
здесь я просил помощи в портации, там ассемблерный код, не совместим с fpc
alaken
постоялец
 
Сообщения: 221
Зарегистрирован: 18.02.2010 09:02:13

Проблема с ProgressBar в StatusBar

Сообщение RomanS » 27.07.2010 16:48:59

Подниму старую ветку...

Доброго времени суток.
Расположил я на форме StatusBar с 3мя панелями. На 2ю панель кинул 2 ProgressBar'a.
И вот недавно случайно заметил неприятный баг - если изменить размер формы по диагонали
(сразу по ширине и высоте), то ProgressBar'ы прячутся за верхней или нижней границей StatusBar'a.
Что интересно - если у ProgressBar'а убрать 3ю панель, то всё приходит в норму.
У меня вопрос - как это можно победить, может кто сталкивался?
1.JPG
2.JPG


bug_statusbar.zip

---
FPC 2.5.1 SVN 15649, Lazarus 0.9.29 SVN 26868
У вас нет необходимых прав для просмотра вложений в этом сообщении.
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24

Re: Не получается поместить ProgressBar в StatusBar

Сообщение RomanS » 29.07.2010 16:05:45

Отвечу сам себе...
Данный баг получилось исправить только костылем - при прорисовке StatusBar'а для ProgressBar установить сначала Parent = nil, а затем Parent = StatusBar. Больше ничего в голову не пришло...
Код: Выделить всё
// pbStatusT - TProgressBar
procedure TfMcf3.StatusBar1DrawPanel(Sender: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
begin
...
          with pbStatusT do
          Begin
            if not Assigned(Parent) then
            Begin
              Width := Rect.Right - Rect.Left + 2;
              Left := Rect.Left - 1 ;
              Top := 2;
            end
            // Веременная заглушка от бага
            // Начало
            else
            Begin
              Visible := false;
              Parent := nil;
            end;
            // Конец

            if not Assigned(Parent) then
              Begin
                Parent := sender;
                Visible := True;
              end;
...
end;
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24

Пред.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru