![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ScrollBox глючит [Delphi]
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 14:16:00) [1]Если ставить ScrollBox.VerticalScrollBar.Visible := FALSE , то при попытки прокрутки он просто этоно не делает!
Может потомучто он автоматом задаёт папаметр Range=0 и при изменении этого параметра эфекта никакого не даёт
ECM (2006-06-09 14:11:00) [2]
> уммм, я наверно не в той теме пишу.... =), ибо КОЛ я не
> использую
))))))))))) на третьи сутки Зоркий Сокол заметил.... :))))
А в чем тогда вопрос?
ScrollBox.VerticalScrollBar.Visible := FALSE;
Но остальные вопросы тогда в другую конференцию.... :)
homm (2006-06-09 14:03:00) [3]
> И ненадо говорить что проект много весит
Не волнуйся, не буду :-)
> уммм, я наверно не в той теме пишу.... =), ибо КОЛ я не
> использую,
:-|
MobiUS (2006-06-09 14:01:00) [4]уммм, я наверно не в той теме пишу.... =), ибо КОЛ я не использую, а обычную дефолтную библиотеку дельфи. И ненадо говорить что проект много весит! (325 кб, но при помощи компрессора).
homm (2006-06-09 13:57:00) [5]Это ты с помощью КОЛ наваял? Молодец! Хвалю :-) Только Form.Transparent:=TRUEне дает такого эффекта. Ты наверное SetWindowLayout используеш с флагом TRANSPATENT? Тогда не знаю, чего они чернеют.
MobiUS (2006-06-09 13:53:00) [6]если уж слишком не понятно, то есть ссылка на картинку:
http://keep4u.ru/imgs/b/0606/4c10e07d115928541c.jpg
homm (2006-06-09 13:51:00) [7]))))))))))))))))
И как? Работает? :-)))))
Мы точно об оддном и том-же говорим? PControl.Transparent?
ECM (2006-06-09 13:51:00) [8]
> homm © (09.06.06 13:44) [16]
Согласен... :)
MobiUS (2006-06-09 13:48:00) [9]У меня у формы нету загаловка, а также чтобы убрать лишние "углы" и есть места, которые не надо отображать.
homm (2006-06-09 13:46:00) [10]
> Если тока у главной формы использую Transparent
Чего? Это то зачем?
MobiUS (2006-06-09 13:45:00) [11]
> Прозрачность/двойная буферизация используется?
Если тока у главной формы использую Transparent, но цвет отличается от того, что используется на ScrollBox. Так же сам ScrollBox лежит на image.
homm (2006-06-09 13:44:00) [12]2 ECM
А зачем
Rgn := CreateRectRgn(0,0,ScrollBox1.Width - cx,
ScrollBox1.Height - cy);
SetWindowRgn(ScrollBox1.GetWindowHandle,Rgn,TRUE);
если
ScrollBox1.Width := Panel1.Width + cx;
ScrollBox1.Height := Panel1.Height + cy;
?
ECM (2006-06-09 13:33:00) [13]
> скролы то исчезли, после них остались черные полски
Уберите выравнивание (если есть) у ScrollBox-а и переложите его на панель. А у неё сделайте обработчик:
procedure TForm1.Panel1Resize(Sender: PObj);
var
Rgn: HRGN;
cx,cy: Integer;
begin
cx := GetSystemMetrics(SM_CXVSCROLL);
cy := GetSystemMetrics(SM_CYHSCROLL);
ScrollBox1.Width := Panel1.Width + cx;
ScrollBox1.Height := Panel1.Height + cy;
Rgn := CreateRectRgn(0,0,ScrollBox1.Width - cx,
ScrollBox1.Height - cy);
SetWindowRgn(ScrollBox1.GetWindowHandle,Rgn,TRUE);
end;
А вообще-то первый метод "кошернее" :))
homm (2006-06-09 13:12:00) [14]
> Получается мне надо вычесли отношение Range и Positon и
> расчитать в процентах так чтобы процентное отношение ползунка
> на Panel было нужным и ползунок встал в нужное место.
А мы чем можем помочь? Написать код за тебя?
> [13] MobiUS © (09.06.06 13:05)
Прозрачность/двойная буферизация используется?
MobiUS (2006-06-09 13:05:00) [15]аа, вот и проблемку нашол со вторым методом: когда скролы то исчезли, после них остались черные полски (на фоне лежит image). Вопрос - как их убрать. Буду очень благодарен за помощь.
MobiUS (2006-06-09 12:56:00) [16]Уммм, осталось тока 1 проблемка:
У меня ползунок находится на Panel, и мне надо както его перемашать, при скролинге, тоесть основная проблема в том, чтобы когда ты скролиш кнопкой или колесиком мыши, ползунок должен вставать в то положение, которое нужно (ползунок в размере не изменяется, в чем и проблема).
Получается мне надо вычесли отношение Range и Positon и расчитать в процентах так чтобы процентное отношение ползунка на Panel было нужным и ползунок встал в нужное место. Уфф немного мудрено, яж даж сам чето не могу разобратся толком
MobiUS (2006-06-09 12:51:00) [17]Спасиба большое!
Второй вариант вполне подошол
я рад, 2 часа искал, как убрать скролл, перерыл весь инет, пасиба ^_^
ECM (2006-06-09 12:41:00) [18]Ага... :)
Ну тут можно пойти двумя путями (imho):
1) Если внутри ScrollBox-a один объект для прокрутки (или их немного) и их перемещение внутри ScrollBox-а делается "вручную" - установкой позиции(размера) - то тут подойдёт "простой" ScrollBox (simple) создаваемый функцией NewScrollBox c выключенными полосами прокрутки Bars = []. В МСК такой ScrollBox можно получить если установить в инспекторе объектов
для TKOLScrollBox.ScrollBars = ssNone и НЕ БРОСАТЬ на него ни одного компонента (в противном случае MCK будет генерировать вызов NewScrollBoxEx вместо NewScrollBox!!!). "Внутреннее наполнение" для ScrollBox-a придётся создавать вручную - в FormCreate . Например PaintBox можно затолкать так:
procedure TForm1.KOLForm1FormCreate(Sender: PObj);
begin
PaintBox1 := NewPaintBox(ScrollBox1).SetSize(200,200);
PaintBox1.OnPaint := PaintBox1Paint;
end;
2) Использовать ScrollBoxEx (Если Вы в MCK "накидали" в него компонент - то он будет использоваться автоматически) Он сам санимается прокруткой своих "детей" и задавать ScrollBars = ssNone - нет смысла - он всё равно включит нужную полосу прокрутки сам. Но в этом случае можно попытаться его обмануть - скрыть отрисовку полос уменьшив регион отрисовки. Например так:
procedure TForm1.ScrollBox1Resize(Sender: PObj);
var
Rgn: HRGN;
begin
Rgn := CreateRectRgn(0,0,ScrollBox1.Width-GetSystemMetrics(SM_CXVSCROLL),
ScrollBox1.Height-GetSystemMetrics(SM_CYHSCROLL));
SetWindowRgn(ScrollBox1.GetWindowHandle,Rgn,TRUE);
end;
MobiUS (2006-06-09 11:52:00) [19]У меня есть на форме отдельный обработчик.
Вощем я сделал прокрутку из 3 кнопок и панельки - хочу сделать интерфейс свой, но встроенный в ScrollBox скролл упорно не хочет убиратся. Мне нужно перехватывать скроллирование чтобы изменять позицию, а позиция меняется при прокручивании колёсика на мышке или нажатии на кнопку
ECM (2006-06-09 10:58:00) [20]Ничего не понял... :) А какой в этом смысл? Объясните подробнее