к оглавлению

Приложение B. События Clarion

События

В программах на языке Clarion для Windows большинство сообщений от Windows автоматически обрабатываются внутри обработчика событий ACCEPT. Существуют события общего характера, которые обрабатываются библиотечными функциями исполняющей системы (перерисовка экрана и т.п.). И только те события, которые действительно могут потребовать реакции программы, передаются обработчиком событий ACCEPT в программу. Результатом такого подхода явилось облегчение прикладного программирования из-за устранения из программы низкоуровневого кодирования рутинных операций, что позволяет вместо этого сконцентрировать внимание на аспектах прикладного уровня. Конечно, можно также обрабатывать низкоуровневые сообщения Windows и самому, но делать это стоит только в абсолютно необходимых случаях. Если потребуется более подробная информация о программировании для среды Windows, обратитесь к книге Чарльза Петцольда Programming Windows, опубликованной Microsoft Press.

В программу обработчиком событий ACCEPT передаются события двух видов: события связанные с полем и события не связанные с полем. Ниже приведен список мнемонических имен соответствия событий, который содержится в файле EQUATES.CLW.

 

Модальные события

Следующие свойства всегда должны трактоваться как “модальные”:

EVENT:LoseFocus

EVENT:GainFocus

EVENT:Dragging

EVENT:Contracting

EVENT:Expanding

EVENT:PreAlertKey

EVENT:TabChanging

EVENT:Move

EVENT:Size

EVENT:Restore

EVENT:Maximize

EVENT:Iconize

EVENT:Sized

EVENT:Selected

EVENT:Selecting

Также, если окно списка имеет атрибут IMM:

EVENT:ScrollUp

EVENT:ScrollDown

EVENT:PageUp

EVENT:PageDown

EVENT:ScrollTop

EVENT:ScrollBottom

EVENT:ScrollTrack

EVENT:ScrollDrag

Когда мы ссылаемся на событие как на "модальное", то это означает, что пока событие не завершится библиотечная функция времени исполнения не может продолжать нормальную работу. Основное правило для кодирования реакции на эти события заключаются в том, что событие должно быть завершено в “ограниченный” период времени.

Это означает, что код, который вы создаете для обработки “модальных” событий, не должен содержать диалоги, включать внутренние ACCEPT-циклы, вызов окон сообщений или нечто аналогичное, что может помешать циклу ACCEPT завершить обработку события. Когда вашей программе необходимо сделать нечто подобное для обработки одного из таких событий, должны выдаваться пользовательские события во внешнюю очередь событий. Например:

CASE EVENT()

...

OF EVENT:GainFocus

POST(MyGainFocus,,, TRUE) !Послать определенное пользователем событие

!в обработчик действия GainFocus

...

OF MyGainFocus

<выполнение операций по обработке события>

...

END

 

События не связанные с полем

Введение

События не связанные с полем не относятся ни к одному из экранных объектов, однако требуют от программы некоторой реакции (например, закрыть окно или переключить исполняемый процесс). Большинство из этих событий помещают систему в модальное состояние на время обработки этого события, поскольку прежде чем продолжить выполнение программы требуется получить ее реакцию.

EVENT:AlertKey EVENT:BuildDone

EVENT:BuildFile EVENT:BuildKey

EVENT:CloseDown EVENT:CloseWindow

EVENT:Completed DDE Events

EVENT:Docked EVENT:Undocked

EVENT:GainFocus EVENT:Iconize

EVENT:Iconized EVENT:LoseFocus

EVENT:Maximize EVENT:Maximized

EVENT:Move EVENT:Moved

EVENT:OpenWindow EVENT:PreAlertKey

EVENT:Restore EVENT:Restored

EVENT:Resume EVENT:Size

EVENT:Sized EVENT:Suspend

EVENT:Timer

 

EVENT:AlertKey

Пользователь нажал горячую клавишу, определенную атрибутом ALRT (или оператором ALERT) для окна. Это событие, при обработке которого и выполняются действия, запрошенные пользователем нажатием горячей клавиши.

EVENT:BuildDone

Оператор BUILD или PACK закончили перестройку ключей. Представляет собой событие, по которому выполняется какой-нибудь код очистки. Если пользователь отменил BUILD, устанавливается код ошибки 93.

EVENT:BuildFile

Операторы BUILD или PACK перестраивают файл. Представляет собой событие, по которому происходит формирование информации пользователю о ходе выполнения этого процесса.

EVENT:BuildKey

Оператор BUILD или PACK перестраивают ключ. Представляет собой событие, по которому происходит формирование информации пользователю о ходе выполнения этого процесса.

EVENT:CloseDown

Приложение закрывается. Выдача этого события закрывает приложение. Это событие, при обработке которого выполняются некоторые завершающие действия.

IDE и любые программы сгенерированные Clarion, автоматически не завершаются при завершении работы операционной системы. Это позволяет пользователю завершать любые критические процессы или корректирует и предохраняет возможное разрушение данных. Если Вам нужно завершить приложение когда завершается работа операционной системы, вам понадобится перехватывать подходящие для этого сообщения окна в вашем приложении.

EVENT:CloseWindow

Окно закрывается. Выдача этого события закрывает окно. Это событие, при обработке которого выполняются некоторые завершающие действия.

EVENT:Completed

Закончена обработка всех экранных полей в безостановочном режиме (AcceptAll). Это событие, по которому выполняются процедуры проверки для всех введенных данных во всех полях окна и данные можно спокойно записывать на диск.

DDE Events

EVENT:DDEadvise

Программа-клиент в процессе DDE обмена запросила постоянное обновление данных, передаваемых программой-сервером, написанным на языке Clarion. Это событие, по которому вы выполняете оператор DDEWRITE, чтобы передавать клиенту данные каждый раз, когда они изменяются.

EVENT:DDEclosed

DDE сервер разорвал канал DDE для данного приложения- клиента, написанного на языке Clarion.

EVENT:DDEdata

DDE сервер передал обновленный элемент данных этой конкретной программе-клиенту, написанной на языке Clarion.

EVENT:DDEexecute

Программа-клиент прислала команду данному DDE серверу (если клиент написан на языке Clarion, то он выполнил оператор DEEXECUTE). Это событие по которому вы определяете действие, запрошенное клиентом, и выполняете его, затем выполняете оператор CYCLE, чтобы подтвердить выполнение клиенту, который прислал команду.

EVENT:DDEpoke

Клиент прислал не запрошенные данные этому серверу, написанному на языке Clarion. Это событие, при обработке которого вы определяете, что прислал клиент и куда его поместить,

затем выполняете оператор CYCLE, чтобы подтвердить получение клиенту, который прислал данные.

EVENT:DDErequest

Программа-клиент в процессе DDE обмена запросила данные от программы-сервера, написанной на языке Clarion. Это событие, по которому вы выполняете оператор DDEWRITE, чтобы один раз передать клиенту данные.

 

EVENT:Docked

Окно плавающей панели инструментов было прижато к краю или положение прижатия изменилось.

 

EVENT:Undocked

Окно плавающей панели инструментов перестало быть прижатым к краю.

 

EVENT:GainFocus

Фокус ввода переключается на данное окно из другого исполняемого процесса. Это событие, при обработке которого выполняется восстановление данных, запомненных при обработке события EVENT:LoseFocus. Система является модальной во время этого события.

EVENT:GainFocus не генерируется пока обрабатывается EVENT:LoseFocus (если фокус находился в другом окне той же программы).

EVENT:Iconize

Пользователь сворачивает окно с атрибутом IMM до пиктограммы. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Iconized не генерируется и действие прерывается. С помощью этого события можно не дать пользователю свернуть окно до пиктограммы. Система является модальной во время этого события.

EVENT:Iconized

Пользователь свернул окно с атрибутом IMM до пиктограммы. Это событие, по которому, вы снова выравниваете все элементы, которые зависят от размеров окна.

EVENT:LoseFocus

Фокус ввода переключается с данного окна на другой исполняемый процесс. Это событие, при обработке которого выполняется сохранение данных, в отношении которых есть риск изменения их в другом исполняемом процессе. Система является модальной во время этого события.

EVENT:Maximize

Пользователь устанавливает максимальные размеры окна с атрибутом IMM. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Maximized не генерируется и действие прерывается. С помощью этого события можно не дать пользователю установить максимальные размеры окна. Система является модальной во время этого события.

 

EVENT:Maximized

Пользователь установил максимальные размеры окна с атрибутом IMM. Это событие, по которому, вы снова выравниваете все элементы, которые зависят от размеров окна.

EVENT:Move

Пользователь перемещает окно с атрибутом IMM. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Moved не генерируется и действие прерывается. С помощью этого события можно не дать пользователю изменить расположение окна. Система является модальной во время этого события.

EVENT:Moved

Пользователь переместил окно с атрибутом IMM. Это событие, по которому, вы снова выравниваете все элементы в окне, которые зависят от расположения окна.

EVENT:Notify

Был выполнен оператор NOTIFY. Это событие используется получателем процесса для определения того, что было отправлено УВЕДОМЛЕНИЕ.

EVENT:OpenWindow

Окно открывается. Это событие, при обработке которого выполняются некоторые действия по инициализации работы с окном.

EVENT:PreAlertKey

Пользователь нажал горячие клавиши (атрибут ALRT или оператор ALERT) для атрибута ALRT на окне. Если в тексте программы присутствует оператор CYCLE, предназначенный для обработки этого события, обычное библиотечное действие по обработке нажатия клавиш выполняется до того, как произойдет событие EVENT:AlertKey. Это событие позволяет определять, следует ли выполнять обычное библиотечное действие при нажатии клавиш, или нет (помимо той обработки, что задана текстом, написанным “под событием” EVENT:AlertKey). Система является модальной во время этого события.

EVENT:Restore

Пользователь восстанавливает предыдущие размеры окна с атрибутом IMM. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Restored не генерируется и действие прерывается. С помощью этого события можно не дать пользователю восстановить окно. Система является модальной во время этого события.

EVENT:Restored

Пользователь восстановил предыдущие размеры окна с атрибутом IMM. Это событие, по которому, вы снова выравниваете все элементы, которые зависят от размеров окна.

EVENT:Resume

В связи с изменением потоковой модели в Clarion 6, это событие больше недоступно для использования в Clarion 6.

Фокус ввода остается на данном окне, и ему снова передается управление после остановки по событию EVENT:Suspend. Система является модальной во время этого события.

EVENT:Size

Пользователь изменяет размеры окна с атрибутом IMM. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Sized не генерируется и действие прерывается. С помощью этого события можно не дать пользователю изменить расположение окна. Система является модальной во время этого события.

EVENT:Sized

Пользователь изменил размеры окна с атрибутом IMM. Это событие, по которому, вы снова выравниваете все элементы, которые зависят от размеров окна.

EVENT:Suspend

В связи с изменением потоковой модели в Clarion 6, это событие больше недоступно для использования в Clarion 6.

Фокус ввода остается на данном окне, но управление передается другому исполняемому процессу для обработки таймерных событий. Система является модальной во время этого события.

EVENT:Timer

Переключен атрибут TIMER. Это событие по которому выполняются какие-либо периодические действия, такие как отображение времени, или фоновая обработка записей для подготовки отчета, или их пакетная обработка.

 

События связанные с полем

Связанные с полем события возникают, когда пользователь нажимает клавишу, по которой от программы может потребоваться выполнение особенных действий, связанных с данным экранным объектом.

EVENT:Accepted EVENT:AlertKey EVENT:ColumnResize

EVENT:Contracted EVENT:Contracting EVENT:Drag

EVENT:Dragging EVENT:Drop EVENT:DroppedDown

EVENT:DroppingDown EVENT:Expanded EVENT:Expanding

EVENT:Locate (Mouse Events) EVENT:NewSelection

EVENT:PageDown EVENT:PageUp EVENT:PreAlertKey

EVENT:Rejected EVENT:ScrollBottom EVENT:ScrollDown

EVENT:ScrollDrag EVENT:ScrollTop EVENT:ScrollTrack

EVENT:ScrollUp EVENT:Selected EVENT:TabChanging

 

EVENT:Accepted

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

Смотри также: PROP:Touched

EVENT:AlertKey

Пользователь нажал горячую клавишу, заданную атрибутом ALRT экранного поля. Это событие, по которому выполняются запрошенные пользователем действия.

EVENT:ColumnResize

Размеры колонки на элементе управления LIST с параметром М в строке форматирования атрибута FORMAT были изменены пользователем.

EVENT:Contracted

Для окна-списка, у которого в строке форматирования присутствует шаблон “Т”, пользователь щелкнул на квадратике свертывания.

Окна-списки с модификатором дерева (T) имеют поле Уровня (LONG) следующим за колонкой дерева. При начальном показе, если этот Уровень имеет отрицательное значение, ветвь свернута. (Замечание: Если дочерние ветви отсутствуют и уровень отрицателен, квадратик все равно будет отображать [+], поэтому без оснований не делайте каждый уровень отрицательным, а только для родительских ветвей, имеющих дочерние ветви).

Когда пользователь щелкает мышью на квадратиках [+] [-] дерево соответственно раскрывается и сворачивается. Это не меняет знака Уровня, но зато посылает события “развернуто” и “свернуто”. В этом случае, вы можете вручную изменить знак уровня и сохранить свернутое состояние дерева.

Чтобы определить какая строка выбрана в текущий момент, опросите свойство окна-списка PROPLIST:MouseDownRow.

Пример:

OF EVENT:Expanded

GET(PriorQ, 0 + ?List:PriorQ{PROPLIST:MouseDownRow} ) !Произведен клик мышью на знаке [+]

!пока свойства являются строками, а GET перегружает (Q,String) вы

!вы должны преобразовать в число с 0+proplist:xxx (или другими методами)

!CHOICE(?List:PriorQ)) не будет работать пока не выбрана запись

!при кликании мышью на [+]

IF ~ERRORCODE()

PriorQ:Level=ABS(PriorQ:Level) !Развернуто, т.к. Уровень положительный

PUT(PriorQ)

END

OF EVENT:Contracted

GET(PriorQ, 0 + ?List:PriorQ{PROPLIST:MouseDownRow} ) !Произведен клик мышью на знаке [+]

IF ~ERRORCODE()

PriorQ:Level = -ABS(PriorQ:Level) !свернуто, т.к. Уровень отрицательный

PUT(PriorQ)

END

Вы можете также развернуть/свернуть родительские ветви двойным нажатием на строке. Вы можете найти различия, изучая ?List:PriorQ{PROPLIST:MouseDownZone}=LISTZONE:ExpandBox или назначая “горячей” код MouseLeft2.

EVENT:Contracting

Для окна-списка, у которого в строке форматирования присутствует шаблон “Т”, пользователь щелкнул на квадратике свертывания. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Contracted не генерируется, а свертывание дерева отменяется. Система является модальной во время этого события.

EVENT:Drag

Пользователь отпустил кнопку мыши над объектом -допустимым для завершения операции перетаскивания. Это событие генерируется для объекта, из которого пользователь “перетаскивает” данные. Это событие по которому программно осуществляется передача перетаскиваемых данных в принимающий объект.

Смотри также: DRAGID, SETDROPID

EVENT:Dragging

Пользователь выполняет операцию “перетаскивания” из объекта, имеющего атрибут DRAGID, и в данный момент курсор находится в пределах объекта, который потенциально может служить объектом-назначением в который производится перенос. Это событие генерируется для объекта, из которого пользователь “перетаскивает” данные. Это событие по которому можно изменить форму курсора мыши, чтобы обозначить возможность “отпускания”.

Смотри также: SETCURSOR

EVENT:Drop

Пользователь отпустил кнопку мыши над объектом, допустимым для завершения операции перетаскивания. Это событие генерируется для объекта, в который пользователь “перетаскивает” данные. Это событие по которому программно осуществляется прием перетаскиваемых данных в принимающий объект.

Смотри также: DROPID

EVENT:DroppedDown

В окне списка или комбинированном окне списка с атрибутом DROP, список раскрыт. Это событие, по которому вы можете скрыть другие поля, которые перекрывает выпадающий список, чтобы предотвратить беспорядок на экране, который отвлекает пользователя.

EVENT:DroppingDown

В окне списка или комбинированном окне списка с атрибутом DROP, пользователь нажал кнопку со стрелкой вниз. Это событие, по которому считываются записи при запросе на раскрытие списка.

EVENT:Expanded

Для окна-списка, у которого в строке форматирования присутствует шаблон “Т”, пользователь щелкнул на квадратике расширения.

Окна-списки с модификатором дерева (T) имеют поле Уровня (LONG) следующим за колонкой дерева. При начальном показе, если этот Уровень имеет отрицательное значение, ветвь свернута. (Замечание: Если дочерние ветви отсутствуют и уровень отрицателен, квадратик все равно будет отображать [+], поэтому без оснований не делайте каждый уровень отрицательным, а только для родительских ветвей, имеющих дочерние ветви).

Когда пользователь щелкает мышью на квадратиках [+] [-] дерево соответственно раскрывается и сворачивается. Это не меняет знака Уровня, но зато посылает события “развернуто” и “свернуто”. В этом случае, вы можете вручную изменить знак уровня и сохранить свернутое состояние дерева.

Чтобы определить какая строка выбрана в текущий момент, опросите свойство окна-списка PROPLIST:MouseDownRow.

Пример:

OF EVENT:Expanded

GET(PriorQ, 0 + ?List:PriorQ{PROPLIST:MouseDownRow} ) !Произведен клик мышью на знаке [+]

!пока свойства являются строками, а GET перегружает (Q,String) вы

!вы должны преобразовать в число с 0+proplist:xxx (или другими методами)

!CHOICE(?List:PriorQ)) не будет работать пока не выбрана запись

!при кликании мышью на [+]

IF ~ERRORCODE()

PriorQ:Level=ABS(PriorQ:Level) !Развернуто, т.к. Уровень положительный

PUT(PriorQ)

END

OF EVENT:Contracted

GET(PriorQ, 0 + ?List:PriorQ{PROPLIST:MouseDownRow} ) !Произведен клик мышью на знаке [+]

IF ~ERRORCODE()

PriorQ:Level = -ABS(PriorQ:Level) !вернуто, т.к. Уровень отрицательный

PUT(PriorQ)

END

Вы можете также развернуть/свернуть родительские ветви двойным нажатием на строке. Вы можете найти различия, изучая ?List:PriorQ{PROPLIST:MouseDownZone}=LISTZONE:ExpandBox или назначая “горячей” код MouseLeft2.

EVENT:Expanding

Для окна-списка, у которого в строке форматирования присутствует шаблон “Т”, пользователь щелкнул на квадратике расширения. Если среди операторов, осуществляющих обработку данного события, встретится оператор CYCLE, то событие EVENT:Expanded не генерируется, а раскрытие дерева отменяется. Система является модальной во время этого события.

EVENT:Locate

В окне списка с атрибутом VCR пользователь нажал кнопку (?) VCR “поиск”. Это событие, по которому можно открыть вводное поле локатора, если оно было скрыто.

Mouse Events

EVENT:MouseDown

На элементе управления REGION с атрибутом IMM является синонимом события EVENT:Accepted (только для большего удобства читаемости кода).

EVENT:MouseIn

Курсор мыши вошел в пределы поля типа REGION, имеющее атрибут IMM.

EVENT:MouseMove

Курсор мыши перемещается в пределах поля типа REGION, имеющего атрибут IMM.

EVENT:MouseOut

Курсор мыши покинул пределы поля типа REGION, имеющее атрибут IMM.

EVENT:MouseUp

На элементе управления REGION с атрибутом IMM была отпущена кнопка мыши.

EVENT:NewSelection

Изменился выбор, сделанный пользователем в объектах LIST, COMBO, SHEET или SPIN (выделенная полоса-курсор переместилась). В поле ENTRY с атрибутом IMM, событие генерируется всякий раз, когда изменилось содержимое поля или переместился курсор. Представляет собой событие, по которому выполняется ряд действий, предназначенных для синхронизации состояния других элементов управления с выделенной в настоящее время записью в списке, или решается, что пользователь уже ввел все необходимые данные в ENTRY.

EVENT:PageDown

В окне списка или комбинированном окне списка с атрибутом IMM, пользователь нажал клавишу PgDn. Это событие, по которому по которому вы получаете следующую страницу при “перелистывании” списка.

EVENT:PageUp

В окне списка или комбинированном окне списка с атрибутом IMM, пользователь нажал клавишу PgUp. Это событие, по которому по которому вы получаете предыдущую страницу при “перелистывании” списка.

EVENT:PreAlertKey

Пользователь нажал горячую клавишу, заданную атрибутом ALRT экранного поля. Если в коде, предназначенном для обработки этого события, встретился оператор CYCLE, то до того, как будет сгенерировано событие EVENT:AlertKey, выполняется обычное библиотечное действие для этого сочетания клавиш. Это событие позволяет определять, следует ли выполняет обычное библиотечное действие при нажатии клавиш, или нет (помимо той обработки, что задана текстом, написанным “под событием” EVENT:AlertKey). Система является модальной во время этого события.

EVENT:Rejected

Пользователь ввел данные, не соответствующие шаблону поля или значение в поле SPIN, выходящее за границы допустимого диапазона. Процедура REJECTCODE возвращает причину, по которой отвергаются введенные пользователем данные, а для того, чтобы прочитать с экрана данные можно использовать свойство PROP:ScreenText. Это событие, по которому вы оповещаете пользователя о сути ошибки, сделанной им при вводе.

EVENT:ScrollBottom

В окне списка или комбинированном окне списка с атрибутом IMM, пользователь нажал сочетание клавиш CTRL+PGDN. Это событие, по которому вы получаете последнюю страницу при “перелистывании” списка.

EVENT:ScrollDown

В окне списка или комбинированном окне списка с атрибутом IMM, пользователь попытался переместить выделенную ниже последнего на экране элемента списка. Это событие, по которому по которому вы получаете следующую запись при “перелистывании” списка или просто перемещает выделенный курсор, когда нет нужны получать другую запись.

EVENT:ScrollDrag

В объекте LIST или COMBO с атрибутом IMM, пользователь перемещает “бегунок” линейки скроллинга, и только отпустил кнопку мыши. Это событие, по которому вы динамически прокручиваете выводимые записи, основываясь на текущем значении свойства PROP:VScrollPos.

EVENT:ScrollTop

В окне списка или комбинированном окне списка с атрибутом IMM, пользователь нажал сочетание клавиш CTRL+PGUP. Это событие, по которому вы получаете первую страницу при “перелистывании” списка.

EVENT:ScrollTrack

В объекте LIST или COMBO с атрибутом IMM, пользователь перемещает “бегунок” линейки скроллинга. Это событие, по которому вы динамически прокручиваете выводимые записи, основываясь на текущем значении свойства PROP:VScrollPos.

EVENT:ScrollUp

В окне списка или комбинированном окне списка с атрибутом IMM, пользователь попытался переместить выделенную выше первого на экране элемента списка. Это событие, по которому по которому вы получаете предыдущую запись при “перелистывании” списка или просто перемещается выделенный курсор, когда нет нужды получать другую запись.

EVENT:Selected

Объект получает фокус. Это событие по которому вы можете выполнить любой код инициализации данных.

EVENT:Selecting

Это модальное событие помещается в очереди оконных событий перед EVENT:Selected. Если при обработке этого события циклом ACCEPT выполняется оператор CYCLE в коде обработки этого события, EVENT:SELECTED не генерируется. Для получения метки соответствия поля для поля, которое должно быть выбрано, используется функция FIELD().

EVENT:Selecting не выполняется перед генерацией EVENT:Selected, если выбран пункт меню с атрибутом IMM, потому что в этом случае EVENT:Selected является модальным.

Установка начального фокуса в поле переместится от оператора OPEN(Window) до оператора DISPLAY (который также неявно вызывается из ACCEPT). Поэтому, если нет явного оператора DISPLAY между OPEN и ACCEPT, EVENT:Selecting сгенерируется перед первым событием EVENT:Selected.

Если же оператор DISPLAY вызывается перед циклом ACCEPT, первое событие EVENT:Selected генерируется без предыдущего события EVENT:Selecting, потому что ACCEPT-цикл не исполнен.

EVENT:TabChanging

В объекте SHEET фокус собирается перейти на другой лист. Это событие по которому вы можете выполнить любые возможные вспомогательные действия для листа с которого переходит фокус.

к оглавлению

Знаете ли Вы, что объектно-ориентированное программирование - это технология программирования, при которой программа рассматривается как набор дискретных объектов, содержащих, в свою очередь, наборы структур данных и процедур, взаимодействующих с другими объектами.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution