|
|
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Т.е. стоя на одной (или нескольких) строках в DBGrid, и при нажатии Ctrl+C как их скопировать в буфер? Чтобы потом можно было их вставить по Ctrl+V в Excel (или куда-то ещё)? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 10:44 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
если 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 10:49 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
есть но только на делфи , и если не составит труда перевести то ... http://www.gyry.net/?d=programming&did=378 ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 10:51 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Он вставляет в DOS кодировке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 12:38 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
какой именно пример ? ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 13:01 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
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); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 13:05 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
в том примере который я дал было Код: plaintext 1. ш (';') (V),(V),, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2004, 14:47 |
|
||
|
Как скопировать из TDBGrid выделенные записи в буфер обмена?
|
|||
|---|---|---|---|
|
#18+
Маленькое уточнение, насколько я помню с вин2000 когда копируешь данные в клипбоард они автоматом переконвертируются под юникод версия Clipboard ()->AsText и подобные этого не учитывает так что я всегда пишу собственную версию функции копирования и не забиваю себе голову всякими раскладками и т.д. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2004, 14:06 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=437&tid=2034580]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 351ms |

| 0 / 0 |
