Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

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

Delphi , Компоненты и Классы , TDBGrid

Копирование информации из 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.

Привет! Вот перевод текста на русский язык:

Цель: Копирует данные из TDBGrid в системный буфер обмена.

Как это работает:

  1. Сначала создается строка s с заголовками столбцов, разделенными точкой с запятой (#9).
  2. Затем проверяется, есть ли активный дата-сет в источнике данных grid'а. Если нет, отображается сообщение и процедура заканчивается.
  3. Grid делается невидимым, чтобы предотвратить ненужное перерисовку при переборе дата-сета.
  4. Получается маркер для текущей позиции в дата-сете с помощью GetBookmark.
  5. Процедура затем перебирает дата-сет, добавляя каждый ряд к строке s2. Каждое значение столбца разделяется точкой с запятой (#9).
  6. После обработки всех строк, текст буфера обмена устанавливается в результативную строку s.
  7. Для обеспечения правильного форматирования клавиатуры (например, для неанглийских символов), временно изменяется формат клавиатуры на русский и обратно.
  8. Наконец, grid делается видимым снова, и освобождается любая выделенная память.

Замечания:

  • Код предполагает, что TDBGrid имеет валидный источник данных с активным дата-сетом.
  • Используется GetBookmark, чтобы сохранить текущую позицию в дата-сете при делании grid невидимым.
  • Временное изменение форматирования клавиатуры может быть ненужно для большинства случаев, но включено в случае проблем с кодировкой символов.

Предложения:

  • Рассмотрите использование более надежного метода обработки ошибок и исключений.
  • Если вам не нужно поддерживать неанглийские символы, можно упростить код изменения форматирования клавиатуры.
  • Можете добавить некоторые логирующие или отладочные сообщения для помощи в поиске потенциальных проблем.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TDBGrid ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 07:17:06/0.0036618709564209/0