recipe
Funkce
Přístroj recipe (receptura) je jednoduchý editor záznamů standardního databázového
souboru ve formátu dBase III Plus. Umožňuje záznamy v databázi editovat, přidávat,
vkládat i mazat. Obsah každé položky záznamu může být zapsán na přiřazený datový
element nebo je možné položku naplnit vyčíslením nadefinovaného výrazu. Režim
zápisu nebo načítání dat lze řídit i programově.
Syntax
recipe recipe_name;
rem = string;
bubble = string;
timer = timer_name;
owner = owner_name;
position = integer, integer, integer, integer;
win_disable = [ identifier, . . . ];
win_title = string;
access = integer;
tab_select = integer;
send_same_data;
driver_exception = driver_name;
data_file = string;
pane_file = string;
dv_id = string;
font = font_identifier, integer, style_identifier;
record_number = real_expression;
create_record = boolean_expression;
delete_record = boolean_expression;
record_set = real_dataelement;
records_count = real_dataelement;
data_update = boolean_expression;
data_updated = boolean_dataelement;
file_update = boolean_expression;
file_updated = boolean_dataelement;
input_mode = boolean_expression;
receivers = [ identifier, ... ];
item
name = string;
type = identifier;
length = integer;
dec_places = integer;
range_from = real;
range_to = real;
position = integer, integer, integer, integer;
label_pos = integer, integer;
label_text = string;
input = any_expression;
output = any_dataelement;
protect;
end_item;
item
...
end_item;
colors
text = color;
background = color;
ink = color;
paper = color;
selected_ink = color;
selected_paper = color;
top_shadow = color;
bottom_shadow = color;
end_colors;
end_recipe;
Specifické parametry přístroje
- data_file
Jméno databázového souboru (typu DBF), z kterého budou načítána nebo zapisována data.
- pane_file
Jméno souboru, který bude použit jako podklad panelu (viz přístroj panel).
- dv_id
Explicitní určení typu DataView, které bude použito pro zobrazení pane_file.
- font
Parametr určující písmo použité pro textové popisy v přístroji.
- record_number
Číslo záznamu, s kterým bude provedena požadovaná operace.
- create_record
Je-li výraz vyhodnocen jako true a výraz data_update je vyhodnocen jako false, lze přidávat nebo vkládat nové záznamy do receptury.
- delete_record
Je-li výraz vyhodnocen jako true a výrazy data_update a create_record jsou vyhodnoceny jako false, pak je záznam record_number smazán.
- record_set
Výstupní datový element, na který je nastavováno číslo záznamu poslední nastavené receptury.
- records_count
Výstupní datový element, na který je nastavován celkový počet záznamů v souboru.
- data_update
Je-li výraz vyhodnocen jako true, pak:
a) je-li současně input_mode=false, jsou data ze záznamu nastavena na výstupní proměnné item-output
b) je-li input_mode=true, je záznam naplněn daty získanými vyhodnocením výrazů v parametrech item-input.
- data_updated
Výstupní datový element typu boolean, který bude nastaven na hodnotu true po úspěšné operaci data_update.
- file_update
Je-li výraz vyhodnocen jako true, pak:
a) je-li současně input_mode=true, jsou data zapsána do souboru
b) je-li input_mode=false, jsou data čtena ze souboru
- file_updated
Výstupní datový element typu boolean, který bude nastaven na hodnotu true po úspěšné operaci file_update.
- input_mode
Logický výraz, který řídí směr práce s daty. Je–li jeho hodnota true, pak file_update představuje zápis do souboru a data_update představuje načtení hodnot do položek záznamu získaných vyčíslením nadefinovaných výrazů.
Je-li hodnota výrazu false, pak file_update představuje čtení souboru a data_update představuje zápis dat ze záznamu na přiřazené datové elementy
- receivers
Seznam příjemců zprávy.
- item a end_item
Klíčová slova uzavírající vždy všechny parametry týkající se jedné položky.
- name
Jméno databázové položky (může mít maximálně 10 znaků a nesmí začínat číslicí).
- type
Typ databázové položky:
character - řetězec libovolných znaků
numeric - numerická hodnota
logical - hodnota typu boolean
date - datumová položka
- length
Délka (velikost) databázové položky:
character - maximálně 254 znaků
numeric - maximálně 19 znaků (včetně desetinné čárky)
logical - vždy 1 znak
date - vždy 8 znaků
- dec_places
Počet desetinných míst numerické databázové položky. Maximální počet desetinných míst může být vždy jen o dvě menší než je délka položky.
- range_from
Minimální hodnota, kterou lze zadat u numerické položky.
- range_to
Maximální hodnota, kterou lze zadat u numerické položky.
- position
Pozice a rozměry objektu pro zadávání dat.
- label_pos
Pozice textového popisu položky.
- label_text
Textový popis položky.
- input
Hodnotou, získanou vyčíslením tohoto výrazu je naplněna položka aktuálního záznamu. Typ výrazu musí odpovídat typu položky.
- output
Výstupní datový element, na který jsou zapisována data z položky aktuálního záznamu. Typ datového elementu musí odpovídat typu položky.
- protect
Je-li definován, nelze objekt editovat.
- colors
Seznam prvků přístroje, kterým lze nastavit barvy:
text - text
background - pozadí
ink - barva textu v editovacím rámečku
paper - barva pozadí editovacího rámečku
selected_ink - barva textu v editovacím rámečku při zadávání hodnoty
selected_paper - barva pozadí editovacího rámečku při zadávání hodnoty
top_shadow - horní stín editovacího rámečku
bottom_shadow - dolní stín editovacího rámečku
Poznámky
Vstupní mód
- Pokud byl nadefinován výraz file_update a byl vyhodnocen jako true, uloží data z receptury do souboru a nastaví file_update podle výsledku operace se souborem na true nebo na false.
- Vyhodnotí výraz record_number
- Provede se jedna z následujicích akcí:
- Pokud je výraz data_update vyhodnocen jako true, zobrazí záznam record_number, vyhodnotí všechny výrazy input a získané hodnoty zapíše do záznamu, nastaví datový element data_updated na true, zadá požadavek na obeslání uvedených receiverů
- Pokud neplatí předchozí bod a výraz create_record vyhodnocen jako true, pak pokud je record_number menší nebo roven počtu záznamů v databázi receptury, tak na číslo záznámu record_number je vložen a zobrazen nový záznam. Je-li record_number větší než počet záznamů v databázi receptur, přidá jeden nebo record_number - records_count nových záznamů a záznam record_number je zobrazen. Pak nastaví datový element records_count na celkový počet záznamů v databázi receptur a zadá požadavek na obvolání uvedených receiverů.
- Pokud neplatí žádný z předchozích bodů a výraz delete_record je vyhodnocen jako true a současně je record_number menší nebo roven celkovému počtu záznamů v databázi receptur, smaže záznam record_number. Pokud by po smázání tohoto záznamu byla databáze receptur prázdná, přidá jeden záznam. Potom zobrazí záznam record_number nebo record_number - 1, nastaví datový element records_count na celkový počet záznamů v databázi receptur a zadá požadavek na obvolání uvedených receiverů.
- Pokud neplatí žádný z předchozích bodů, je pouze zobrazen záznam record_number.
Výstupní mód
- Pokud byl nadefinován výraz file_update a byl vyhodnocen jako true, načte data ze souboru do receptury a nastaví file_update podle výsledku operace se souborem na true nebo na false.
- Vyhodnotí výraz record_number.
- Provede se jedna z následujicích akcí:
- Pokud je výraz data_update vyhodnocen jako true, zobrazí záznam record_number, nastaví data receptury na výstupní datové elementy, nastaví datový element recipe_set na hodnotu record_number, datový element data_updated na true, zadá požadavek na obeslání uvedených receiverů.
- Viz body b až d u vstupního módu.
Ovládání receptury
Menu okna přístroje má následující položky:
Soubor
- Nový – vytvoří nový soubor typu DBF (beze jména).
Otevřít... – Otevře soubor typu DBF.
Uložit – Uloží nastavená data do souboru typu DBF.
- Uložit jako... – Pomocí dialogového okna souborů dovolí uložit soubor pod libovolným jménem.
Záznam
Další – Nastaví hodnoty receptury na další záznam souboru.
Předchozí – Nastaví hodnoty receptury na předchozí záznam souboru.
- Jdi na... – Otevře dialogové okno, pomocí kterého lze nastavit číslo žádaného záznamu:
- Vyhledat... – Otevře dialogové okno, pomocí kterého lze nalézt záznam podle položky daného jména a podle její hodnoty (i bez ohledu na velikost písmen):
Přidat – Přidá nový záznam.
Vložit – Vloží nový záznam na pozici aktuálního záznamu.
- Smazat – Smaže záznam na aktuální pozici.
Kopírovat data – Je–li tato volba zadána, pak vždy při vytvoření nového záznamu se okopírují hodnoty položek z naposled nastaveného záznamu.
- Výpis – Zobrazí všechny záznamy receptur pomocí databázového DataView.
Receptura
Nastavení – Nastaví data z aktuálního záznamu na definované výstupy.
Načtení – Naplní aktuální záznam hodnotami získanými vyčíslením definovaných výrazů.
Některé parametry mají implicitní nastavení
position = 0, 0, 100, 100;
access = <none>
tab_select = <none>
colors
text = black;
background = lgray;
end_colors;
Příklad
Příklad nastavení parametrů přístroje
recipe Receptura;
owner = Recipe_Sample;
position = 339, 120, 260, 150;
data_file = RECIPE.DBF;
pane_file = RECIPE.PCX;
record_number = RecipeNumber;
create_record = CreateRecipe;
delete_record = DeleteRecipe;
record_set = ActiveRecipe;
records_count = RecipeCount;
data_update = UpdateRecipeData;
data_updated = RecipeDataUpdated;
file_update = UpdateRecipeFile;
file_updated = RecipeFileUpdated;
input_mode = InputRecipeMode;
receivers = V_X1, G_X1, V_X2, G_X2;
item
name = VALUE_X1;
type = numeric;
length = 5;
dec_places = 1;
position = 45, 50, 75, 17;
label_pos = 25, 53;
label_text = 'X1';
input = VR1;
output = OutRealCh1;
end_item;
item
name = COMMENT;
type = character;
length = 1;
position = 70, 115, 165, 17;
label_pos = 25, 117;
label_text = 'Note';
end_item;
end_recipe;
Nativní procedury přístroje
NewFile()
Smaže všechny záznamy v receptuře a připraví ji pro zadávání nových dat.
OpenFile( Filename : string; &Result : boolean )
Načte databázový soubor specifikovaný v parametru Filename do receptury. V parametru Result vrací výsledek operace.
SaveFile( Filename : string; &Result : boolean )
Uloží záznamy receptury do databázového souboru specifikovaného v parametru Filename. V parametru Result vrací výsledek operace.
AppendRecord( &Result : boolean )
Přidá nový záznam. V parametru Result vrací výsledek operace.
InsertRecord( &Result : boolean )
Přidá nový záznam. V parametru Result vrací výsledek operace.
DeleteRecord( &Result : boolean )
Smaže právě aktuální záznam receptury. V parametru Result vrací výsledek operace.
DeleteAllRecords( &Result : boolean )
Smaže všechny záznamy receptury. V parametru Result vrací výsledek operace.
GetRecordNumber( &RecordNumber : number )
Vrací v parametru RecordNumber číslo právě zobrazeného záznamu.
GoPrevRecord( &Result : boolean )
Přechod na předchozí záznam. V parametru Result vrací výsledek operace.
GoNextRecord( &Result : boolean )
Přechod na následující záznam. V parametru Result vrací výsledek operace.
GoToRecord( RecordNumber : number; &Result : boolean )
Přechod na záznam RecordNumber. V parametru Result vrací výsledek operace.
FindRecord( Itemname, ValueStr : string; IgnoreCase, FindSubStr, &Result : boolean; &RecordNumber : number )
Pokud je parametr FindSubStr nastaven na hodnotu false, pak hledá záznam, jehož položka Itemname je rovna ValueStr. Pokud je parametr FindSubStr nastaven na hodnotu true, pak hledá záznam, jehož položka Itemname obsahuje řetězec uvedený v parametru ValueStr. Pokud je parametr IgnoreCase nastaven na hodnotu true, pak ignoruje velikost písmen. Výsledek operace vrací v parametru Result. Pokud je záznam splňující zadané podmínky nalezen, parametr RecordNumber obsahuje číslo nalezeného záznamu.
FindNextRecord( &Result : boolean; &RecordNumber : number )
Hledá další záznam, splňující podmínky zadané pomocí metody FindRecord. Výsledek operace vrací v parametru Result Pokud je záznam splňující zadané podmínky nalezen, parametr RecordNumber obsahuje číslo nalezeného záznamu.
SetRecipe( RecordNumber : real; &Result : boolean )
Nastaví hodnoty ze záznamu receptury RecordNumber na definované výstupy receptury. V parametru Result vrací výsledek operace.
GetRecipe(RecordNumber : number; &Result : boolean )
Vyhodnotí nadefinované vstupní výrazy a vysledky nastaví do záznamu RecordNumber. V parametru Result vrací výsledek operace.
Hide()
Skrytí viditelného přístroje.
Show()
Zobrazení skrytého přístroje.
Minimize()
Minimalizuje přístroj v okně do ikony.
Restore()
Obnoví přístroj (pokud je v okně) z ikony do pracovní plochy.
Událostní procedury přístroje
Přístroj může volat standardní událostní procedury:
OnActivate()
OnMouseDown( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
OnMouseDoubleClick( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
OnMouseUp( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
OnMouseMove( MouseX, MouseY : integer; LeftButton, MiddleButton, RightButton : boolean )
OnSelect()
OnDeselect()
OnShow()
OnHide()
OnNewPosition( RectX, RectY, RectW, RectD : integer )
OnWindowMinimize()
OnWindowMaximize()
OnWindowRestore( WasMinimized, WasMaximized : boolean )
OnWindowClose()
Podrobnější informace k těmto procedurám lze nalézt v kapitole
Programování a procedury.
Specifické událostní procedury přístroje
OnGetRecipe( RecordNumber : real )
Procedure je volána před naplněním hodnot získaných vyčíslením přiřazených výrazů do položek záznamu RecordNumber.
OnSetRecipe( RecordNumber : real )
Procedure je volána před zápisem hodnot z položek záznamu RecordNumber na přiřazené datové elementy.