powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как скопировать из TDBGrid выделенные записи в буфер обмена?
8 сообщений из 8, страница 1 из 1
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32636340
Фотография Serega128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. стоя на одной (или нескольких) строках в DBGrid, и при нажатии Ctrl+C как их скопировать в буфер? Чтобы потом можно было их вставить по Ctrl+V в Excel (или куда-то ещё)? Спасибо.
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32636360
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если toExcel = false, то экспортируем содержимое dbgrid в Clipboard
// если toExcel = true, то экспортируем содержимое dbgrid в Microsoft Excel
procedure ExportDBGrid(toExcel: Boolean);
var
bm: TBookmark;
col, row: Integer;
sline: String;
mem: TMemo;
ExcelApp: Variant;
begin
Screen.Cursor := crHourglass;
DBGrid1.DataSource.DataSet.DisableControls;
bm := DBGrid1.DataSource.DataSet.GetBookmark;
DBGrid1.DataSource.DataSet.First;

// создаём объект Excel
if toExcel then
begin
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Grid Data';
end;

// Сперва отправляем данные в memo
// работает быстрее, чем отправлять их напрямую в Excel
mem := TMemo.Create(Self);
mem.Visible := false;
mem.Parent := MainForm;
mem.Clear;
sline := '';

// добавляем информацию для имён колонок
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].DisplayLabel + #9;
mem.Lines.Add(sline);

// получаем данные из memo
for row := 0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
sline := '';
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].AsString + #9;
mem.Lines.Add(sline);
DBGrid1.DataSource.DataSet.Next;
end;

// копируем данные в clipboard
mem.SelectAll;
mem.CopyToClipboard;

// если необходимо, то отправляем их в Excel
// если нет, то они уже в буфере обмена
if toExcel then
begin
ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
ExcelApp.Visible := true;
end;

FreeAndNil(ExcelApp);
DBGrid1.DataSource.DataSet.GotoBookmark(bm);
DBGrid1.DataSource.DataSet.FreeBookmark(bm);
DBGrid1.DataSource.DataSet.EnableControls;
Screen.Cursor := crDefault;
end;
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32636365
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть но только на делфи ,
и если не составит труда перевести то ...

http://www.gyry.net/?d=programming&did=378



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32636623
Фотография Serega128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он вставляет в DOS кодировке.
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32636692
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой именно пример ?


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32636703
Фотография Serega128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AnsiString s;
AnsiString CurrPos = DBG->DataSource->DataSet->Bookmark;
for(int j = 0; j < DBG->Columns->Count; j++)
s += DBG->Columns->Items[j]->Title->Caption + "\t";
s += "\r\n \r\n";
for(int i=0; i<DBG->SelectedRows->Count; i++)
{
DBG->DataSource->DataSet->GotoBookmark((void *)DBG->SelectedRows->Items .c_str());
for(int j = 0; j < DBG->Columns->Count; j++)
s += DBG->DataSource->DataSet->Fields->FieldByName(DBG->Columns->Items[j]->FieldName)->Text + " \t ";
s += " \r\n";
}
DBG->DataSource->DataSet->GotoBookmark((void*) CurrPos.c_str());
// Clipboard()->AsText = OemToAnsi(s.c_str()); // SetTextBuf(s.c_str());
char *c;
OemToChar(s.c_str(), c);
Clipboard()->SetTextBuf(c);
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32637002
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том примере который я дал
было
Код: plaintext
1.
// Переключаем клавиатуру "в русский режим", иначе - проблемы с кодировкой
попробуй его ...


 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Как скопировать из TDBGrid выделенные записи в буфер обмена?
    #32638684
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маленькое уточнение, насколько я помню с вин2000 когда копируешь
данные в клипбоард они автоматом переконвертируются под юникод
версия Clipboard ()->AsText и подобные этого не учитывает так что я всегда пишу собственную версию функции копирования и не забиваю себе голову всякими раскладками и т.д.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  AnsiString aw = Ins->GetValue ();
  if (aw.IsEmpty ())
   aw = " ";
  WideString w = aw;
  OpenClipboard( 0 );
  void* hMemHandle;
  void* lpData;
  hMemHandle = GlobalAlloc( 0 , w.Length ()* 2  +  2 );
  if (! hMemHandle) return true;
  lpData = GlobalLock(hMemHandle);
  if (! lpData) return true;
  if ( ! CopyMemory (lpData, (wchar_t*)w, w.Length ()* 2   +  2 ) )
   return true;
  GlobalUnlock (hMemHandle);
  EmptyClipboard ();
  SetClipboardData (CF_UNICODETEXT, hMemHandle);
  CloseClipboard ();
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как скопировать из TDBGrid выделенные записи в буфер обмена?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]