Текущий архив: 2004.03.14;
Скачать: CL | DM;
ВнизГлюк при копированиии данных StringGrid в Excel? Найти похожие ветки
← →
JIruaasgyy (2004-03-03 23:12) [0]Глюк заключается в следующим.Берем форму.На неепомещаем StringGrid и 2 кнопки (Button1,Button2).В Uses записываем clipbrd - для копирования через буфер обмена.
В options StringGrid-а ставим goEditing на true чтобы можно было писать текст, и шрифт на Arial кириллица.И записываем следующий код в кнопки:
procedure TForm1.Button1Click(Sender: TObject);
Var
i,j:Integer;
sStr:String;
begin
sStr:="";
{}
sstr:=Caption;
sstr:=sstr+Chr(13);
For i:=0 to StringGrid1.RowCount-1 do Begin
If i<>0 then sstr:=sstr+Chr(13);
For j:=0 to StringGrid1.ColCount -1 do Begin
sstr:=sstr+StringGrid1.cells[j,i];
If j<>StringGrid1.ColCount -1 then sstr:=sstr+Chr(9);
End;
End;
Clipboard.Clear;
Clipboard.AsText:=sstr;
End;
procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid1.Cells[0,0]:="Привет";
end;
Первая заносит данные в буфер, вторая добавляет в фиксированную ячейку слово привет.
Теперь смысл глюка!!!!!Делаем сначала пункт а) затем перегружает прогу и делаем пункт б)
а) Нажимаем Button2 (добавляется слово Привет) затем Button1 (копируется в буфер).Заходим в Excel и нажимаем Вставить.У меня вместо русского названия абракадабра.
б)Сначала вводим русские буквы в любую нефиксированную ячейку.Затем нажимаем Button2 после чего Button1.Заходим в Excel и нажимаем Вставить.НОРМАЛЬНЫЙ РУССКИЙ ШРИФТ!!!
В чем дело? Может у вас не так, но у меня так.Что делать!!!!!
← →
ЮЮ (2004-03-04 05:34) [1]> б)Сначала вводим русские буквы...
Сначала ты переключился на русскую клавиатуру, а это необходимое и достаточное условие для всего остального
← →
Alex Konshin (2004-03-04 09:24) [2]Нужно при помещении в клипбоард устанавливать codepage или копировать в клипбоард в UNICODE. Причем в W95+ и NT+ нужно действовать по-разному.
procedure SetClipboardText( const AText : String );
var len, ulen : Integer;
hClip : THandle;
pClip : Pointer;
begin
if Win32Platform=VER_PLATFORM_WIN32_NT then
begin
len := Length(AText)+1;
ulen := len+len;
hClip := GlobalAlloc(GMEM_MOVEABLE,ulen);
if hClip=0 then raise Exception.Create(SysErrorMessage(GetLastError))
else
try
pClip := PWideChar(GlobalLock(hClip));
if pClip=nil then raise Exception.Create(SysErrorMessage(GetLastError))
else
begin
try
MultiByteToWideChar(CODEPAGE,0,PChar(AText),len,pClip,ulen);
finally
GlobalUnlock(hClip);
end;
Clipboard.SetAsHandle(CF_UNICODETEXT,hClip);
end;
except
GlobalFree(hClip);
raise;
end;
end
else
begin
Clipboard.SetTextBuf(PChar(AText));
SetClipboardData(CF_LOCALE,LANG_RUSSIAN);
end;
end;
← →
Alex Konshin (2004-03-04 09:28) [3]Да, естественно, это забыл:
const
CODEPAGE = 1251;
← →
Palladin (2004-03-04 09:31) [4]Пользуйтесь DDE. Быстрее и никаких проблем с кодировкой.
Страницы: 1 вся ветка
Текущий архив: 2004.03.14;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.011 c