Последняя версия DataExpress 3 beta от 9 октября 2018 года. Скачать. Энциклопедия DX. Форум на Develop-Soft

Окно с прогрессбаром

Все о том как сделать что-то с помощью скриптов.
Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

Окно с прогрессбаром

Сообщение rausNT » Вт июн 12, 2018 12:34 pm

Подскажите пожалуйста как создать уничтожить свое окно для прогрессбара скриптом. Еще желательно, чтобы так хоть что то крутилось, хоть гифка, хоть палочка как в досе. Все же пришлось переходить на скрипты, но тормоза стали слишком большие при выполнении. Не проходит юзер-тест.
Заранее спасибо!

Аватара пользователя
admin
Разработчик
Сообщения: 3832
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Окно с прогрессбаром

Сообщение admin » Вт июн 12, 2018 3:41 pm

Простое окно с текстом можно сделать так:

Код: Выделить всё

procedure PWSetParam(Sender: TObject; const ParamName: String);
var
  W: TWindow;
begin
  if AnsiLowerCase(ParamName) <> 'text' then Exit;

  W := TWindow(TParamList(Sender).Objects['Window']);
  W.Show;
  with TLabel(W.FindComponent('Text')) do
  begin
    Caption := W.Params.Values[ParamName];
    Left := W.ClientWidth div 2 - Canvas.TextWidth(Caption) div 2;
    Top := W.ClientHeight div 2 - Height div 2;
    Application.ProcessMessages;
  end;
end;

function CreateProgressWindow: TWindow;
begin
  Result := TWindow.Create;
  with TLabel.Create(Result) do
  begin
    Name := 'Text';
    Parent := Result;
    Alignment := taCenter;
    Caption := '';
  end;
  with Result do
  begin
    BorderStyle := bsNone;
    Width := 250;
    Height := 200;
    Position := poMainFormCenter;
  end;
  Result.Params.Objects['Window'] := Result;
  Result.Params.OnSetParam := @PWSetParam;
end;


Пример использования:

Код: Выделить всё

{$I ProgressWindow}

procedure ButtonClick(Sender: TObject);
var
  W: TWindow;
begin
  W := CreateProgressWindow;
  Self.MoveFirst;
  while not Self.Eof do
  begin
    W.Params.Values['Text'] := Format('Обрабатывается запись: %d', [Self.RecNo]);
    Self.MoveNext;
  end;
  W.Free;
end; 


Пользовательский модуль во вложении, подключается директивой {$I ...}.
Вложения
ProgressWindow.zip
(576 байт) 21 скачивание

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

Re: Окно с прогрессбаром

Сообщение rausNT » Вт июн 12, 2018 4:12 pm

Спасибо!!!

Аватара пользователя
admin
Разработчик
Сообщения: 3832
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Окно с прогрессбаром

Сообщение admin » Вт июн 12, 2018 11:50 pm

Добавил анимацию.
Вложения
ProgressWindow.zip
(74.8 КБ) 42 скачивания

Аватара пользователя
rausNT
Знаток
Сообщения: 473
Зарегистрирован: Чт авг 24, 2017 9:23 am

Re: Окно с прогрессбаром

Сообщение rausNT » Пн июн 18, 2018 9:56 am

admin писал(а):Добавил анимацию.


очень красиво стало. Но окно загружается не в модальном режиме?
Как минимум окном дебаггера оно перекрывается.
Может лучше сделать его совсем модальным?

Аватара пользователя
Гocть
Эксперт
Сообщения: 1131
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Окно с прогрессбаром

Сообщение Гocть » Пн июн 18, 2018 10:21 am

"совсем модальным" не получится, потому что окно debug уже "совсем модальное".
Попробуйте так:

Код: Выделить всё

{$i progresswindow}
procedure sleep(ms: integer);
external 'Sleep@kernel32 stdcall';

procedure progress (Sender: TObject);
var
  i: integer;
  w:twindow;
begin
w:= createprogresswindow;
w.formstyle:=fsstayontop; // пробуем перекрыть "совсем модальное" окно
debug(''); // "совсем модальный" debug
  for i:=0 to 100 do
   begin
   w.params.values['text']:=inttostr(i);
   sleep(50);
   end;
   w.params.values['text']:='операция завершена';
   sleep(2000);
   freeobj(w);
end;


procedure Form_Create;
begin
  dxButton1.OnClick := @progress;
end;
Фрилансер. Разработка на заказ. Консультирование.

Аватара пользователя
admin
Разработчик
Сообщения: 3832
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Окно с прогрессбаром

Сообщение admin » Вс июн 24, 2018 9:06 pm

В версии от 24.06.2018 модуль будет выдавать ошибку, если он был скачан до выхода новой версии программы. Следует заново скачать модуль.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1131
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Окно с прогрессбаром

Сообщение Гocть » Пт июл 27, 2018 8:03 pm

dxdb_icon Пробный вариант "анимашки" без картинок.
Фрилансер. Разработка на заказ. Консультирование.

Аватара пользователя
admin
Разработчик
Сообщения: 3832
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская

Re: Окно с прогрессбаром

Сообщение admin » Пт июл 27, 2018 8:51 pm

Эта крутилка даже лучше, чем с картинками и ресурсов меньше кушает.

Аватара пользователя
Гocть
Эксперт
Сообщения: 1131
Зарегистрирован: Пн ноя 27, 2017 8:02 am

Re: Окно с прогрессбаром

Сообщение Гocть » Пт июл 27, 2018 8:54 pm

admin писал(а):ресурсов меньше кушает.

Согласен. Сказал бы даже вообще не кушает: наблюдал за состоянием загрузки процессора и памяти, практически без отклонений. Можно таких еще несколько разных нафантазировать.
Жаль что с векторной графикой программа не работает.
Фрилансер. Разработка на заказ. Консультирование.