Главная » TDBGrid -– копирование в буфер обмена
Простая процедура копирования информации из dbgrid в clipboard может существенно облегчить жизнь при реализации требований экспорта выборок данных во внешние приемники:

unit ungridtoclb;

interface

uses
windows, sysutils, classes, dialogs, grids, dbgrids, db, dbtables, clipbrd;

procedure copygrdtoclb(dbg :tdbgrid);
// Копирует dbgrid в буфер обмена, после чего данные отлично переносятся
// как в простой текстовый редактор, так и в excel

implementation

procedure copygrdtoclb(dbg: tdbgrid);
var
bm: tbookmark;
pch, pch1: pchar;
s, s2: string;
i, j: integer;
begin
s := '';
for j := 0 to dbg.columns.count - 1 do
s := s + dbg.columns.items[j].title.caption +#9 ;
s := s + #13 + #10;
if not dbg.datasource.dataset.active then begin
showmessage('Нет выборки!!!');
exit;
end;
try
dbg.visible := false; // Делаем сетку невидимой, чтобы не уходило время
// на ее перерисовку при прокрутке dataset
bm := dbg.datasource.dataset.getbookmark; // чтобы не потерять текущую запись
dbg.datasource.dataset.first;
while not dbg.datasource.dataset.eof do begin
s2 := '';
for j := 0 to dbg.columns.count - 1 do begin
s2 := s2 + dbg.columns.items[j].field.asstring + #9;
end;
s := s + s2 + #13 + #10;
dbg.datasource.dataset.next;
end;
// Переключаем клавиатуру "в русский режим", иначе - проблемы с кодировкой
getmem(pch, 100);
getmem(pch1, 100);
getkeyboardlayoutname(pch);
strcopy(pch1, pch);
while pch <> '00000419' do begin
activatekeyboardlayout(hkl_next, 0);
getkeyboardlayoutname(pch);
if strcomp(pch, pch1) = 0 then
// Круг замкнулся - нет такого языка '00000419'
strcopy(pch, '00000419');
end;
clipboard.astext := s; // Данные - в буфер!!!
while strcomp(pch, pch1) <> 0 do begin // Возвращаем режим клавиатуры
activatekeyboardlayout(hkl_next, 0);
getkeyboardlayoutname(pch);
end;
freemem(pch);
freemem(pch1);
dbg.datasource.dataset.gotobookmark(bm);
// showmessage('Данные успешно скопированы в буфер обмена.');
finally
dbg.visible := true;
end;
end;

end. Категория: Языки программирования | Просмотров: 211