Главная страница
    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.005 c
15-1251973975
Б
2009-09-03 14:32
2009.11.08
Не явные фичи Delphi.


15-1252605651
d@vinchi
2009-09-10 22:00
2009.11.08
Отобразить дные записи с HTML форматированием


9-1183543161
Dib@zol
2007-07-04 13:59
2009.11.08
Скринсейверы


1-1222711075
jiny
2008-09-29 21:57
2009.11.08
AdvStringGrid и Unicode данные (widecells)


1-1222762776
DVM
2008-09-30 12:19
2009.11.08
Base64 кодирование и UnicodeString





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский