Język opisu formularzy
Wstęp
Formularze edycyjne reprezentowane są plikami tekstowymi EPR.
Wygląd formularza wyrażony jest poprzez zdefiniowanie komponentów ułożonych na w oknie edycyjnym. Do zdefiniowania położenia poszczególnych elementów stosuje się współrzędne X i Y wyrażone w pikselach. Ponieważ język przewiduje możliwość grupowania elementów współrzędne podaje się względem położenia na najbliższym elemencie grupującym.
Z formularzem powiązany jest zwykle dodatkowy plik akcji ACT, który zawiera implementację zdarzeń wywoływanych na elementach formularza.
Formularz
W opisie składni poszczególnych komponentów stosujemy następującą nomenklaturę:
wielkimi literami podajemy słowa kluczowe. Np.
LABELmałymi literami bez apostrofów podajemy wartości liczbowe. Np.
xoznacza, że w tym miejscu spodziewamy się liczby określającej współrzędną poziomąmałymi literami w apostrofach podajemy wartości tekstowe. Np.
'tekst'w nawiasach klamrowych ujęte są opcjonalne elementy składni. Np.
{MULTILINE}znak pionowej kreski oddziela od siebie alternatywne warianty składni. Np.
{MASK 'wzorzec'|LIMIT size}oznacza, że możliwa jest jedna z podanych składni (nigdy obie naraz).ciąg trzech kropek
...oznacza, że wyżej opisana definicja może występować wielokrotniepozostałe znaki określają interpunkcję, w szczególności przecinki oddzielają od siebie kolejne atrybuty słów kluczowych.
Definicja główna formularza
BEGIN
lista komponentów
ENDReguły języka formularzy
Separatory komponentów
Nie ma żadnego znaku separującego. Komponenty oddziela od siebie dowolna liczba znaków spacji, tabulatora lub nowej linii.
Komentarze
Wartości ujęte w nawiasy klamrowe { } są ignorowane. Podobnie ignorowane są wartości od znaku ; do końca linii.
Arytmetyka wartości liczbowych
Wartości liczbowe mogą być wyrażone w postaci wyrażenia arytmetycznego. Dodawanie +, odejmowanie -, mnożenie * oraz dzielenie /. Mogą być ujęte w nawiasy. Np:
LIST '*' OF (469-29)/44 ON 2, 16, 580, 469-29Łączenie napisów
Napisy (wartości tekstowe) mogą być łączone za pomocą znaku +. Poniższe dwie definicje etykiety są równoważne:
LABEL 'This is Sparta' ON 2,2
LABEL 'This is'
+' Sparta' ON 2,2Zdarzenia
Z edycją formularza związane są zdarzenia, które podzielono na następujące grupy:
SHOW
SHOW nazwa - gdy komponent edycyjny zostaje wyświetlony po raz pierwszy
HELP
HELP nazwa - gdy naciśnięty zostanie przycisk związany z komponentem
ENTER
ENTER nazwa - przy wejściu do edycji pola
CHANGE
CHANGE nazwa - przy zmianie wartości pola
EXIT
EXIT nazwa - przy wyjściu z edycji pola
Elementarne komponenty formularza
LABEL
Stały napis.
LABEL 'tekst' ON x,yZdarzenia: brak
NO
Napis, w którym mogą występować symbole zmiennych.
NO 'wyrażenie' ON x,yZdarzenia: brak
TEXT
Napis, który jest redagowany na podstawie zawartości pola rekordu (często jest to pole tymczasowe). Opcja FLOAT pozwala dynamicznie zwiększać wysokość pola w stosunku do zawartości.
TEXT 'pole' {FLOAT} ON x,y,width,heightZdarzenia: SHOW pole
PANEL
Nieedytowalny panel z zawartością tekstową.
PANEL 'pole' ON x,y,width,heightZdarzenia: SHOW pole
FIELD
Komponent edycji pola tekstowego. Jeśli występuje sekcja MASK 'wzorzec', to wzorzec określa reguły edycyjne. Jeśli występuje sekcja LIMIT size, to oznacza ograniczenie wielkości tekstu pola.
Edytowany tekst jest przewijany w poziomie.
FIELD 'pole' {MASK 'wzorzec'|LIMIT size} ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
DICTIONARY
Komponent edycji pola tekstowego połączonego z przyciskiem “szukaj w KHW”.
DICTIONARY 'pole' ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole | HELP pole
DATE
Komponent edycji pola daty.
DATE 'pole' ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
MONTH
Komponent wyboru miesiąca i roku.
MONTH 'pole' ON x,yZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
NUMBER
Komponent edycji pola liczby stałoprzecinkowej. Atrybut size określa liczbę wszystkich znaków (wliczając w to przecinek, jeśli dotyczy). Opcjonalny atrybut dec określa liczbę miejsc po przecinku.
NUMBER 'pole' MASK size{,dec} ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
SPIN
Komponent edycji pola liczby całkowitej z przyciskami zwiększania / zmniejszania wartości. Sekcja LIMIT określa przedział dozwolonych wartości.
SPIN 'pole' MASK size {LIMIT min{,max}} ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
CHECK
Komponent edycji pola boolowskiego.
CHECK 'pole' MASK 'tekst' ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
RADIO
Komponent wyboru wartości pola z podanej listy. Lista ma budowę wartość|nazwa|..., gdzie wartość jest dozwoloną wartością pola, a nazwa etykietą przycisku wyboru.
RADIO 'pole' OF 3 MASK 'lista' ON x,y,width,heightZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
COMBO
Komponent listy wyboru wartości pola dla podanej listy. Lista ma budowę wartość|nazwa|..., gdzie wartość jest dozwolona wartością pola, a nazwa tekstem wyświetlanym na liście.
COMBO 'pole' MASK 'lista' ON x,y,widthZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
MEMO
Komponent edycji pola tekstowego zajmujący na ekranie dowolną liczbę wierszy. Edytowany tekst jest przewijany w pionie. Opcja MULTILINE pozwala na wprowadzanie znaków ENTER, separujących odrębne wiersze. W treści pola znak ten jest reprezentowany przez sekwencję ESC'/'. Opcja FLOAT pozwala dynamicznie zwiększać wysokość pola w stosunku do zawartości.
MEMO 'pole' {MULTILINE} {FLOAT} ON x,y,width,heightZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
MARKERS
Komponent edycji pola tekstowego zajmujący na ekranie dowolną liczbę wierszy. Edytowany tekst jest przewijany w pionie. W tekście można umieszczać znaczniki (np. separatory podpól).
Dozwolone znaczniki określa parametr lista, który ma budowę: znak|kod{*}|nazwa|.... Pierwszy znak definiuje znak rozpoznawczy znacznika (np. % lub ^). Kolejne elementy tworzą pary kodu znacznika i nazwy znacznika prezentowanej w menu wyboru. Znak gwiazdki stosuje się jeśli znacznik może występować wielokrotnie. Opcja FLOAT pozwala dynamicznie zwiększać wysokość pola w stosunku do zawartości.
MARKERS 'pole' MASK 'lista' {FLOAT} ON x,y,width,heightZdarzenia: SHOW pole | ENTER pole | EXIT pole | CHANGE pole
BUTTON
Przycisk z napisem służący do generowania zdarzeń. Opcjonalny atrybut DEFAULT pozwala stworzyć przycisk, który przyjmuje focus domyślnego przycisku formularza (w szczególności używane jest to do zatwierdzania podformularzy).
BUTTON 'nazwa' MASK 'napis' {DEFAULT} ON x,y,width,heightZdarzenia: SHOW nazwa | HELP nazwa
SPEED
Przycisk z ikoną służący do generowania zdarzeń.
SPEED 'nazwa' MASK 'ikona' ON x,y,width,heightZdarzenia: SHOW nazwa | HELP nazwa
MENU
Komponent menu hierarchicznego, zdefiniowanego poprzez lista. Parametr ten ma budowę: nazwa|napis|... lub |napis|lista||.
MENU 'lista' LABEL 'nazwa' ON x,ylub wariant menu aktywowanego jako ikona:
MENU 'lista' MASK 'IKONA.BMP' ON x,y,width,heightZdarzenia: HELP nazwa
Elementy grupujące
ON
Grupa komponentów. Współrzędne elementów listy komponentów podaje się względem punktu (0,0). Na formularzu współrzędne zostaną przesunięte o wektor (x,y).
ON x,y
BEGIN
lista komponentów
ENDSCROLL
Grupa komponentów umożliwiająca umieszczenie wewnątrz komponentów przekraczających wielkość grupy, co powoduje pojawienie się scrollbara przewijającego zawartość. Współrzędne elementów listy komponentów podaje się względem punktu (0,0). Na formularzu współrzędne zostaną przesunięte o wektor (x,y).
SCROLL ON x,y,width,height
BEGIN
lista komponentów
ENDFRAME
Grupa komponentów otoczona ramką z etykietą. Współrzędne elementów listy komponentów podaje się względem punktu (0,0). Na formularzu współrzędne zostaną przesunięte o wektor (x,y).
FRAME 'etykieta' ON x,y,width,height
BEGIN
lista komponentów
ENDLIST
Definicja listy powtarzalnych elementów. Współrzędne komponentów opisujących element listy podaje się względem punktu (0,0). Symbol zmienna (dowolny znak np. * lub +) używana jest w nazwach pól komponentów. Parametr liczba określa liczbę jednocześnie wyświetlanych elementów listy.
LIST 'zmienna' OF liczba ON x,y,width,height
BEGIN
komponenty elementu listy
ENDTABS
Definicja listy kart o podanych wymiarach. Tytuł karty określa etykieta, a następujący po niej blok zawiera listę komponentów karty. Może występować wiele takich definicji kart.
(uwaga: w implementacji dla Windows wybór kart jest z prawej strony komponentu)
TABS ON x,y,width,height
'etykieta'
BEGIN
lista komponentów
END
...
ENDDYNAMIC
Definicja formularza obejmującego zmienną listę elementów. Bieżąca postać listy określana jest przez pole rekordu. Wartość pola ma postać: etykieta|wystąpienie|{U}|....
DYNAMIC 'pole' OF 'zmienna' ON x,y,width,height
'etykieta'
BEGIN
lista komponentów
END
...
ENDZdarzenia: SHOW pole
FORM
Definicja podformularza uruchamianego przyciskiem “lupa”. Przycisk wyświetlany jest we współrzędnych (icon_x,icon_y), natomiast okno podformularza pojawi się we współrzędnych (form_x,form_y).
FORM 'nazwa' MASK 'napis' {SPEED 'ikona'} ON icon_x,icon_y, form_x, form_y
BEGIN
lista komponentów
END