PDA

Просмотр полной версии : [Помогите!] с буфером


Name-3
03.08.2011, 21:18
здравствуйте! я хочу написать программу для копирования текста, всё копируется, но копируются иероглифы, а нужно чтобы копировался русский текст
procedure TForm1.Button1Click(Sender: TObject);
begin
Clipboard.SetTextBuf(PChar('ВАШ_ТЕКСТ'));

end;

end.

вместо ВАШ_ТЕКСТ вставляются иероглифы... помогите сделать русский язык!

VeTaL_UA
03.08.2011, 22:55
Просто добавь в свой проект:
unit RusClipboard;

interface

uses Clipbrd;

type
TRusClipboard = class(TClipboard)
private
procedure SetCodePage(const CodePage: longint);
public
procedure Open; override;
procedure Close; override;
end;

implementation

uses Windows;

{ TRusClipboard }

procedure TRusClipboard.Close;
begin
SetCodePage($0419);
inherited;
end;

procedure TRusClipboard.Open;
begin
inherited;
SetCodePage($0419);
end;

procedure TRusClipboard.SetCodePage(const CodePage: longint);
var Data: THandle;
DataPtr: Pointer;
begin
// Назначить кодовую страницу для буфера обмена
Data:= GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, 4);
try
DataPtr := GlobalLock(Data);
try
Move(CodePage, DataPtr^, 4);
SetClipboardData(CF_LOCALE, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
end;
end;

var FClipboard: TClipboard;
OldClipboard: TClipboard;

initialization
// Установить клипборд
FClipboard:= TRusClipboard.Create;
OldClipboard:= SetClipboard(FClipboard);
if OldClipboard <> nil then
OldClipboard.Free;

end.

Name-3
05.08.2011, 07:51
а можно чуть покомпактней? я собираюсь сделать чтобы при нажатии на кнопку текст автоматически копировался в буфер, а этих кнопок у меня будет дофеневой фени...

*xalyava*
07.08.2011, 21:37
а можно чуть покомпактней? я собираюсь сделать чтобы при нажатии на кнопку текст автоматически копировался в буфер, а этих кнопок у меня будет дофеневой фени...

есть один метод, код занимает одну строку, но то, что я предлагаю, не очень разумно!

кинь на форму memo, предварительно поставь значение visible:= false;

пропиши все что тебе надо в memo и в кнопку вставь код:
Clipboard.SetTextBuf(PChar(memo1.Lines.Text));

итог:
когда скомпилируешь прогу, на форме не будет виден memo и при нажатии на кнопку содержимое невидимого memo (для простых смертных;)) скопируется в буфер

VeTaL_UA
07.08.2011, 22:18
*xalyava*, а зачем ставить невидимый Memo, когда можно создать переменную Memo:TStrings
и она будет выступать тем же самым Memo... Зачем использовать невидимый компонент? :D

*xalyava*
07.08.2011, 22:25
*xalyava*, а зачем ставить невидимый Memo, когда можно создать переменную Memo:TStrings
и она будет выступать тем же самым Memo... Зачем использовать невидимый компонент? :D


ммм.. не знал))

а как будет выглядеть код с этой переменной ?? можно посмотреть ?)

VeTaL_UA
07.08.2011, 22:31
а как будет выглядеть код с этой переменной ?? можно посмотреть ?)
var
Memo:TStrings;
begin
Memo.Create;
Memo.Add('Это вместо Memo');
Memo.SaveToFile('Memo.txt');
end;
Работа с TStrings такая же, как и с TStringList ;)