Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1253742041
Германн
2009-09-24 01:40
2009.11.08
Секция except


6-1209894514
FireMan_Alexey
2008-05-04 13:48
2009.11.08
VPN


15-1252669622
boriskb
2009-09-11 15:47
2009.11.08
Ты чо? Шибко умный?


4-1221305909
Aggressor
2008-09-13 15:38
2009.11.08
Start->Run vs Start->cmd


2-1253620987
kate158
2009-09-22 16:03
2009.11.08
поиск ячеек по excel файлам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский