powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
10 сообщений из 10, страница 1 из 1
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741405
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
Эта функция CopyGRDToClb работает и с TDBGridEh и с TDBGrid.


Как из неё сделать универсальную функцию, чтобы она принимала в качестве параметра и тип TDBGridEh и тип TDBGrid?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
procedure CopyGRDToClb(dbg: TDBGridEh); //(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;

...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741418
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAry,

TDBGridEh унаследован от TCustomDBGrid? Если да - объяви тип параметра так, и всё. Если нет - другого общего наследника ищи, вплоть до TObject, а в функции - приводи к нужному типу, предварительно его узнав.
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741432
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAry,

а работать с DataSet и передавать список нужных колонок из *Grid - не вариант?
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741555
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012AdamAry,
а работать с DataSet и передавать список нужных колонок из *Grid - не вариант?т.к. из грида ни форматы, ни выпадающие списки данным механизмом не вытягиваются, то поддержу это решение



AdamAry
Код: pascal
1.
2.
3.
4.
5.
  if not dbg.DataSource.DataSet.active then
  begin
    ShowMessage('Нет выборки!!!');
    Exit;
  end;

настоящие мужики не кричат непонятными словами и тремя восклицательными знаками, это от бессилия
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741565
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAry
Код: pascal
1.
2.
3.
    dbg.Visible := False; //Делаем грид невидимым, чтобы не тратилось время
    //на его перерисовку при прокрутке DataSet - просто и
    //эффективно

DataSet.DisableControls сильно сложнее или эффект нет тот ?
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741568
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tusAdamAry
Код: pascal
1.
2.
3.
    dbg.Visible := False; //Делаем грид невидимым, чтобы не тратилось время
    //на его перерисовку при прокрутке DataSet - просто и
    //эффективно


DataSet.DisableControls сильно сложнее или эффект нет тот ?еще афтерскролл отключить
и букмарку в конце почистить
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741628
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

да это не его "код"...

http://www.delphi-club.ru/delphi/dbgrid_to_clipboard.html
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741659
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql2012andreymx,

да это не его "код"...

http://www.delphi-club.ru/delphi/dbgrid_to_clipboard.html значит, ему теперь есть чем заняться
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741672
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
советую улучшение - убрать символы #13#10 и #9, заменив их пробелами
насчет кавычек не думал
...
Рейтинг: 0 / 0
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
    #39741676
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxсоветую улучшение - убрать символы #13#10 и #9, заменив их пробелами
насчет кавычек не думалубрать из dbg.Columns.Items[j].Field.AsString
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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