Page 2 of 3

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Nov 19, 2010 10:41 am
by Mario

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Nov 19, 2010 8:40 pm
by Gluk
Mario, спасибо

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Dec 17, 2010 2:32 am
by Rock_maniak_forever
Image

Делаю SCROLLBAR и у меня появилась проблема. Не могу никак сделать перемещение ползунка. То есть оно получилось, в результате долгих мучений, но не совсем правильно. Может кто поделится алгоритмом работы scrollbar'а. Возможно я что-то не правильно делаю. Вернее, я алгоритм реализовал неправильно наверно.

Если надо потестить, прикрепил бинарник.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Dec 17, 2010 9:37 am
by connect
Врядли это можно считать полноценным ответом, но аглоритмы полосы прокрутки есть в исходниках таких программ как Tinypad, Table, Eolite, KFM...

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Dec 17, 2010 12:40 pm
by Rock_maniak_forever
connect wrote:Врядли это можно считать полноценным ответом, но аглоритмы полосы прокрутки есть в исходниках таких программ как Tinypad, Table, Eolite, KFM...
1. Я уже неоднократно писал, что чужие исходники для меня тёмный лес (особенно без комментарий).
2. В Tinypad, скроллинг работает не совсем праваильно, и мне бы не хотелось бы заранее писать неправильно, в том случае, если я конечно разберусь в его исходниках.
3. Table и Eolite написаны на наСильниках, на которых я не умею программировать. Сложноваты будут.
4 Исходников KFM у меня нет, и на SVN тоже.

Неужели так сложно написать 5 - 10 строчек с алгоритмом? Или это секрет?

P.S. Пожалуйста помогите! :(

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Dec 17, 2010 2:11 pm
by IgorA
В скроллинге самые главные 3 параметра это:
- Максимальный размер документа
- Какая часть документа влазит в экран
- Позиция бегунка
Вот описание этих параметров из box_lib.obj со страницы http://wiki.kolibrios.org/wiki/Box_lib_scrollbar/ru :
# sb_max_area - область максимальная, актуально когда не влазит в отображаемую область, т.е. случай активности компонента (весь максимальный размер документа)
# sb_cur_area - область отображаемая (какая часть документа влазит в экран)
# sb_position - позиция бегунка изменяемая от 0 до значения (sb_max_area-sb_cur_area)
Все алгоритмы по работе со скроллингом сводятся к правильной обработке этих параметров и правильном отображении скроллинга на экране в зависимости от значений этих параметров. Остальные параметры не столь важны для программиста использующего твой компонент, они имеют для него второстепенное значение (цвет, положение, размер, ... и т.д.) . Детального алгоритма у меня нет т. к. я скроллинги не делал. Для каждого события (нажатие на мышку или клавиатуру) должен быть свой алгоритм ли функция.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Dec 17, 2010 4:21 pm
by Rock_maniak_forever
IgorA wrote:результат теста: мышей я смог сдвинуть ползунок скроллинга ниже кнопки
Знаю, scrollbar ещё не доделан. Я заглушку пока поставил только на кнопки. На ползунок пока не ставил, так как смысла нет, потому что он всё равно работает неправильно, и наверняка его надо будет переделывать.

На счёт параметров я знаю, но алгоритма перемещения scroller'а мне они не раскрывают. Именно поэтому, мне и нужен более детальный алгоритм, чтобы было с чем сравнивать. И если что-то неправильно, то поменять на правильно. Может я вообще неправильно алгоритм организовал в своём scrollbar'е, что скорее всего.

Но всё равно, спасибо.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Fri Dec 17, 2010 5:14 pm
by lev
Результаты поиска "scroll" по src, sdk, svn ("с" результаты опущены)

kolibri_0.7.7.0_src\lib\box_lib\scrollbar.mac
kolibri_0.7.7.0_src\programs\fs\kfm\scroll.inc
kolibri_0.7.7.0_sdk\INFOBOX\VSCROLL8.asm
---
svn\programs\develop\libraries\box_lib\trunk\scrollbar.mac
svn\programs\develop\libraries\box_lib\trunk\doc\scrollbar\scrollbar.htm
svn\programs\develop\libraries\libGUI\examples\src\ASM\SCROLL_BAR.ASM
svn\programs\develop\libraries\libGUI\examples\src\ASM\SCROLLED_WINDOW.ASM
---
ещё у Зубкова которого я взял по ссылке откуда-то с этого форума, scroll'ы описываются

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sun Dec 19, 2010 2:49 pm
by Rock_maniak_forever
lev wrote:Результаты поиска "scroll" по src, sdk, svn ("с" результаты опущены)

kolibri_0.7.7.0_src\lib\box_lib\scrollbar.mac
kolibri_0.7.7.0_src\programs\fs\kfm\scroll.inc
kolibri_0.7.7.0_sdk\INFOBOX\VSCROLL8.asm
---
svn\programs\develop\libraries\box_lib\trunk\scrollbar.mac
svn\programs\develop\libraries\box_lib\trunk\doc\scrollbar\scrollbar.htm
svn\programs\develop\libraries\libGUI\examples\src\ASM\SCROLL_BAR.ASM
svn\programs\develop\libraries\libGUI\examples\src\ASM\SCROLLED_WINDOW.ASM
---
Я просил алгоритм, а не код. Не знал что там есть. Врятли поможет, но спасибо.
lev wrote: ещё у Зубкова которого я взял по ссылке откуда-то с этого форума, scroll'ы описываются
Не нашёл. Хоть номер главы написал бы.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sun Dec 19, 2010 4:18 pm
by Mario
Rock_maniak_forever
Для начала я еще раз проясню свою позицию - я не считаю целесообразным написание собственного кода, если есть доступный рабочий пример чужого кода. Однако раз так хочется разбрасывать свои и грабли, то дело хозяйское.

В простейшем виде скроллбар получает два события: события мыши (нажатие и отпускание кнопки - соответственно наличие или отсутствие флагов отвечающих за эти кнопки) и событие перерасчета позиции при внешнем воздействии (клавиатура например или изменение размера отображаемых данных). Как уже писал ранее Игорь имеется три главных параметра с которыми оперирует код, на самом деле их четыре:
1) размер полной рабочей области (в условных единицах - строки или пиксели, смотря что выводится)
2) размер отображаемой части (в условных единицах - строки или пиксели, смотря что выводится)
3) размер занимаемый скроллбаром (в пикселах, за вычетом боковых кнопок)
4) размер занимаемый бегунком скроолбара (в пикселах)

обозначим параметры как: a, b, c, d

Исходя из вышеперечисленного имеем формулы:

c = a/K
d = b/K

где:
a - размер полной рабочей области
b - размер отображаемой части
c - размер занимаемый скроллбаром
d - размер занимаемый бегунком скроолбара
K - коэффициент соответствия

Изначально известны две величины a и с - все остальное пляшется исходя из них.

На практике формулы несколько усложняется, поскольку в текущем виде она будет обрабатывать позицию мыши слишком жестко и у пользователя будет создаваться ощущение рассинхронизации. Нужно еще учитывать, что пользователь захватив бегунок тащит его в одну или другую сторону и бегунок (пока не отпущена кнопка мыши или не закончилась область скроллбара) относительно курсора мыши должен идти строго синхронно, для этого приходится немного поизвращаться с кодом. К примеру в KFM как раз присутствует вариант когда есть рассинхронизация, этот же код но доработанный на 40-50% перекочевал в библиотеку Box_Lib и там уже недоработка с рассинхронизацией устранена.

Теперь представляем сколько времени и сил уходит на реализацию правильного скроллбара - вылизывать код придется основательно. Единственно почему я не взял код из Tinypad в свое время это его высокая интеграция в приложение. В KFM оно тоже было вшито сильно, но тот код хотя бы был мой - хотя два месяца на выдирание и отладку были не самыми простыми и приятными.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sun Dec 19, 2010 8:44 pm
by Rock_maniak_forever
Mario
Спасибо за полезную инфу, пригодится. :D
Mario wrote:Rock_maniak_forever
Для начала я еще раз проясню свою позицию - я не считаю целесообразным написание собственного кода, если есть доступный рабочий пример чужого кода.
Теперь я проясню свою позицию:
==========================
1. Чужой код, для меня тёмный лес. Четно говоря, мне это, уже надоело повторять.
2. Если даже я и буду разбирать чужой код, и вдруг что нибудь пойму, то на понимание всего кода у меня уйдёт куда больше времени, чем у вас на выдирание и отладку. Да и код, в чужой программе, может быть написан не полностью.
3. На scrollbar, который я написал недавно, у меня ушла всего неделя, с отладкой (но без оптимизации) и без знания алгоритма работы. Там только ползунок неправильно работает. Сначала пришлось смотреть работу scrollbar'а в давно всеми забытом Menuet'е (как потом оказалось, там он работает неправильно), а потом смотрел в Must Die (смотрел изменение scrollbar'а, при разных условиях). Часть алгоритма, взял: из Menuet'а, часть из Must Die и часть сам придумал. Да и scrollbar не простой, как в Tinypad или KFM. Да, люблю красивый фейс в проге, и без этого никак. А если бы я знал алгоритм заранее, то у меня бы ушло всего от 2-4 дней на его написание, со всеми вытекающими.
4. Мне не доставляет радости, ковыряться в чужом коде. Особенно, когда его не понимаешь.
5. Велосипед изобретать не хочется.
6. Время жалко на понимание и изобретение того, что уже придумано до меня.
7. На ошибках учатся.

Тем самым, мне проще, приятнее и быстрее написать программу (макрос) самому. Конечно, если я точно знаю алгоритм.

Ну допустим, перепишу я этот код, а знать как он работает, не буду. А если я этого не буду знать, то я не смогу правильно написать программу (макрос), ну или как-то её, или тот код,усовершенствовать или оптимизировать. Поэтому, мне архи-нужен и архи-важен алгоритм работы программы, а не код. И чем точнее и понятнее он будет описан, тем быстрее я напишу программу (макрос), и тем качественнее она будет работать.
Mario wrote:Однако раз так хочется разбрасывать свои и грабли, то дело хозяйское.
Вот я и спрашиваю, чтобы их не разбрасывать, и на них не натыкаться.
Mario wrote: .........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
На практике формулы несколько усложняется, поскольку в текущем виде она будет обрабатывать позицию мыши слишком жестко и у пользователя будет создаваться ощущение рассинхронизации. Нужно еще учитывать, что пользователь захватив бегунок тащит его в одну или другую сторону и бегунок (пока не отпущена кнопка мыши или не закончилась область скроллбара) относительно курсора мыши должен идти строго синхронно, для этого приходится немного поизвращаться с кодом. К примеру в KFM как раз присутствует вариант когда есть рассинхронизация, этот же код но доработанный на 40-50% перекочевал в библиотеку Box_Lib и там уже недоработка с рассинхронизацией устранена.
Я не в праве требовать от вас писать мне целую диссертацию, ибо понимаю, что ваше время бесценно и принадлежит только вам. Но если вы решите уделить мне ваше драгоценное время, чтобы помочь мне разрешить мою проблему, то хотелось бы побольше узнать о таинственном перемещении ползунка, которое так не даёт мне покоя. :D

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sun Dec 19, 2010 9:12 pm
by ChE
Rock_maniak_forever
Без обид, но пункты 4, 5, 6 противоречат друг другу по сути.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sun Dec 19, 2010 9:39 pm
by Rock_maniak_forever
ChE wrote:Rock_maniak_forever
Без обид, но пункты 4, 5, 6 противоречат друг другу по сути.
И чем же...

1. Зная инструкцию сборки велосипеда (алгоритм программы), то можно довольно быстро собрать свой велосипед из имеющихся деталей (инструкций). И даже смогу модифицировать под себя. При этом, буду знать, что у велосипеда колёса круглые, а не квадратные, и велосипед катится, а не прыгает, ну и так далее...
2. Чем ковыряться в имеющемся велосипеде, разбирать и проверять каждую деталь или механизм (код) в работе, а потом собирать свой со всеми неполадками, не доработками, кривыми деталями, кривым рулём и кривыми колёсами. Или изобретать свой велосипед вообще полностью. Мне на это как раз и жалко времени.
3. Не хочу чужой, кривой велосипед копировать. На который мне тоже жалко времени.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sun Dec 19, 2010 9:53 pm
by Mario
Rock_maniak_forever
1) тебе надо организовать обработку случая захвата бегунка - это зачастую не всегда очевидно когда только задумываешься над реализацией.
2) отлавливать момент когда бегунок захвачен, в примере простейшего скроллбара в этот момент бегунок прыгает и центрируется относительно текущего положения курсора мыши, для полноценного скроллбара этого естественно не должно происходить.

OFFTOP: скроллбар это не велосипед, а скорее цепной механизм - можно его и самому изобретать, но пророй лучше изобретать раму и колеса, чем это.

И без обид - если тебе не хочется, неприятно и неинтересно разбираться с чужим кодом, то вероятно другим также может быть интересно с твоим кодом, тем самым обрекаешь себя на ограниченный ресурс собственных сил. Именно чтобы не разбираться с чужим кодом и придумали динамически подключаемые библиотеки имеющие достаточно четко реализованный интерфейс. Я понимаю что это надо осознать просто - мне потребовалось 3-4 года и если бы я писал KFM сейчас он был бы другим.

Кстати в Tinypad реализация скроллбара полноценная, но как я уже сказал слишком глубоко вшитая в приложение, иначе автор бы сам вынес этот код в подключаемую библиотеку.

Re: KMLIB (Kolibri Macro Library) v0.05

Posted: Sat Apr 23, 2011 5:41 pm
by Albom
Rock_maniak_forever
Думаю, не нужно 3 экзешника фасма в архив включать. У каждого, уверен, есть свой - у кого под винду, у кого под линукс, у кого под кос.