Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Ниже приведен пример, как это сделать при помощи Direct Oracle Access, надеюсь этот кусок кода несложно запустить в отдельном процессе, а в другом можно запустить перемесчатель прогресс бара. Есть готовая компонента, могу поделиться.
//на создании потока вставим то, что будет выбирать необходимую информацию Self.fods.SQL.Text:='SELECT SOFAR FROM V$SESSION_LONGOPS WHERE CONTEXT=:FK_ID'; Self.fods.DeclareVariable('FK_ID',otInteger); Self.fods.SetVariable('FK_ID',ID); //На выполнение потока вешаем открытие/закрытие TOracleDataSet while (Terminated = false) do begin Self.fods.Close; Self.fods.Open; Self.fpb.Progress:=Self.fods.FieldByName('SOFAR').AsInteger; //^^^^Эта строчка как раз и устанавливает нужный прогрессбар в нужную позицию... end; |
Ну и соответсвенно перед выполнением всего этого дела необходимо выставить максимальное число (100%):
procedure |
Минимальное:
procedure |
Значение шага:
procedure |
Вышеприведенный кусок кода - клиентская часть, но есть и "подводный камень" - серверная часть... Данный метотод подкодит только для функций, процедур и пактеов, в которых вы можете написать вставить следущую строчку:
PROGRESS_BAR.STEPIT; |
Код пакета PROGRESS_BAR приведен ниже:
create or replace package PROGRESS_BAR is -- Wrote by Philip A. Milovanov nMaxValue NUMBER:=0; nMinValue NUMBER:=0; nCurrentValue NUMBER:=0; nStepValue NUMBER:=1; nID PLS_INTEGER; slno PLS_INTEGER; target PLS_INTEGER; procedure SETMaxValue(nVal in NUMBER); procedure SETMinValue(nVal in NUMBER); function INIT RETURN NUMBER; procedure StepIt; procedure SetStepValue(nValue in NUMBER); procedure StepIt(C in NUMBER); end; -- package Specification PROGRESS_BAR --Сам пакет: Create or Replace package Body PROGRESS_BAR is -- Wrote by Philip A. Milovanov procedure SETMaxValue(nVal in NUMBER) is begin if nVal<nMinValue then RAISE_APPLICATION_ERROR(-20001,'...:'||nMinValue||' ,...:'||nVal); end if; nMaxValue:=nVal; end; procedure SETMinValue(nVal in NUMBER) is begin if nVal>nMaxValue then RAISE_APPLICATION_ERROR(-20001,'...:'||nVal||' ,...:'||nMaxValue); end if; nMinValue:=nVal; end; function INIT RETURN NUMBER is CURSOR c is SELECT OBJECT_ID FROM ALL_OBJECTS WHERE OBJECT_NAME='PROGRESS_BAR'; i NUMBER; begin OPEN c; FETCH c INTO target; CLOSE c; SELECT SEQ_TPROCESS_BAR.NEXTVAL INTO i FROM DUAL; nCurrentValue:=nMinValue; nID:=DBMS_APPLICATION_INFO.set_session_longops_nohint; DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(nID,slno, 'CALCULATING REPORT',target,i,nCurrentValue,nMaxValue,'PROGRESS BAR INFO',NULL); RETURN i; end; procedure StepIt is begin nCurrentValue:=nCurrentValue+nStepValue; DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(nID,slno, 'CALCULATING REPORT', target,nMinValue,nCurrentValue,nMaxValue,'PROGRESS BAR INFO',NULL); end; procedure SetStepValue(nValue in NUMBER) is begin nStepValue:=nValue; end; procedure StepIt(C in NUMBER) is begin nCurrentValue:=nCurrentValue+c; DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS (nID,slno,'CALCULATING REPORT', target,nMinValue,nCurrentValue,nMaxValue,'PROGRESS BAR INFO',NULL); end; end; ... |