|
Тема
|
Copy&Paste...
|
|
Автор |
NickBass (бас-програмист) |
Публикувано | 04.07.06 18:13 |
|
Здравейте,
Досега не ми беше правил впечатление този проблем, но ето че се сблъсках с него. При copy и paste на текст от каква да е текстова контрола в Нотпада например кирилицата се пейства като хората, само ако в лонгуич бара съм превключил на BG. Адски досадно е... Някой може ли да помогне с това как може да се заобиколи този проблем? Видях че TClipboard класа си вика API функциите съвсем коректно, така че предполагам причината не е в него, а в Win-a.
Heeeeeelp!
| |
Тема
|
Re: Copy&Paste...
[re: NickBass]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 05.07.06 09:27 |
|
Имаше преди години тука някой, който се ровеше в този проблем. Виж дали няма да го изровиш от архива.
Но решението май е в API-то.
Вж. GetClipboardData и SetClipboardData
The GetClipboardData function retrieves data from the clipboard in a specified format. The clipboard must have been opened previously.
HANDLE GetClipboardData(
UINT uFormat // clipboard format
);
Parameters
uFormat
Specifies a clipboard format. For a description of the clipboard formats, see the SetClipboardData function.
========================
HANDLE SetClipboardData(
UINT uFormat, // clipboard format
HANDLE hMem // data handle
);
..........
Remarks
The uFormat parameter can identify a registered clipboard format, or it can be one of the following values:
Value Meaning
.......................
CF_LOCALE The data is a handle to the locale identifier associated with text in the clipboard. When you close the clipboard, if it contains CF_TEXT data but no CF_LOCALE data, the system automatically sets the CF_LOCALE format to the current input locale. You can use the CF_LOCALE format to associate a different locale with the clipboard text.An application that pastes text from the clipboard can retrieve this format to determine which character set was used to generate the text.Note that the clipboard does not support plain text in multiple character sets. To achieve this, use a fomatted text data type such as RTF instead.Windows NT: The system uses the code page associated with CF_LOCALE to implicitly convert from CF_TEXT to CF_UNICODETEXT. Therefore, the correct code page table is used for the conversion.
......
Редактирано от NDeu на 05.07.06 09:38.
| |
Тема
|
Re: Copy&Paste...
[re: NDeu]
|
|
Автор |
NickBass (бас-програмист) |
Публикувано | 05.07.06 15:09 |
|
Благодаря ти NDeu! То се вижда, че ще се бърника TClipboard класа... Нема лабаво! Странното е, обаче че една друга програмка писана на D7 няма този проблем! А сега де! Открийте 10-те разлики. Обърнах сорса с краката нагоре и ... нищо по-различно.
| |
Тема
|
Re: Copy&Paste...
[re: NickBass]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 06.07.06 09:08 |
|
Ако не ти се бърника в класа, пробвай това:
procedure PutStringIntoClipboard(const Value: string;LocaleID: longint);
var Size: Integer;
Data: THandle;
DataPtr: Pointer;
begin
if Length(Value) = 0 then exit;
Clipboard.Open;
try
Clipboard.AsText:= Value;
Size:= 4;
Data:= GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
Move(LocaleID, DataPtr^, Size);
Clipboard.SetAsHandle(CF_LOCALE, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
Clipboard.Close;
end;
end;
| |
Тема
|
Re: Copy&Paste...
[re: NDeu]
|
|
Автор |
NickBass (бас-програмист) |
Публикувано | 06.07.06 17:58 |
|
Още един път благодаря! Функцийката работи перфекто.
Заформям един юнит, който като се закачи към приложението, прихваща събитията от клипборда и оправя бакиите. Ако искаш мога да ти го пратя като е готов (остави мейл). Ама няма да е днес-утре, че ме нападнаха пък други задачи.
| |
|
|
|
|