Проблема с кодировкой при копировании из Memo

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Проблема следующая: когда я копирую в буфер кириллические символы из Memo, а потом вставляю их в Блокнот или Word, получаю на выходе крокозяблы. Установка в Font-> Charset дефолтного, русского или ANSI не помогает. Кто знает, чем это лечится?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

не помню с чем связанно в общем кодировку клавиатуры переключать нужно при копировании..
Вот тебе пример:

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

[size=84]function SetClipboardText(Wnd: HWND; Value: string): Boolean;
var
  Layout: array[0.. KL_NAMELENGTH] of Char;
  hData: HGlobal;
  pData: pointer;
  Len: integer;
  flag: Boolean;
begin
  flag := False;
  if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
  begin //раскладка английская
    LoadKeyboardLayout( StrCopy(Layout, '00000419'), KLF_ACTIVATE);  //На русский
    flag := True;
  end;
  //раскладка НЕанглийская, например 68748313 соответствует русской
  Result := True;
  if OpenClipboard(Wnd) then
  begin
    try
      Len := Length(Value) + 1;
      hData := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Len);
      try
        pData := GlobalLock(hData);
        try
          Move(PChar(Value)^, pData^, Len);
          EmptyClipboard;
          SetClipboardData(CF_Text, hData);
        finally
          GlobalUnlock(hData);
        end;
      except
        GlobalFree(hData);
        raise
      end;
    finally
      CloseClipboard;
    end;
  end
  else
    Result := False;
  if flag then   LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE);  //На английский
end;

[/size]
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Спасибо! Учитывая, что мне той программой приходится пользоваться не так уж часто - хватит простого перевода клавы на русскую раскладку.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить