Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 28 мар 2024, 18:13

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Предложение разработчикам
СообщениеДобавлено: 28 окт 2014, 09:50 
Не в сети

Зарегистрирован: 27 ноя 2012, 09:31
Сообщений: 10
Всем добрый день.
Порой при выполнении наких либо задач требуется визуализация выполнения процесса.
Например выполняем экспорт большого объема данных в xls, затемняем грид пишем мол "идет экспорт, ждите"
Код:
StartLoadingStatus('Экспорт данных...');

исходя из того что объем данных большой то приходится ждать какое-то время, и непонятно выполняется экспорт или прога "повисла".
Может для визуального восприятия выполнения экспорта данных реализовать какой-нибудь, например, progressbar с процентовкой экспорта.
Я когда то давно делал что-то подобное (может не очень правильно, но оно работало): те создал динамическую форму поместил туда progressbar и при выполнении экспорта выщитывал процент выполнения операции и соответственно изменял position прогресбара, далее по выполнении операции грохал форму со всем ее содержимым.
Код:
//Экспорт DataSet в Excel
procedure DatasetToExcel(FDBGrid: TDBGridEh; FileName: string);
var
  iCol, iRow, iField: Integer;
  fField: TField;
  MyBookmark: TBookmark;
  FStream: TFileStream;
  form: TForm; //
  Progress: TProgressBar;
  Label_: TLabel;
  reccount:Integer;
begin
  if FDBGrid.DataSource.DataSet.RecordCount = 0 then exit;
  iCol := 0;
  iRow := 0;
  MyBookMark := FDBGrid.DataSource.DataSet.GetBookmark;
  FDBGrid.DataSource.DataSet.DisableControls;
  FDBGrid.DataSource.DataSet.First;
  reccount:=FDBGrid.DataSource.DataSet.RecordCount;
  try
    Application.CreateForm (TForm, form);
    with form do
    begin
      Caption := 'information';
      Position := poMainFormCenter;
      BorderStyle:=bsNone;
      Width:=350;
      Height:=40;
      Show;
      Label_:=TLabel.Create(form);
      with Label_ do
      begin
        Parent := form;
        Align:=alTop;
        Alignment:=taCenter;
        Caption:='Выполняется экспорт данных...';
      end;
      Progress:=TProgressBar.Create(form);
      with Progress do
      begin
        Parent := form;
        Align:=alClient;
        Max:=100;
      end;
    end;
  try
    FStream := TFileStream.Create(FileName, fmCreate);
    XlsBeginStream(FStream, 0);
    //Заголовки полей
    for iField := 0 to FDBGrid.Columns.Count - 1 do
    begin
      fField := FDBGrid.Columns[iField].Field;
      if fField.Visible then
      begin
        XlsWriteCellLabel(FStream, iCol, iRow, fField.DisplayLabel);
        iCol := iCol + 1;
      end; //with sh
    end;
    iRow := iRow + 1;
    while not FDBGrid.DataSource.DataSet.Eof do begin
      iCol := 0;
      for iField := 0 to FDBGrid.Columns.Count - 1 do
      begin
        fField := FDBGrid.Columns[iField].Field;
        if fField.Visible then
        begin
          case fField.DataType of
            ftWideString, ftString, ftMemo :
              begin
                XlsWriteCellLabel(FStream, iCol, iRow, fField.AsAnsiString);
              end;
            ftAutoInc, ftInteger, ftSmallint, ftCurrency, ftFloat, ftBCD :
              begin
                if fField.AsFloat <> 0 then
                  XlsWriteCellNumber(FStream, iCol, iRow, fField.AsFloat);
              end;
            ftBoolean :
              begin
                if fField.AsBoolean = True then
                  XlsWriteCellLabel(FStream, iCol, iRow, 'Да')
                else
                  XlsWriteCellLabel(FStream, iCol, iRow, 'Нет');
              end;
          else
            begin
              XlsWriteCellLabel(FStream, iCol, iRow, fField.AsString);
            end;
          end; //case
          iCol := iCol + 1;
        end; //visible
      end; //for
      Application.ProcessMessages;
      Progress.Position:=Trunc(iRow/reccount*100);
      iRow := iRow + 1;
      FDBGrid.DataSource.DataSet.Next;
    end; //while
    XlsEndStream(FStream);
    FStream.Free;
    FDBGrid.DataSource.DataSet.GotoBookmark(MyBookMark);
  finally
    FDBGrid.DataSource.DataSet.FreeBookmark(MyBookMark);
  FDBGrid.DataSource.DataSet.EnableControls;
  end;
  finally
    form.Close;
    form.Free;
  end;

Мое предложение реализовать ProgressBar или что-то наподобие StartLoadingStatus или может какую другую фитчу!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Предложение разработчикам
СообщениеДобавлено: 11 июн 2015, 15:22 
Не в сети

Зарегистрирован: 03 ноя 2013, 07:42
Сообщений: 4
Есть ещё предложение.
В панели SearchPanel добавить кнопочку для выделения найденных записей. Желаемое попробовал отобразить на рисунке. Я конечно-же у себя такую кнопочку сделал, но хотелось бы её иметь уже готовую в компоненте.
Спасибо!


Вложения:
ehlib_check.png
ehlib_check.png [ 82.64 KiB | Просмотров: 4526 ]
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Предложение разработчикам
СообщениеДобавлено: 27 янв 2017, 14:28 
Не в сети

Зарегистрирован: 09 дек 2015, 08:50
Сообщений: 44
Откуда: Omsk
Можно в SearchPanel справа рядом с мелкими кнопочками (троеточие), сделать еще несколько настраиваемых кнопочек (с иконками) для экспорта в Excel всего Grida. Часто бывает нужен такой функционал - как экспорт грида в другие форматы и приходится для этого делать свои кнопки, писать код.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB