Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Вопросы по поводу 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1253861450
MonoLife
2009-09-25 10:50
2009.11.08
Уменьшение размера картинки


1-1221328691
ПЗ
2008-09-13 21:58
2009.11.08
Классы в DLL на Delphi и MSVC++ (бой продолжается)...


2-1254033768
faiwer
2009-09-27 10:42
2009.11.08
Autosize для RichEdit


11-1207590818
MTsv DN
2008-04-07 21:53
2009.11.08
Перехват инфы из консольки


15-1252345693
oldman
2009-09-07 21:48
2009.11.08
Поиск и группировка файлов по "тэгам"