Утро. 7.30. Звонит будильник.
Программер медленно отрывает голову от подушки. Кидает будильник об стену и нервно шепчет:
- I'm is bypassing my startup files!
И опять засыпает.
Простая процедура копирования информации из DBGrid-а в Clipboard может
существенно облегчить жизнь при реализации требований экспорта выборок данных во
внешние приемники. Удобнее вызов "прицепить" к контекстному меню грида.
unit UnGridToClb;
interfaceuses
Windows, SysUtils, Classes, Dialogs,
Grids, DBGrids, Db, DBTables, ClipBrd;
procedure CopyGRDToClb(dbg: TDBGrid);
// Копирует DBGrid в буфер обмена,// после чего данные отлично переносятся// как в простой текстовый редактор, так и в Excellimplementationprocedure 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;
ifnot dbg.DataSource.DataSet.active thenbegin
ShowMessage('Нет выборки!!!');
Exit;
end;
try
dbg.Visible := False; //Делаем грид невидимым, чтобы не тратилось время//на его перерисовку при прокрутке DataSet - просто и//эффективно
bm := dbg.DataSource.DataSet.GetBookmark; // для того чтобы не// потерять текущую запись
dbg.DataSource.DataSet.First;
whilenot dbg.DataSource.DataSet.EOF dobegin
s2 := '';
for j := 0 to dbg.Columns.Count - 1 dobegin
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' dobegin
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 dobegin
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 в системный буфер обмена.
Как это работает:
Сначала создается строка s с заголовками столбцов, разделенными точкой с запятой (#9).
Затем проверяется, есть ли активный дата-сет в источнике данных grid'а. Если нет, отображается сообщение и процедура заканчивается.
Grid делается невидимым, чтобы предотвратить ненужное перерисовку при переборе дата-сета.
Получается маркер для текущей позиции в дата-сете с помощью GetBookmark.
Процедура затем перебирает дата-сет, добавляя каждый ряд к строке s2. Каждое значение столбца разделяется точкой с запятой (#9).
После обработки всех строк, текст буфера обмена устанавливается в результативную строку s.
Для обеспечения правильного форматирования клавиатуры (например, для неанглийских символов), временно изменяется формат клавиатуры на русский и обратно.
Наконец, grid делается видимым снова, и освобождается любая выделенная память.
Замечания:
Код предполагает, что TDBGrid имеет валидный источник данных с активным дата-сетом.
Используется GetBookmark, чтобы сохранить текущую позицию в дата-сете при делании grid невидимым.
Временное изменение форматирования клавиатуры может быть ненужно для большинства случаев, но включено в случае проблем с кодировкой символов.
Предложения:
Рассмотрите использование более надежного метода обработки ошибок и исключений.
Если вам не нужно поддерживать неанглийские символы, можно упростить код изменения форматирования клавиатуры.
Можете добавить некоторые логирующие или отладочные сообщения для помощи в поиске потенциальных проблем.
Копирование информации из DBGrid-а в Clipboard - простая процедура, которая существенно облегчает реализацию требований экспорта выборок данных во внешние приемники.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.