Как скопировать выбранные в DBGrid записи в клипборд
Автор: Тенцер А.Л.
const
FIELD_DELIMITER = #9;
RECORD_DELIMITER = #10;
procedure CopyDBGridToClipboard( Grid : TDBGrid );
var
BM : String;
S : String;
S1: String;
I : Integer;
beginwith Grid dobeginif Assigned( DataSource ) and
Assigned( DataSource.DataSet ) and
DataSource.DataSet.Active thenwith DataSource.DataSet dobegin
S := '';
DisableControls;
BM := BookMark;
for I := 0 to Pred( Columns.Count ) dobeginif Assigned(Columns.Items[I].Field) then
S := S + Columns.Items[I].Title.Caption + FIELD_DELIMITER;
end;
S[ Length( S ) ] := RECORD_DELIMITER;
First;
whilenot Eof dobegin
S1 := '';
for I := 0 to Pred( Columns.Count ) dobeginif Assigned(Columns.Items[I].Field) then
S1 := S1 + FieldByName( Columns[I].FieldName ).AsString +
FIELD_DELIMITER;
end;
S1[ Length( S1 ) ] := RECORD_DELIMITER;
S := S + S1;
Next;
end;
BookMark := BM;
EnableControls;
// Clipboard.SetTextBuf( PChar( S ) );
SendToClipboard( S );
end;
end;
end;
Программный процессор CopyDBGridToClipboard - это процедура Delphi, которая копирует выбранные записи из объекта TDBGrid в системную буфер обмена. Вот шаг за шагом, как она работает:
Процедура принимает объект TDBGrid в качестве параметра, который представляет собой таблицу, содержащую данные для копирования.
Она проверяет, имеет ли grid валидный источник данных, dataset и активную запись. Если любое из этих условий не выполнено, процедура ничего не делает.
Она отключает управляющие элементы в таблице, чтобы предотвратить любые пользовательские интеракции во время процесса копирования.
Она устанавливает маркер для текущей позиции в dataset, который используется позднее для восстановления оригинальной позиции после копирования.
Она проходит по каждому столбцу в таблице и добавляет заголовок столбца и разделитель полей (#9) в строковую переменную S.
Затем она проходит по каждой записи в dataset и добавляет значения каждого поля в записи, разделенные разделителем полей (#9), к тому же строковому переменному S.
После копирования всех записей она восстанавливает оригинальный маркер позиции в dataset и снова включает управляющие элементы таблицы.
Наконец, она использует процедуру SendToClipboard (не показанную в этом кодовом фрагменте) для копирования содержимого S в системную буфер обмена.
Комментарий // Clipboard.SetTextBuf( PChar( S )); гласит, что альтернативное реализация может использовать метод SetTextBuf объекта TClipboard вместо этого, но автор chose не использовать этот подход по какой-то причине.
В целом, эта процедура обеспечивает удобный способ копирования выбранных записей из объекта TDBGrid в системную буфер обмена.
В статье рассматривается процедура копирования выбранных записей в DBGrid в клипборд, которая использует поля и рекорды для форматирования строки и отправки ее в буфер обмена.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.