- Vytvoril D2000 Dev Team na okt 12, 2017
Akcia ON CHANGE
Deklarácia
ON CHANGE objIdent GOTO procName [NONE]
Parametre
objtIdent | in | Identifikátor hodnoty (alebo skupiny hodnôt). |
procName | in | Meno procedúry (musí vyhovovať pravidlám pre meno objektu). |
Popis
Akcia špecifikuje procedúru (prostredníctvom mena procName), ktorá bude zavolaná, ak nastane zmena hodnoty
objIdent (alebo niektorej zo skupiny hodnôt). Hodnota musí byť odvodená od mena objektu (nie od lokálnej
premennej).
Napríklad:
Napríklad:
Sledovanú hodnotu je možné identifikovať aj prostredníctvom výrazu typu HOBJ alebo VOBJ.
Napríklad:
Po vykonaní akcie, napríklad:
bude procedúra s menom ValueChanged zavolaná vždy, keď príde k zmene hodnoty objektu Sec (t.j. každú sekundu).
Ak sa v rámci skriptu vykoná akcia:
bude volanie procedúry ValueChanged pri zmene hodnoty objektu Sec ukončené.
V zápise akcie je možné uviesť aj položku štruktúry:
Na zmenu jednej hodnoty je možné reagovať aj na viacerých procedúrach:
V tomto prípade budú pri zmene objektu Sec postupne volané procedúry ValueChanged a ValueChanged1.
Procedúra, ktorá je volaná na základe zmeny hodnoty musí byť deklarovaná nasledovne:
Kde:
Akcia je použiteľná len v rámci skriptu Aktívnej schémy alebo objektu typu Event s aktívnou voľbou Server Event.
Napríklad:
- správne - Sec, SV.Struktura[2]^Int
- nesprávne - _locVar, ...
Napríklad:
- identifikátor druhého riadku - SV.Struktura[2] (nie je uvedené meno stĺpca)
- identifikátor stĺpca Int - SV.Struktura[0]^Int (index riadku je 0)
- identifikátor všetkých hodnôt (celej štruktúry) - SV.Struktura alebo SV.Struktura[0] (index riadku je 0).
Sledovanú hodnotu je možné identifikovať aj prostredníctvom výrazu typu HOBJ alebo VOBJ.
Napríklad:
INT _hbj ... ON CHANGE (_hbj) GOTO ValueChanged
Po vykonaní akcie, napríklad:
ON CHANGE Sec GOTO ValueChanged
Ak sa v rámci skriptu vykoná akcia:
ON CHANGE Sec GOTO ValueChanged NONE
V zápise akcie je možné uviesť aj položku štruktúry:
ON CHANGE SV.Struktura[2]^Int GOTO ValueChanged
Na zmenu jednej hodnoty je možné reagovať aj na viacerých procedúrach:
ON CHANGE Sec GOTO ValueChanged ON CHANGE Sec GOTO ValueChanged1
Procedúra, ktorá je volaná na základe zmeny hodnoty musí byť deklarovaná nasledovne:
PROCEDURE ProcName(typHodnoty _hodnota, ALIAS _odkazNaObjekt, INT _riadok, INT _stlpec)
Kde:
ProcName | Meno procedúry, ktoré vyhovuje obmedzeniam pre meno procedúry. |
typ_hodnoty | Typ hodnoty parametra _hodnota. Ak je typ nevhodne zvolený (vzhľadom na zmenenú hodnotu), parameter bude nadobúdať neplatnú hodnotu. |
_hodnota | Parameter, ktorý bude po štarte procedúry naplnený novou hodnotou sledovaného objektu (alebo položky pri sledovaní zmeny položky štruktúry). |
_odkazNaObjekt | Parameter typu ALIAS. Po štarte procedúry je inicializovaný tak, aby sa odkazoval na objekt, ktorý zmenil hodnotu (ak je sledovaná položka štruktúry, tak ALIAS sa odkazuje na celú štruktúru nie na položku). |
_riadok, _stlpec | Parametre typu INT. Majú význam len ak bola procedúra zavolaná z dôvodu zmeny hodnoty políčka štruktúrovanej premennej. Ináč sú vždy nastavené na hodnotu 0. V prípade zmeny hodnoty políčka parameter _riadok obsahuje poradové číslo riadku a parameter _stlpec obsahuje poradové číslo stĺpca v rámci hodnoty príslušnej štruktúrovanej premennej. |
Akcia je použiteľná len v rámci skriptu Aktívnej schémy alebo objektu typu Event s aktívnou voľbou Server Event.
Príklad
Príklad skriptu v rámci aktívnej schémy, ktorý sleduje a operátorovi na ploche procesu D2000 HI oznamuje zmeny hodnôt:
- objektu Sec
- položky SV.Struktura^Int
- ľubovoľného políčka v stĺpci Int (t.j. SV.Struktura[0]^Int).
; Obsluha zmien hodnôt PROCEDURE ValueChanged(REAL _value, ALIAS _obj, INT _row, INT _col) ; zmenila sa hodnota objektu Sec ? IF _obj\HBJ = Sec\HBJ THEN MESSAGE "Zmenil sa objekt Sec = " + %IToStr(_value) ON _FROM_HIP ; zmenila sa hodnota objektu SV.Struktura ? ELSIF _obj\HBJ = SV.Struktura\HBJ THEN IF _row = 1 & _col = 1 THEN MESSAGE "Zmenil sa SV.Struktura^Int = " + %IToStr(_value) ON _FROM_HIP ELSE MESSAGE "V stlpci SV.Struktura[0]^Int sa zmenil riadok = " + %IToStr(_row) ON _FROM_HIP ENDIF ENDIF END ValueChanged ; Inicializačná časť BEGIN ON CHANGE Sec GOTO ValueChanged ON CHANGE SV.Struktura^Int GOTO ValueChanged ON CHANGE SV.Struktura[0]^Int GOTO ValueChanged END
Súvisiace stránky:
0 komentárov