Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid / 10 сообщений из 10, страница 1 из 1
01.12.2018, 12:20
    #39741405
AdamAry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
Код: 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
01.12.2018, 13:18
    #39741418
YuRock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Универсальная функция, чтобы она принимала в качестве параметра TDBGridEh и тип TDBGrid
AdamAry,

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

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



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

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

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


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

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

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

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

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


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