здравствуйте! я хочу написать программу для копирования текста, всё копируется, но копируются иероглифы, а нужно чтобы копировался русский текст
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 ;)