Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Nov 15, 2019 9:47 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 34 posts ]  Go to page Previous 1 2 3 Next
Author Message
PostPosted: Fri Nov 19, 2010 10:41 am 
Выделена тема Рациональность выбора пути


Top
   
PostPosted: Fri Nov 19, 2010 8:40 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Mario, спасибо

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Fri Dec 17, 2010 2:32 am 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
Image

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

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


Attachments:
SB.KEX [1.51 KiB]
Downloaded 164 times

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image
Top
   
PostPosted: Fri Dec 17, 2010 9:37 am 
Offline
User avatar

Joined: Fri Mar 17, 2006 4:01 pm
Posts: 28
Врядли это можно считать полноценным ответом, но аглоритмы полосы прокрутки есть в исходниках таких программ как Tinypad, Table, Eolite, KFM...


Top
   
PostPosted: Fri Dec 17, 2010 12:40 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
connect wrote:
Врядли это можно считать полноценным ответом, но аглоритмы полосы прокрутки есть в исходниках таких программ как Tinypad, Table, Eolite, KFM...

1. Я уже неоднократно писал, что чужие исходники для меня тёмный лес (особенно без комментарий).
2. В Tinypad, скроллинг работает не совсем праваильно, и мне бы не хотелось бы заранее писать неправильно, в том случае, если я конечно разберусь в его исходниках.
3. Table и Eolite написаны на наСильниках, на которых я не умею программировать. Сложноваты будут.
4 Исходников KFM у меня нет, и на SVN тоже.

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

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

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Fri Dec 17, 2010 2:11 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
В скроллинге самые главные 3 параметра это:
- Максимальный размер документа
- Какая часть документа влазит в экран
- Позиция бегунка
Вот описание этих параметров из box_lib.obj со страницы http://wiki.kolibrios.org/wiki/Box_lib_scrollbar/ru :
Quote:
# sb_max_area - область максимальная, актуально когда не влазит в отображаемую область, т.е. случай активности компонента (весь максимальный размер документа)
# sb_cur_area - область отображаемая (какая часть документа влазит в экран)
# sb_position - позиция бегунка изменяемая от 0 до значения (sb_max_area-sb_cur_area)


Все алгоритмы по работе со скроллингом сводятся к правильной обработке этих параметров и правильном отображении скроллинга на экране в зависимости от значений этих параметров. Остальные параметры не столь важны для программиста использующего твой компонент, они имеют для него второстепенное значение (цвет, положение, размер, ... и т.д.) . Детального алгоритма у меня нет т. к. я скроллинги не делал. Для каждого события (нажатие на мышку или клавиатуру) должен быть свой алгоритм ли функция.


Attachments:
File comment: результат теста: мышей я смог сдвинуть ползунок скроллинга ниже кнопки
test_scroll.png
test_scroll.png [ 3.41 KiB | Viewed 3969 times ]
Top
   
PostPosted: Fri Dec 17, 2010 4:21 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
IgorA wrote:
результат теста: мышей я смог сдвинуть ползунок скроллинга ниже кнопки


Знаю, scrollbar ещё не доделан. Я заглушку пока поставил только на кнопки. На ползунок пока не ставил, так как смысла нет, потому что он всё равно работает неправильно, и наверняка его надо будет переделывать.

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

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

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Fri Dec 17, 2010 5:14 pm 
Offline

Joined: Tue Oct 05, 2010 6:05 pm
Posts: 216
Результаты поиска "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'ы описываются


Top
   
PostPosted: Sun Dec 19, 2010 2:49 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
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'ы описываются

Не нашёл. Хоть номер главы написал бы.

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Top
   
PostPosted: Sun Dec 19, 2010 4:18 pm 
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 оно тоже было вшито сильно, но тот код хотя бы был мой - хотя два месяца на выдирание и отладку были не самыми простыми и приятными.


Top
   
PostPosted: Sun Dec 19, 2010 8:44 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
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

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


Last edited by Rock_maniak_forever on Sun Dec 19, 2010 9:12 pm, edited 1 time in total.

Top
   
PostPosted: Sun Dec 19, 2010 9:12 pm 
Offline

Joined: Thu Aug 13, 2009 10:39 am
Posts: 54
Rock_maniak_forever
Без обид, но пункты 4, 5, 6 противоречат друг другу по сути.


Top
   
PostPosted: Sun Dec 19, 2010 9:39 pm 
Offline
User avatar

Joined: Mon Feb 09, 2009 4:13 am
Posts: 445
ChE wrote:
Rock_maniak_forever
Без обид, но пункты 4, 5, 6 противоречат друг другу по сути.

И чем же...

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

_________________
\ Маузер в руке, Путин – на крюке! \ Путину – клизму! Смерть капитализму! \ Путин – параша, победа будет наша!\
\ Застрели буржуя в спину! Он не лучше чем скотина! \
Image


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

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

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

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


Top
   
PostPosted: Sat Apr 23, 2011 5:41 pm 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
Rock_maniak_forever
Думаю, не нужно 3 экзешника фасма в архив включать. У каждого, уверен, есть свой - у кого под винду, у кого под линукс, у кого под кос.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 34 posts ]  Go to page Previous 1 2 3 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited