Форум: "Начинающим";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
ВнизВопросы по поводу Scroll-а Найти похожие ветки
← →
faiwer © (2009-09-26 22:44) [0]На форме висит скролл бокс, в котором часто меняется содержимое. среди содержимого встречаются TsListBox-ы и TsRichEdit-ы. Но так же много просто элементов аля эдитки, кнопки и прочее. Возникло несколько неприятных трудностей связанных со скролом.
1 Задача: сделать так чтобы можно было колесом мышки прокручивать скроллбокс, при условии что сейчас фокус не находится в компоненте с активным скроллом.
Попробовал это сделать так:procedure TMainF.BoxMouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer;
MousePos: TPoint; var Handled: Boolean);
var
i: Shortint;
c: TControl;
begin
if (Sender is TsRichEdit) or (Sender is TsListBox) then exit;
if wheeldelta>0 then i:=-1 else i:=1;
(sender as TsScrollBox).VertScrollBar.Position:=(sender as TsScrollBox).VertScrollBar.Position
+ i*150;
end;
"Но тут промашка вышла, тут конечно переборщили" (с) Высоцкий. Проблема в том что у этих самых RichEdit & ListBox далеко не всегда есть активный скролл. А как узнать стандартными методами есть ли у них скролл я не нашёл. По крайней мере свойства IsScrollBarVisible как у них нету.
Вт2 орая промашка в том что если активный элемент какой нибудь TEdit то на любое применение скрола BoxMouseWheel вызывается ажно 5-6 раз подряд (прокручивается от души :D) а если в TEdit или других то 1 раз и всё получается гладко.
3 У меня на форме вообще так устроено:
Box: TsScrollBox => MainP: Panel => а на ней уже всё остальное
MainP.AutoSize=true; и я переодически на ней формы (они умну как модули). И в момент когда MainP увеличивается в размерам, скроллбар не меняется до тех пор пока юзер не ткнёт в какой нибудь елемент с Focus-ом. Есть от этого лекарство? Есть задумка при MainP.OnRezise как нибудь вручную... стоит её реализовывать?
4 И наконец последний вопрос. Можно ли как нибудь добиться чтобы ScrollBox показывал вертикальный скролл всегда, внезависимости от размеров содержимого (у RichEdit такое есть). Если убрать autoscroll то именно так и происходит, только наоброт. Теоритически я могу сам обрабатывать все его движения, только ето мягко говоря, как мне кажется не лучший вариант.
← →
0x00FF00 (2009-09-27 00:03) [1]*задумчиво:*
Хм. А какова задача?
Не лучше ли ещё раз перепродумать интерфейс, вместо того чтобы вскрывать на заднице вены, пытаясь обойти такие грабли?
Ибо,
> ето мягко говоря, как мне кажется не лучший вариант.
← →
turbouser © (2009-09-27 02:20) [2]
> как узнать стандартными методами
нафига? активировать controlonpos и пущай сам wheel обрабатывает.. если умеет :)
← →
Германн © (2009-09-27 02:49) [3]
> 0x00FF00 (27.09.09 00:03) [1]
>
> *задумчиво:*
>
> Хм. А какова задача?
+1
P.S.
Обычно когда "так" задаётся вопрос, то приводится текстовый проект, на котором можно увидеть описанные проблемы.
← →
turbouser © (2009-09-27 04:00) [4]
> Германн © (27.09.09 02:49) [3]
> Обычно
Неа. В здесь ни теКстовый проект, ни подсекзка в куда рулить - не поможнт.
← →
Германн © (2009-09-27 04:20) [5]
> turbouser © (27.09.09 04:00) [4]
>
>
> > Германн © (27.09.09 02:49) [3]
>
>
> > Обычно
>
> Неа. В здесь ни теКстовый проект, ни подсекзка в куда рулить
> - не поможнт.
>
За очепятку извин(и)яюсь.
За "подсекзк"у извиняйся сам.
:)
← →
faiwer © (2009-09-27 09:07) [6]0x00FF00, интерфейс я давно перепродумал... во всяком случае как в итоге всё должно выглядеть знаю. А вот как реализовать, пробовал уже разными способами, единственное чего добился - отказался от ов, ибо если у панели стоит autosize то он всё равно не робит, а если autosize не стоит то проблематично следить за размером панели.
Насчёт привести текстовый проект не догнал... в нём 1400+ строк кода. Привожу скриншоты
http://pics.kz/s2/b8/0b/97/c8/b80b97c87a808f62a7388fd971d90e61.jpg
http://pics.kz/s3/c2/a4/ca/55/c2a4ca554abb83b2dfa2cc9bd3d87c27.jpg
← →
faiwer © (2009-09-27 09:12) [7]TMenuP
TListP
TMainP <= панелька на которой находится вся правая часть. нужна для других режимов просмотра
|
--- TScrollBox // <= он и скролит
|
---TScrollP // панелька с autosize, которую и нужно скролить
|
---TNameEditP // "модули" которые alTOP друг за другом
---TFotoEditP
---...
← →
faiwer © (2009-09-27 09:13) [8]
> ... добился - отказался от СПЛИТТЕРов, ибо ес ...
fxd *
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c