Копирование информации из DBGrid-а в Clipboard |
Previous Top Next |
Простая процедура копирования информации из DBGrid-а в Clipboard может существенно облегчить жизнь при реализации требований экспорта выборок данных во внешние приемники. Удобнее вызов "прицепить" к контекстному меню грида.
Code: |
unit UnGridToClb;
interface
uses Windows, SysUtils, Classes, Dialogs, Grids, DBGrids, Db, DBTables, ClipBrd;
procedure CopyGRDToClb(dbg: TDBGrid);
// Копирует DBGrid в буфер обмена, // после чего данные отлично переносятся // как в простой текстовый редактор, так и в Excell
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. |
©Drkb::03066
Взято с http://delphiworld.narod.ru