Архив исходников программ, модулей и компонентов на Delphi


Начальная страница

Поиск по базе



Операционная система
Настройка приложения
Взаимодействия приложений
Файлы и директории
Строки и символы
Математика
Базы данных
Интернет и сеть
Мультимедиа
Аппаратная часть
VCL
Другие разделы [0]
 

Количество записей в базе - 537
Сегодня добавлено – 0

Взаимодействие с ОС



Вернуться к списку функций
 Поместить/получить строку из буфера обмена (Заплатка к стандартным)

 Прислал: Shaman_Naydak ( 26 июня 2002 г. )
©  Shaman_Naydak
 Описание:
Под Win2k попытка вставить русскую строку в Clipboard ClipBoard.AsText:='Проба' с последующей вставкой в Word'е показывает кракозябрики..
Расследование показало, что виноваты мелкомягкие (как обычно :) )
С целью нивелирования различий между всеми Win-платформами были написаны эти 2 ф-ции..
Принимают на вход/возвращают строку в Unicode - WideString.. но не надо беспокоиться, Дельфи сам вставит при необходимости конвертацию в/из AnsiString.

Если платформа поддерживает уникод (NT), то используется этот формат, иначе вызываются стандартные процедуры/ф-ции.
Удачи!

 Зависимости:
ClipBrd

 Ограничения:
Проверено Win2k, Win98 в D5

 Исходный текст:
{ **** UBPFD *********** by http://kladovka.net.ru/delphibase/ ****
>> Поместить/получить строку из буфера обмена (Заплатка к стандартным)

Под Win2k попытка вставить русскую строку в Clipboard ClipBoard.AsText:='Проба' с последующей вставкой в Word'е показывает кракозябрики..
Расследование показало, что виноваты мелкомягкие (как обычно :) )
С целью нивелирования различий между всеми Win-платформами были написаны эти 2 ф-ции..
Принимают на вход/возвращают строку в Unicode - WideString.. но не надо беспокоиться, Дельфи сам вставит при необходимости конвертацию в/из AnsiString.

Если платформа поддерживает уникод (NT), то используется этот формат, иначе вызываются стандартные процедуры/ф-ции.
Удачи!

Зависимости: ClipBrd
Автор:       Shaman_Naydak, shanturov@pisem.net
Copyright:   Shaman_Naydak
Дата:        26 июня 2002 г.
***************************************************************** }

procedure PutStringIntoClipBoard(const Str: WideString);
var
  Size: Integer;
  Data: THandle;
  DataPtr: Pointer;
begin
  Size:=Length(Str);
  if Size = 0 then exit;
  if not IsClipboardFormatAvailable(CF_UNICODETEXT) then
    Clipboard.AsText:=Str
  else
  begin
    Size:=Size shl 1 + 2;
    Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, Size);
    try
      DataPtr := GlobalLock(Data);
      try
        Move(Pointer(Str)^, DataPtr^, Size);
        Clipboard.SetAsHandle(CF_UNICODETEXT, Data);
      finally
        GlobalUnlock(Data);
      end;
    except
      GlobalFree(Data);
      raise;
    end;
  end;
end;

function GetStringFromClipboard: WideString;
var
  Data: THandle;
begin
  if not IsClipboardFormatAvailable(CF_UNICODETEXT) then
    Result:=Clipboard.AsText
  else
  begin
    Clipboard.Open;
    Data := GetClipboardData(CF_UNICODETEXT);
    try
      if Data <> 0 then
        Result := PWideChar(GlobalLock(Data))
      else
        Result := '';
    finally
      if Data <> 0 then GlobalUnlock(Data);
      Clipboard.Close;
    end;
  end;
end;


Вернуться к списку функций

Наверх ▲