Page 10 of 13

Re: Общесистемный буфер обмена

Posted: Sun Nov 03, 2013 10:03 pm
by Mario_r4
eAndrew wrote:Ну в той же винде, например, системный контрол Edit использует буфер обмена. Имхо, это как раз таки задача контрола.
Box_Lib не выполняет дополнительных действий - он только рисует контролы, не более. Я не хочу в этой теме обсуждать Box_Lib, это тема про буфер обмена.

Re: Общесистемный буфер обмена

Posted: Tue Nov 05, 2013 12:03 am
by Mario_r4
Промежуточные результаты для заинтересованных людей:
kernel.7z (93.36 KiB)
Downloaded 367 times
clipboard.7z (4.37 KiB)
Downloaded 381 times
Одна программа добавляет слоты с текстом, другая отображает доступные слоты.

З.Ы. Пока не реализована зашита по записи, чтобы более одного приложения не пыталось записывать. Также товарищ hidnplayr обозначил в чате проблему с устареванием данных между вызовами функции. Нужно еще подумать.

Re: Общесистемный буфер обмена

Posted: Tue Nov 05, 2013 10:59 am
by punk_joker
API для работы меняться будет?

Re: Общесистемный буфер обмена

Posted: Tue Nov 05, 2013 11:00 am
by punk_joker
И круто в общем. Наконец то, сами знаете кто, появится в KolibriOS

Re: Общесистемный буфер обмена

Posted: Tue Nov 05, 2013 9:58 pm
by Mario_r4
punk_joker wrote:API для работы меняться будет?
Такая вероятность есть.

З.Ы. Возникли запарки на работе, в это связи разработка пока приостановилась.

Re: Общесистемный буфер обмена

Posted: Sun Nov 10, 2013 7:12 am
by Mario_r4
SVN r.4199 код Clipboard (ф.54) залит в исходники ядра. Описание в файлах sysfuncs.txt и sysfuncr.txt

Внимание! API изменился и предыдущие примеры выложенные в этой теме корректно работать не будут.

Re: Общесистемный буфер обмена

Posted: Sun Nov 10, 2013 7:21 am
by Mario_r4
SVN r.4200 примеры работы с буфером обмена.

Для совсем ленивых - качаете ночную сборку r.4199 или новее, а для примеров вот архив:
Downloaded 368 times

Re: Общесистемный буфер обмена

Posted: Wed Nov 13, 2013 3:15 pm
by IgorA
Чего-то не сходится документация с примером, в clipboard_container.txt сказано:
2.1 Текст
Данные в третьем dword содержат тип:
0 = UTF
1 = 0866
А в примере clip_put.asm видим следущее:

Code: Select all

buffer_data:
	dd buffer_data.end - buffer_data
	dd 0	; type 'text'
	dd 866	; text encoding
	db 'Test message to the clipboard'
.end:
Видимо в примере вместо 866 нужно поставить 1.

Re: Общесистемный буфер обмена

Posted: Wed Nov 13, 2013 3:21 pm
by Mario_r4
IgorA
Да, ты прав - меня кажется переглючило, т.к. писал код ночью.

Re: Общесистемный буфер обмена

Posted: Thu Nov 14, 2013 2:56 pm
by IgorA
В связи с ревизией 4228 возник вопрос, есть ли в буфере обмена ограничение на число слотов хранимых в нем? Потому что я могу копировать в буфер текст, а очистка буфера не происходит сама по себе, разве что только с тестовым примером могу чистить.

Re: Общесистемный буфер обмена

Posted: Thu Nov 14, 2013 3:44 pm
by Mario_r4
1023 или 1024, я точно не проверял. В принципе ограничение только выделенной странице памяти и при желании количество слотов можно даже увеличить, но зачем?

1) У меня была идея по умолчанию сделать ограничение на один слот, а при помощи подфункции увеличивать при необходимости.
2) Еще есть идея реализовать закольцованность, чтобы при исчерпании всех слотов самый первый удалялся, а весь список смещался вверх.

Re: Общесистемный буфер обмена

Posted: Thu Nov 14, 2013 5:52 pm
by IgorA
Mario_r4 wrote:при желании количество слотов можно даже увеличить, но зачем?
Увеличивать не нужно. Просто возник вопрос о том, что память буфера каждый раз при копировании увеличивается и будет ли тормозить вся система при забивании буфера "на максимум".
Mario_r4 wrote:2) Еще есть идея реализовать закольцованность, чтобы при исчерпании всех слотов самый первый удалялся, а весь список смещался вверх.
Думаю это лучший вариант.

Re: Общесистемный буфер обмена

Posted: Sun Dec 01, 2013 1:29 pm
by Mario_r4
IgorA wrote:Чего-то не сходится документация с примером, в clipboard_container.txt сказано:
2.1 Текст
Данные в третьем dword содержат тип:
0 = UTF
1 = 0866
А в примере clip_put.asm видим следущее:

Code: Select all

buffer_data:
	dd buffer_data.end - buffer_data
	dd 0	; type 'text'
	dd 866	; text encoding
	db 'Test message to the clipboard'
.end:
Видимо в примере вместо 866 нужно поставить 1.
Исправлено в SVN r.4317

Re: Общесистемный буфер обмена

Posted: Sun Dec 01, 2013 5:47 pm
by Mario_r4
Все еще стоит на повестке дня вопрос с символами перевода строки. Пока что я имею два наглядных варианта Tinypad использующий 0x0d 0x0a и T_edit использующий 0xd, в качестве символов перевода строки.

Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.

Есть какие то еще варианты перевода строк? И какой все же выбрать вариант для единообразия подхода?

Re: Общесистемный буфер обмена

Posted: Sun Dec 01, 2013 5:56 pm
by 0CodErr
Mario_r4, а зачем это нужно в буфере обмена? Какая ядру разница?
Mario_r4 wrote:Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.
Я думаю, надо делать надёжно.
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).