Домой Классы Статические функции Перечисления (ENUM) Записи (RECORD)

{Long_operation}


(включая защищенные члены)

CLASS {Long_operation} , UNTESTED, DESTRUCTORS, NATIVE:


Класс формы для автоматического отображения, когда обнаруживается выполнение длительной операции. В AL-IV, на каждой итерации каждого цикла по всему коду AL-IV, выполняется декремент глобального счетчика. При его обнулении, вызывается функция-заглушка, которая переинициализирует этот глобальный счетчик обычно значением 65535), и вызывает функцию, которая детектирует начало длительной операции. Длительной операция считается, если на протяжении более чем 1 секунды не произошел возврат из текущего обработчика события на форме. Так же, форма {Long_operation} позволяет отобразить прогресс длительной операции (если это предусмотрено вашим кодом). Для того, чтобы сделать это, следует обратиться к методу формы Long_operation, который возвращает (или создает и возвращает) экземпляр класса {Long_operation}, привязанный к этой форме, и использовать его методы Set_description, Set_progress и другие. Так же, есть метод Indicate, позволяющий сообщить форме прогресса длинной операции, что пока что программа не находится в той стадии, чтобы начинать отсчет 1 секунды (при этом сбрасывается время точки начала отсчета этой секунды).
Но основное предназначение этой формы состоит в том, чтобы позволить пользователю приостановить или прекратить длительную операцию (без принудительного завершения всего приложения, с сопутствующим крахом и потерей прочих результатов работы).
Имеется опция компилятора, позволяющая отключить работу с глобальным счетчиком и детектированием длительных операций. В этом случае так же целесообразно указать в настройках проекта путь к фиктивной реализации класса {Long_operation}, чтобы уменьшить число зависимостей и сократить код. Так же, возможно создать свою функцию заглушки и использовать возможность контроля итераций в AL-IV для своих целей.


IMPORT : {AL4_form} .

BASE CLASS {Form} .


STR Sender_alias , INIT



--------------------------------------------------------- 'visual controls'

{Label} description|_long_operation


{Label} stage_details|_current_stage


{Progress} progress|_of_operation_0_TO_100


{Button} pause|_operation


{Button} cancel_operation


    

METHOD before_CONSTRUCT



METHOD after_CONSTRUCT



FUNCTION do_long_operation_synchronously (
     
{Form} Caller|_form ,
     
{Long_operation} Exist|ing_long_operation ) ==> {Long_operation}



METHOD Set_description ( STR D|escription_text )


Устанавливает описание длительной операции, планируемой для исполнения. Может так же использоваться для изменения описания в процессе выполнения такой операции.


METHOD Set_stage|_details ( STR D|etails_on_current_stage )


Устанавливает описание стадии длительной операции, планируемой или выполняемой.


METHOD Set_progress|_0_TO_100 ( REAL P|rogress_value )


Устанавливает значения прогресса выполнения длинтельной операции (необязательно, если этот метод не вызывался, прогресс будет просто зациклен).


FUNCTION event_kind_name (
     
{Form}.{event} Ev|ent_kind ) ==> STR , CALLBACK


BOOL Paused|_until_button_pressed_again , READ

Установлено в TRUE, если в начтоящее время операция "заморожена".


BOOL Cancelled|_operation , READ

TRUE, если операция была отменена (пользователем).


 

OVERRIDE click


INT activity_count|er_0_TO_999999_looped


{Date_time}.{date_time} last_indic|ate_LOCAL


  

METHOD Indicate|_activity ( BOOL Proc|ess_messages ) , CALLBACK


Используйте этот метод для перезапуска счетчика 1 секунды до того, как подсистема AL-IV решит, что ваш код блоее "не отвечает". Передача параметра TRUE позволяет выполнить находящиеся в очереди события формы. Это создает впечатление "плавной" работы приложения на заднем плане, без необходимости использования механизма потоков ({Thread}).


METHOD can_show ==> BOOL , CALLBACK



METHOD in_progress|_long_operation_call_from_program_to_ensure_your_code_still_live (
     
STR Stage|_description ,
     
REAL Percent|_ready_0_TO_100 ) , CALLBACK


BOOL Finished|_operation


  

OVERRIDE closing ==> {Form}.{action}



OVERRIDE shown


END