I have written many posts previously on Timer in Oracle Forms like how to change images randomly with timers and how to display a clock using timer, but in this post I am simply describing to how to create a timer, stop a timer, re-start a timer and deleting a timer.
The following is the screen shot for this example showing a progress bar based on a display item:
You can also download this form from the following link Timer.fmb
Create a display item with the following properties:
Name: Prgbar
Width: 5
Bevel: Plain
Background Color: blue
Write the following code for the "Create Timer" button:
When-Button-Pressed trigger
Declare v_timer timer; Begin -- find timer first if already exists. v_timer := find_timer('PrgBarTmr'); if id_null(v_timer) then -- Creating timer for one second... one second = 1000 millisecond v_timer := Create_Timer('PrgBarTmr', 1000, Repeat); else message('already exists.'); end if; -- will handle this timer in form level when-timer-expired trigger End;
Write the following code for the "Stop Timer" buton:
When-Button-Pressed trigger
Declare v_timer timer; Begin -- find the timer first v_timer := find_timer('PrgBarTmr'); if not id_null(v_timer) then -- this will stop the timer after one millisecond Set_Timer(v_timer, 1, No_Repeat); end if; -- will handle this timer in form level when-timer-expired trigger End;
Write the following code for the "Re-Start Timer" buton:
When-Button-Pressed trigger
Declare v_timer timer; Begin -- find the timer first v_timer := find_timer('prgbartmr'); if not id_null(v_timer) then -- this will re-start the timer after one second Set_Timer(v_timer, 1000, Repeat); else v_timer := create_timer('prgbartmr',1000, Repeat); end if; -- will handle this timer in form level when-timer-expired trigger End;
Write the following code for the "Delete Timer" buton:
When-Button-Pressed trigger
Declare v_timer timer; Begin -- find the timer first v_timer := find_timer('PrgBarTmr'); if not id_null(v_timer) then -- this will delete the timer Delete_Timer(v_timer); end if; End;
Then finally write the code for When-Timer-Expired trigger at form level to handle the timer and to do specific task:
When-Timer-Expired trigger
Declare v_timer_name varchar2(30); v_width number; Begin -- get the timer name first.. to know which timer has expired.. if multiple timer are running v_timer_name := get_application_property(timer_name); -- check if the same timer with capital letters if v_timer_name = 'PRGBARTMR' then v_width := get_item_property('blKtmr.prgbar', width); if v_width < 100 then v_width := v_width + 5; else v_width := 0; end if; set_item_property('blktmr.prgbar', width, v_width); end if; -- will handle this timer in form level when-timer-expired trigger End;