Работа с Clipboard

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2435
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 23 раза

Работа с Clipboard

Сообщение Губин Игорь »

Потребовалось обеспечить корректное занесение в Clipboard кириллицы на любых виндах с любой кодировкой

Вариант с переформатированием в RTF и отображением в окне оказался не самым удобным. Пришлось родить функцию. Она, конечно, недолизана и заточена под кириллицу, но помещает в буфер текст в кодировке Юникод. Далее всё всем и так понятно. Не пилите за оформление, лень долизовать, переводить в класс и т.п. (у себя я уже вставил куда надо и как надо)

Код: Выделить всё

  PROGRAM

    Include('svapi.inc'),once
                    MAP
    			StringToClipBoard(String)
                        module('CW_API')
                            memcpy(long,long,long),raw,name('_memcpy')
			End
        Include('svapifnc.inc'),ONCE
    END

TestString          String(1024)

  CODE

    TestString = 'Проверка Clipboard с юникодом'
    StringToClipboard(TestString)
        
StringToClipBoard  Procedure(InpString) 

UnicodeText                             String(2*Size(InpString)+2)
L                                       Long
I                                       Long

loc:RetrievedHandle Long

    CODE

        IF OpenClipboard(0{PROP:AppInstance}) Then
        
            I = Len(Clip(InpString))
            L = Size(UnicodeText)
            Clear(UnicodeText,0)
            If MultiByteToWideChar(1251,0,Address(InpString),I,Address(UnicodeText),L).
            UnicodeText[ L-1 : L] = '<0><0>'

            IF EmptyClipboard()
                loc:RetrievedHandle = GlobalAlloc(GMEM_DDESHARE,L)
                memcpy(GlobalLock(loc:RetrievedHandle),address(UnicodeText),L)
                x# = GlobalUnlock(loc:RetrievedHandle)
                x# = SetClipboardData(CF_UNICODETEXT,loc:RetrievedHandle) THEN
                x# = GlobalFree(loc:RetrievedHandle)
        	CloseClipboard()
    	  END
Это я только кажусь дураком! На самом деле я полный идиот!
Ответить