SVN r.4199 код Clipboard (ф.54) залит в исходники ядра. Описание в файлах sysfuncs.txt и sysfuncr.txt
Внимание! API изменился и предыдущие примеры выложенные в этой теме корректно работать не будут.
Общесистемный буфер обмена
-
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
SVN r.4200 примеры работы с буфером обмена.
Для совсем ленивых - качаете ночную сборку r.4199 или новее, а для примеров вот архив:
Для совсем ленивых - качаете ночную сборку r.4199 или новее, а для примеров вот архив:
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Чего-то не сходится документация с примером, в clipboard_container.txt сказано:
Видимо в примере вместо 866 нужно поставить 1.
А в примере clip_put.asm видим следущее:2.1 Текст
Данные в третьем dword содержат тип:
0 = UTF
1 = 0866
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:IgorA
Да, ты прав - меня кажется переглючило, т.к. писал код ночью.
Да, ты прав - меня кажется переглючило, т.к. писал код ночью.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
В связи с ревизией 4228 возник вопрос, есть ли в буфере обмена ограничение на число слотов хранимых в нем? Потому что я могу копировать в буфер текст, а очистка буфера не происходит сама по себе, разве что только с тестовым примером могу чистить.
1023 или 1024, я точно не проверял. В принципе ограничение только выделенной странице памяти и при желании количество слотов можно даже увеличить, но зачем?
1) У меня была идея по умолчанию сделать ограничение на один слот, а при помощи подфункции увеличивать при необходимости.
2) Еще есть идея реализовать закольцованность, чтобы при исчерпании всех слотов самый первый удалялся, а весь список смещался вверх.
1) У меня была идея по умолчанию сделать ограничение на один слот, а при помощи подфункции увеличивать при необходимости.
2) Еще есть идея реализовать закольцованность, чтобы при исчерпании всех слотов самый первый удалялся, а весь список смещался вверх.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Увеличивать не нужно. Просто возник вопрос о том, что память буфера каждый раз при копировании увеличивается и будет ли тормозить вся система при забивании буфера "на максимум".Mario_r4 wrote:при желании количество слотов можно даже увеличить, но зачем?
Думаю это лучший вариант.Mario_r4 wrote:2) Еще есть идея реализовать закольцованность, чтобы при исчерпании всех слотов самый первый удалялся, а весь список смещался вверх.
Исправлено в SVN r.4317IgorA wrote:Чего-то не сходится документация с примером, в clipboard_container.txt сказано:А в примере clip_put.asm видим следущее:2.1 Текст
Данные в третьем dword содержат тип:
0 = UTF
1 = 0866Видимо в примере вместо 866 нужно поставить 1.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:
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Все еще стоит на повестке дня вопрос с символами перевода строки. Пока что я имею два наглядных варианта Tinypad использующий 0x0d 0x0a и T_edit использующий 0xd, в качестве символов перевода строки.
Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.
Есть какие то еще варианты перевода строк? И какой все же выбрать вариант для единообразия подхода?
Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.
Есть какие то еще варианты перевода строк? И какой все же выбрать вариант для единообразия подхода?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Mario_r4, а зачем это нужно в буфере обмена? Какая ядру разница?
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).
Я думаю, надо делать надёжно.Mario_r4 wrote:Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).
Ядру разницы нет, но есть разница приложениям. Внутри себя они могут использовать все что душе программиста угодно, но вот в буфер засылать все что угодно - это создавать лишние проблемы. Так что лучше определиться со стандартом заранее, чтобы не было неожиданных сюрпризов.0CodErr wrote:а зачем это нужно в буфере обмена? Какая ядру разница?
Лишний геморрой с дополнительными данными. Лучше уж единообразие для всех без исключения.0CodErr wrote:Я думаю, надо делать надёжно.
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).
З.Ы. Также если сделать требование следовать одному стандарту, не придется писать лишний код, учитывающий все возможные варианты.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Mario_r4, тогда есть вероятность, что придётся перед копированием в буфер обмена преобразовывать в единственно верный формат. Потому что файлы с различными EOL уже и так существуют, хотим мы этого или нет.
Да, но не нужно тащить этот же бардак в реализацию буфера обмена. И придется преобразовывать только отличающиеся форматы. В Tinypad придется в любом случае преобразовывать, по причине собственного формата хранения во внутреннем буфере приложения. Я вообще склоняюсь к мысли остановиться на символе 0x0d (код 13) это все же даст некоторую экономию памяти, по сравнению с 0x0d 0x0a ну больших кусках текста.0CodErr wrote:Mario_r4, тогда есть вероятность, что придётся перед копированием в буфер обмена преобразовывать в единственно верный формат. Потому что файлы с различными EOL уже и так существуют, хотим мы этого или нет.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Text with only CR is nonsense.0CodErr wrote:Mario_r4, а зачем это нужно в буфере обмена? Какая ядру разница?Я думаю, надо делать надёжно.Mario_r4 wrote:Статья на википедии утверждает, что для надежности нужно использовать 0x0d 0x0a.
Или, как вариант, указывать тип содержимого(что-то вроде TEXT_CR, TEXT_LF, TEXT_CR_LF).
To me it seems very simple, when writing text, use CR LF (for compatibility)
When reading text, parse only LF and ignore CR.
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein
Why? After all, to any program we add support for clipboard from scratch. There is no established standard already. However, if we use 1 byte instead of 2 bytes, then a large amount of text, we can get savings of memory.hidnplayr wrote:To me it seems very simple, when writing text, use CR LF (for compatibility)
When reading text, parse only LF and ignore CR.
On the other hand, if the use of 2 byte code will simplify working with the clipboard, we can leave 2 bytes . I'm still thinking.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Who is online
Users browsing this forum: No registered users and 5 guests