Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.47 MB
Время: 0.02 c
14-43751
Dimka Maslov
2004-02-19 14:11
2004.03.14
Оказывается это не больно


1-43448
Clift
2004-02-29 23:56
2004.03.14
Bitmap в Menu


3-43363
AZ
2004-02-12 16:02
2004.03.14
Доступ к защищенной БД


4-43966
CC
2004-01-05 12:36
2004.03.14
иконки из exe - файла


14-43851
Undert
2004-02-19 18:58
2004.03.14
Как в HTML сделать SpinEdit ?