Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ScrollBox глючит [Delphi]


Страницы:   1 2

GMax ©   (2006-05-31 14:56:00) 

если Align=caClient, то скроллбокс не всегда показывает целиком своё содержимое (проверял на paintbox)

то при растяжении окна верхней части не видать, то при сжатом окне до конца не проматывает и низа изображения не видно.

проверялось на 2.36, с CBOX_OLD тоже самое.

тестовый проектик(KOL+MCK с готовым exe) тут:
http://www.terraspace.ru/1/sbbug.zip(17k)

воспроизвести - поиграться с размерами формы и поскроллировать :)
например промотать до низа картинки и максимизировать - верха не будет.

как полечить?


MobiUS   (2006-06-09 09:46:00) [21]

У меня вопрос по поводу ScrollBox'а
Мне надо чтобы вертикальный скролл не отображался, НО! мне надо чтобы он был функционируемым (у меня стоит обработчик при скроле).


ecm   (2006-06-02 18:40:00) [22]

Up
Если у кого есть возражения (сображения) по поводу ScrollBox-a
постите сюда....
Надо будет это изменение предложить на рассмотрение Владимиру  в будущую версию.


GMax   (2006-06-01 18:10:00) [23]

спасибо, вроде всё побеждено :)


ECM   (2006-06-01 16:47:00) [24]


> GMax   (31.05.06 14:56)
> с CBOX_OLD тоже самое


К слову....
Владимир похоже писал список обновлений для 2.36 по памяти :)
Я долго думал что за CBOX такой?  (CBOX_OLD)
Нет такого слова в KOL.PAS !!! :) (Есть SBOX_OLDPOS но в данном случае это вобщем не важно т.к дело не в этом)
Глюки:

1)

> при сжатом окне до конца не проматывает и низа изображения
> не видно


> правда иногда всё же вижу - чёткой закономерности не нашёл

Закономерность я нашел - всё просто: если перед  уменьшением ширины окна горизонтальной полосы прокрутки не видно, а после она появляется -
имеем глюк. Он обусловлен тем, что в procedure NotifyScrollBox значение ClientRect вычисленное до установки горизонтальной полосы прокрутки
"устаревает" на момент установки вертикальной.

2)

> так же, если промотать скролл в правый нижней угол и раздвигать
> форму - видимая облась паинтбокса не увеличивается, а остаётся
> в углу, при любой резкости движения мышой

Да, после изменения параметров скроллбаров, тут надо еще раз прокрутить потомков (было упущено).

В результате вот как должна выглядеть NotifyScrollBox лишенная данных глюков:

procedure NotifyScrollBox( Self_, Child: PControl );
var SI: TScrollInfo;

...

var W, H: Integer;
   SzR: TRect;
   R: TRect;
begin
 if Assigned( Child ) then
 begin
   Child.AttachProc( WndProcNotifyParentAboutResize );
   Exit;
 end;
 CalcMinMaxChildren( Self_, SzR );
 W := SzR.Right - SzR.Left;
 H := SzR.Bottom - SzR.Top;

 R := Self_.ClientRect;
 if (R.Right = 0) or (R.Bottom = 0) then Exit; // for case when form is minimized
 SI.cbSize := sizeof( SI );
 SI.fMask := SIF_RANGE or SIF_PAGE or SIF_POS;

 GetSetScrollInfo( SB_HORZ, W, R.Right, SzR.Left, SzR.Right );
{+ecm} R := Self_.ClientRect;{/+ecm}
 GetSetScrollInfo( SB_VERT, H, R.Bottom, SzR.Top, SzR.Bottom );
{+ecm} if Assigned( Self_.fScrollChildren ) then Self_.fScrollChildren(Self_);{/+ecm}
end;


GMax   (2006-05-31 16:23:00) [25]

запускаю, растягиваю чуток форму(мышой), тут же уменьшаю её(мышой, побольше чем растянул), проматываю вниз - низа не вижу.

правда иногда всё же вижу - чёткой закономерности не нашёл, но похоже, если мышу двигать тихо-тихо, то не глючит, что-то успевает отработать, а если быстро, резко - ловим глюк :)

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


ECM   (2006-05-31 15:35:00) [26]

Угу ... эффект виден...
После восстановления окна из развернутого на весь экран состояния в нормальное - действительно вниз до конца не проматывается....
Плавное изменение размеров окна (мышкой за край окна) восстанавливает
правильный диапазон скроллинга и не глючит впринципе...
:(


ECM   (2006-05-31 15:26:00) [27]

Ок... буду посмотреть (жаль со временем только напряг) :))
Как раз по нему тут поднакопилось...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо