Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Fri May 23, 2025 20:34    Post subject: Reply with quote

Вот же, а... Случайно отредактировал предыдущий пост, вместо отправки нового.

Loopback, там было про проблему с функцией ClipGet, которая режет текст из буфера. Используя DllCall удалось обойти это ограничение:
Code:
Local hCB, pMem, obg, CF_UNICODETEXT = 13   
If DllCall("OpenClipboard", "handle", 0) Then
   hCB = DllCall("GetClipboardData", "uint", CF_UNICODETEXT, "handle")
   pMem = DllCall("GlobalLock", "handle", hCB, "ptr")
   obj = Buffer(1024*500, pMem)
   txt = obj.GetStr()
   Free(obj)
   DllCall("GlobalUnlock ", "handle", hCB)
   DllCall("CloseClipboard")
Else
   MsgBox("Clipboard Error" )
EndIf

Но в приведенном коде используется другое ограничение буфера размером в 500 Кб. Правильно я понимаю, что это просто "окно" для чтения из памяти, на самом деле память в таких случаях не выделяется? А как вообще правильно сделать, ведь объем текстовых данных в буфере может быть ещё больше?

Короче, вдохновившись новым лозунгом Autorun "Пока Гислер думает, Autorun делает", соорудил небольшую функцию:
 Hidden text

 Hidden text

Функция еще сырая и абсолютно тестовая, но, кажется, делает то, что от неё требуется. Запуск с CTRL удобен на небольших списках, когда выделенных позиций меньше 100 или где-то около 100, тогда данные обновляются в подсказке в реальном времени. Но чем больше выделено, тем больше тормозов, поэтому на больших списках лучше пользоваться одиночным кликом, так надежнее. Но надо будет с этим что-то придумать.

Добавлено спустя 6 минут:

Ну, что-то у меня совсем не заладилось )
Quote:
по-хорошему этот размер надо получать c помощью GlobalSize.

Не знаю, успею ли глянуть. А можно пример? Вопрос тот же: ак вообще правильно сделать, ведь объем текстовых данных в буфере может быть ещё больше?

Кстати, были кое-какие проблемы с объектом List. Пока не инициализировал принудительно:
Code:
    aSel.Count = 0
    aCol.Count = 0
    aVal.Count = 0
    aRow.Count = 0         

Были какие-то глюки и непонятные результаты.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group