Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Курс видеоуроков КРЭКЕРСТВО + ПРОГРАММИРОВАНИЕ 2017
(актуальность: апрель 2017)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Копирование информации из DBGrid-а в Clipboard

Автор: Беличенко Б.

Утро. 7.30. Звонит будильник. Программер медленно отрывает голову от подушки. Кидает будильник об стену и нервно шепчет:
- I'm is bypassing my startup files!
И опять засыпает.

Простая процедура копирования информации из DBGrid-а в Clipboard может существенно облегчить жизнь при реализации требований экспорта выборок данных во внешние приемники. Удобнее вызов "прицепить" к контекстному меню грида.


 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.
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS