V programování 4D se stále častěji používajíkolekce. Počínaje verzí 4D v19 je můžete používat k definování obsahu některých objektů rozhraní, a to i prostřednictvím funkce Form. To je velmi užitečné pro obecnou správu rozhraní.
Přidali jsme také vylepšení způsobu používání seznamů. Pojďme se na to podívat podrobněji!
Používání kolekcí a seznamů v rámci objektů formulářů
Vylepšení používání seznamů
Použití seznamů bylo vylepšeno:
– Hierarchické seznamy
– Ovládací prvky karty (první případ použití)
Kolekce lze nyní používat jako odkazy s následujícími objekty:
– Rozbalovací seznamy (známé také jako „vyskakovací seznamy“)
– Combo boxy
– Ovládací prvky s kartami (druhý případ použití)
Hierarchické seznamy a ovládací prvky s ouškem
Vylepšili jsme používání odkazů na seznamy u ovládacích prvků karet a objektů hierarchických seznamů formulářů. Již dříve bylo možné přiřadit odkaz na seznam přímo k objektu formuláře, ale nyní lze tento odkaz získat z atributu objektu. Nyní tedy můžete napsat tento :
// create a new object
$o:=New object
// přidat seznam k tomuto objektu
$o .
listRef:=New list
// then add items, icons, etc. to this list
// (…)
// pak zavolat dialog pomocí tohoto objektu (s obsaženým odkazem na seznam
)
DIALOG ("myForm";$o)
// vymazat seznam, aby nedocházelo k únikům paměti
CLEAR LIST (
$o.listRef)
Hotovo!
Rozbalovací seznamy (vyskakovací okna), Combo boxy a ovládací prvky Tab (opět!)
Hlavní vývoj se týká kolekcí. Možné hodnoty následujících objektů formuláře mohou být založeny na kolekci skalárních hodnot (obvykle alfanumerických), přesněji na objektu, který sám obsahuje kolekci. Proč? Protože je zpravidla nutné znát hodnotu vybranou uživatelem a/nebo vybrat výchozí hodnotu (první karta, třetí položka rozbalovacího seznamu atd.).
Proměnná objektu bude tedy obsahovat následující tři atributy :
– values: kolekce možných hodnot
– index: index vybraného prvku (v rozevíracích seznamech a kartách)
– currentValue: aktuální hodnota (používá se u výběrových polí, kde uživatel může buď vybrat, nebo zadat hodnotu).
příklad
Představte si, že chcete vyvolat dialogové okno, jako je to níže uvedené. Před vyvoláním dialogu však chcete definovat:
- Obsah ovládacího prvku s kartami „Alpha“; „Bravo“; „Charlie“.
- Nadpis (a dát možnost jej zadat)
- Možné volby pro „Stav“
Každý z těchto objektů formuláře bude mít stejný typ přidružené proměnné nebo výrazu: Objekt
// prepare a global object that will be sent to the dialog command
$o:=New object
// prepare the tab control object
$o .oTab:=New object
$o .oTab.values:=New collection("Alpha"; "Bravo"; "Charlie")
$o .oTab.index:=0 // vyberte záložku "Alpha"
// prepare the Title object
$o .oCombo:=New object
$o .oCombo.values:=New collection("Mr"; "Mz"; "Dr")
$o .oCombo.currentValue:=""
// prepare the Status object
// tip : když je index = -1, použije se currentValue jako zástupný znak !
$o .oPop:=New object
$o .oPop.values:=New collection("svobodný"; "ženatý"; "vdova"; "rozvedený")
$o .oPop.currentValue:="Vyberte stav..."
$o .oPop.index:=-1
$win :=Open form window("BLOG")
DIALOG ("BLOG"; $o)
Spusťte tuto metodu a vyplňte dialogové okno…
Po potvrzení dialogu (kliknutí na tlačítko OK) se dozvíte, jaký název a stav byl vybrán nebo zadán.
Zde je výsledná hodnota JSON vráceného objektu:
Závěr .
Použití jediného objektu k okamžitému definování zobrazených a vybraných hodnot je skvělé. Můžete použít kolekce v mnoha objektech najednou a vyhnout se použití procesních nebo meziprocesních polí. Samozřejmě je také dosaženo hlavního cíle: díky tomu bude obecné programování jednodušší než kdykoli předtím.
Jako obvykle vás touto funkcí provede HDI a aktualizována byla také dokumentace.
Užijte si to a přeji vám příjemné programování!