Указване на кодирането на текста в клипборда

Има добре познат бъг - ако копирате български ANSI текст от едно приложение в клипборда и го поставите в друго (например копирате български текст от TEdit и го поставите в полето за въвеждане на WWW страница в Internet Explorer), тогава българските символи се превръщат в кракозябри. Ако копирате, докато българското оформление е включено, значи всичко е наред. И ако е включен английски - проблем :(

Проблемът е, че Windows не може да разпознае езика, на който се съхранява текстът (взема го за езика на текущото оформление). И, очевидно, когато се вмъкне в контролите на Unicode, възниква изкривяване. Решението на проблема, очевидно, е директно указание на кой език е текстът в клипборда.

Има решение: http://forum.sources.ru/index.php?showtopic=93641 Ама е криво, при мен не става. има това:

процедура CopyStringToClipboard(const s: низ); var Locale: word; begin //Set CF_TEXT & CF_LOCALE CopyDataToClipboard(CF_TEXT, s); Локал := GetSystemDefaultLang > CopyDataToClipboard(CF_LOCALE, Chr(Lo(Locale))+Chr(Hi(Locale))); край;

процедура CopyDataToClipboard(fmt: дума; s: низ); var hg: THandle; P: PChar; започнете hg:=GlobalAlloc(GMEM_DDESHARE или GMEM_MOVEABLE, Length(S)+1); P:=GlobalLock(hg); StrPCopy(P, s); GlobalUnlock(hg); Clipboard.Open; SetClipboardData(fmt, hg); // fmt = CF_UNICODETEXT CF_OEMTEXT CF_TEXT CF_LOCALE Clipboard.Close; GlobalFree(hg); край;

Когато извикам SetClipboardData, се оказва, че "Неправилен указател". Но Jack128 твърди, че всичко с него е наред. Не знам защо :( Сложих първо реда Clipboard.Open:

процедура CopyDataToClipboard(fmt: дума; s: низ); var hg: THandle; P: PChar; започнете Clipboard.Open; //

Изглежда работи, всичко е наред. Но после се оказа, че всичко е наред само при първото копиране. Ако тази част от кода се използва за копиране на втория ред, тогава нищо не се копира. Изобщо нищо :( Това, което е в клипборда, остава. Освен това SetClipboardData работи добре, връща различно от нула. Не разбирам нищо :(

Съответно, ние търсим стабилен, нормален, доказан през годините начин за настройка на кодирането на текста в клипборда.

Опитайте http://www.delphimaster.net/view/1-1139210575/ (публикация [7]).

да, благодаря ти - това е.

Но все пак е интересно - но как да посочите конкретен език. Горният метод, както разбирам, просто кодира съдържанието на буфера в UNICODE в съответствие с настройките за локал. И ако локалът е английски, тогава как да посочим, че текстът в буфера е български? Да се ​​използва само UNICODE?