návod na úpravu skriptů, naleznete zde

Transkript

návod na úpravu skriptů, naleznete zde
ZMĚNY VE SKRIPTOVÁNÍ
MEZI VERZEMI 14.51(XE2) A VERZEMI
PŘEDCHOZÍMI (14.02 A NIŽŠÍMI)
1.
Obsah
1.
OBSAH .......................................................................................................................................... 2
2.
ZMĚNY VE SKRIPTOVÁNÍ OD VERZE ABRA GX 14.51 ........................................................... 3
2.1
ZASTARALÉ SKRIPTY Z PŘEDCHOZÍCH VERZÍ ................................................................................... 3
2.2
ZAVEDENÍ UNICODE - ŘETĚZCŮ ........................................................................................................... 3
2.2.1
KÓDOVÁNÍ UNICODE ........................................................................................................................... 3
2.2.2
ODSTRANĚNÍ TYPU ANSISTRING ....................................................................................................... 4
3.
ATRIBUTY PRVKŮ SKRIPTOVÁNÍ ............................................................................................. 6
3.1
DEPRECATED .......................................................................................................................................... 6
3.2
ÚPRAVA SKRIPTŮ ZA POMOCI NOVÝCH ATRIBUTŮ ........................................................................... 6
4.
NÁSTROJ PRO ZJIŠTĚNÍ ZMĚN DEFINIC SKRIPTOVÁNÍ MEZI VERZEMI (DEFSCOMP) ..... 7
5.
DÍLČÍ ZMĚNY VE SKRIPTOVÁNÍ ................................................................................................ 8
5.1
PŘETYPOVÁNÍ ......................................................................................................................................... 8
5.2
TŘÍDA TENCODING ................................................................................................................................. 8
5.3
FUNKCE ENCODEBASE64, DECODEBASE64 ....................................................................................... 9
5.4
ZMĚNY VE STREAMECH ...................................................................................................................... 10
5.5
ZMĚNY V TISKU A EXPORTU ............................................................................................................... 10
5.5.1
FUNKCE PRO TISK A EXPORT .......................................................................................................... 10
5.5.2
UKONČENÍ PODPORY FORMÁTU ARP ............................................................................................. 11
5.6
ODSTRANĚNÍ TCUSTOM- KOMPONENT ............................................................................................ 11
5.7
PROPERTY DATAFIELD A DATASOURCE ........................................................................................... 11
5.8
TŘÍDA TCOMBOBOX ............................................................................................................................. 11
5.9
TŘÍDA TLABEL JAKO NÁHRADA ZA TDBTEXT A TNXDBTEXT .......................................................... 11
5.10
VÝČTOVÉ TYPY ..................................................................................................................................... 12
5.11
POUŽITÍ FUNKCE NXGETSITEAPPFORM ........................................................................................... 12
5.12
POUŽITÍ TŘÍDY TZIPFILE (NÁHRADA ZA TZIPMASTER19) ................................................................ 12
5.13
ZRUŠENÍ FUNKCE NXFINDCHILDCONTROLBYCLASS ...................................................................... 13
5.14
REST WEBOVÉ SLUŽBY ....................................................................................................................... 13
5.15
METODA SHOW TŘÍDY TCONTROL A JEJÍCH POTOMKŮ ................................................................. 16
5.16
ZMĚNY V METODÁCH PRO KOMUNIKACI S EXTERNÍMI KNIHOVNAMI DLL ................................... 16
5.17
ZMĚNA POUŽITÍ ENCODINGU V TŘÍDĚ TNXSCRIPTINGXMLWRAPPER .......................................... 16
5.18
POZNÁMKY K PRÁCI S FORMULÁŘI VE SKRIPTOVÁNÍ ..................................................................... 17
5.19
PROPERTA FONT.COLOR V ABRA-VZHLEDU .................................................................................... 17
6.
BINÁRNÍ DATA VS. STRING ..................................................................................................... 18
7.
PŘÍLOHA Č. 1: PŘEHLED ODSTRANĚNÝCH POLOŽEK K VERZI 14.51.08 ......................... 19
Stránka 2 z 22
2.
Změny ve skriptování od verze ABRA Gx 14.51
Změna prostředí, kódování, komponent atd., k níž došlo v této verzi v rámci přechodu na nové
vývojové prostředí RAD studio XE2 (z původního Delphi7), se dotýká i skriptování. Je třeba převést
všechny používané balíčky skriptů, tj. zkontrolovat je, dle potřeby upravit a nově zkompilovat.
Tento dokument se věnuje popisu nejčastějších obtíží při přechodu skriptů na novou verzi.
2.1
Zastaralé skripty z předchozích verzí
Došlo ke zcela zásadním změnám v definicích různých prvků skriptování a způsob jejich použití
se v určitých případech může velice podstatně lišit od předchozích verzí ABRA Gx. Hrozí tedy
nebezpečí, že stávající skripty by bez řádné kontroly a kompilace na nové verzi 14.51 (a novějších)
mohly mít fatální následky pro uživatele (nemožnost použití funkcí, chybové hlášky, hrozba porušení
konzistence dat, atd.). Není proto možné tyto původní skripty ze starších verzí ponechat funkční do
verze 14.51.
Všechny původní skripty ze starších verzí ABRA Gx (před verzí 14.51), jsou při procesu update
automaticky nastaveny jako „zastaralé“ a je zamezeno jejich spuštění. Při pokusu o spuštění
zastaralých skriptů se objevuje chyba „Verze kompilace je zastaralá. Balíček již není platný a je třeba
jej znovu zkompilovat, aby byl funkční“. Pokud je zastaralý skript spojen s agendou, objevuje se při
otevření takové skriptované agendy chyba „Tohoto zástupce již nelze spustit“.
Otázka: Jak správně ošetřit zastaralý skript, aby byl zase funkční?
Každý existující skript zkompilovaný pod staršími verzemi ABRA Gx je třeba znovu zkompilovat pod
novou verzí a ověřit jeho funkčnost. Kompilace odhalí většinu problémů, které plynou z rozdílů
v definicích skriptování mezi verzemi.
Na některé další možné problémy, které kompilace neodhalí, upozorňujeme v 5. kapitole. Po úspěšné
kompilaci zastaralého skriptu tedy doporučujeme ověřit jeho funkčnost právě s ohledem na změny
zmíněné v této kapitole.
Tento proces může být náročnější na čas a může vyžadovat odborný zásah. Proto také doporučujeme
vyhradit na proces přechodu na verzi 14.51 (a novější) z verze 13.01 (a starší) dostatek času a
nejdříve skripty vyzkoušet na testovací verzi ABRA Gx před ostrým nasazením do produkčního
systému.
Otázka: Jak zjistím, jaké skripty v agendě Balíčky skriptů jsou zastaralé?
Po update na verzi 14.51 (a novější) jsou všechny stávající skripty zastaralé. Na řádcích Balíčků
skriptů (záložka Detail – sub-záložka Projekt) je nový příznak „Verze kompilace skriptu“, který nabývá
hodnot „Zastaralá“ a „Aktuální“. Za tyto hodnoty lze omezovat na záložce Omezení – Řádky – Aktuální
verze kompilace skriptu.
2.2
Zavedení Unicode - řetězců
2.2.1
Kódování Unicode
V Abra Gx je od verze 14.51 implementováno kódování řetězců (typ string) Unicode, které umožňuje
používat znaky různých abeced, symboly apod. současně. Oproti Ansi-kódování z předchozích verzí
Abra Gx, ve kterém je znak zakódován na 1 Bytu, je kódování Unicode dvoubytové.
Nyní tedy platí:



funkce Length pro zjištění délky řetězce vrátí počet znaků, ale NE počet Bytů, ve kterých je
řetězec uložen
funkce ByteLength počet Bytů, ve kterých je řetězec uložen
funkce StringElementSize vrátí počet Bytů, ve kterých je uložen (zakódován) 1 znak řetězce
Stránka 3 z 22

pro převody řetězců mezi různými typy kódování slouží třída TEncoding (viz kapitolu 5.1)
Uvedené změny s sebou přinášejí nutnost změny některých programovacích postupů. Nekorektní práci
s řetězci neodhalí překladač a v lepším případě se projeví chybou za běhu programu.
2.2.2
Odstranění typu AnsiString
Skriptování v Abra Gx od verze 14.51 již neobsahuje typ AnsiString. Z toho plyne také změna
v deklaracích některých funkcí a procedur, které s tímto typem pracovaly a které nyní pracují pouze
s typem string (tedy s dvoubytovým Unicodovým řetězcem). To se týká např. funkcí ReverseString(),
LeftStr(), RightStr() a MidStr().
Pro zachování kompatibility byly ve skriptování funkce, které zpracovávaly AnsiStringy, zatím
ponechány a označeny atributem Deprecated. Tyto funkce (zpravidla s prefixem Ansi v názvu) interně
volají své ekvivalenty bez tohoto prefixu, pracující s Unicodovými řetězci.
Výjimka ve třídě CfxString:
Odstranění typu Ansistring nesouvisí s class-funkcemi a procedurami třídy CfxString, které zajišťují
převody dat mezi textovými řetězci a bloky paměti. Třída CfxString nyní obsahuje metody dvojího typu:


metody se sufixem A:
kopírují řetězce po převodu na AnsiString na určené místo v paměti (např. StrPCopyA()), resp.
AnsiStringový obsah paměti převedou do Unicodového řetězce (např. PStrCopyA())
metody se sufixem W:
kopírují Unicodové řetězce na určené místo v paměti (např. StrPCopyW()), resp. obsah paměti
převedou do Unicodového řetězce (např. PStrCopyW())
Rozdíly v práci s řetězci ukazují následující příklady:
Původní chování
Nové chování
Zjištění délky řetězce ve znacích, resp. v Bytech
var
s: string;
begin
var
s: string;
begin
s := ‘abc‘;
s := ‘abc‘;
// zobrazí se číslo ‘3‘:
// zobrazí se číslo ‘3‘ (znaky):
ShowMessage(IntToStr(Length(s)));
ShowMessage(IntToStr(Length(s));
// funkce ByteLength ve skriptingu nebyla zavedena
// zobrazí číslo ‘6‘ (Bytů):
// počet znaků odpovídá počtu Bytů
ShowMessage(IntToStr(ByteLength(s)));
end;
end;
Přesun dat procedurou Move
var
s1, s2: string;
p1, p2: pointer;
begin
var
s1, s2: string;
p1, p2: pointer;
begin
s1 := 'abc';
s1 := 'abc';
s2 := '12345';
s2 := '12345';
p1 := @s1;
p1 := @s1;
p2 := @s2;
p2 := @s2;
Stránka 4 z 22
// přesun obsahu řetězce s1 do s2
// CHYBNÝ (neúplný) přesun obsahu řetězce s1 do s2
Move(p1, p2, Length(s1));
Move(p1, p2, Length(1));
// zobrazí se 'abc45'
// zobrazí se 'ab345'
ShowMessage(s2);
ShowMessage(s2);
end;
// korektní přesun obsahu řetězce s1 do s2
Move(p1, p2, ByteLength(s1));
// zobrazí se 'abc45'
ShowMessage(s2);
end;
Zápis do a čtení ze streamu
var
s1, s2: string;
var
s1, s2: string;
p1, p2: pointer;
p1, p2: pointer;
mStream: TStream;
mStream: TStream;
begin
begin
mStream := TMemoryStream.Create;
mStream := TMemoryStream.Create;
try
try
s1 := 'abc';
s1 := 'abc';
s2 := '12345';
s2 := '12345';
p1 := @s1;
p1 := @s1;
p2 := @s2;
p2 := @s2;
// zápis obsahu řetězce s1 do streamu
// CHYBNÝ (neúplný) zápis obsahu řetězce s1 do streamu
mStream.Write(p1, Length(s1));
mStream.Write(p1, Length(s1));
mStream.Position := 0;
mStream.Position := 0;
mStream.Read(p2, Length(s1));
mStream.Read(p2, Length(s1));
// zobrazí se 'abc45'
// zobrazí se 'ab345'
ShowMessage(s2);
ShowMessage(s2);
finally
mStream.Free;
end;
end;
// korektní zápis obsahu řetězce s1 do streamu
mStream.Write(p1, ByteLength(s1));
mStream.Position := 0;
mStream.Read(p2, ByteLength(s1));
// zobrazí se 'abc45'
ShowMessage(s2);
finally
mStream.Free;
end;
end;
Stránka 5 z 22
3.
Atributy prvků skriptování
Pro lepší podporu životního cyklu prvků zveřejněných v definicích skriptování byly zavedeny nové
atributy, které lze použít u libovolného prvku skriptování (třída, funkce, atp.). Cílem této úpravy je dát
uživatelům, kteří pracují se skripty dostatek času na přípravu na budoucí změny.
Používané atributy Deprecated upozorňují na zastaralé prvky skriptování. Označení jedním z těchto
atributů upozorňuje na to, že daný prvek je možné zatím ve skriptování používat, ale zároveň je třeba
počítat s tím, že bude v některé z budoucích verzí úplně vyřazen. V upozornění je doporučena i
náhrada daného prvku, která zpravidla také zjednodušuje práci oproti předchozím verzím.
Místa, ve kterých se informace o přiřazení atributů zobrazují, jsou následující:
 ClassExplorer v agendě Balíčky skriptů – zobrazuje se červený text „Položka je zastaralá a je
určena ke zrušení. Doporucená náhrada: XXX (platí od verze xx.xx.x)“
 Nástroj DefsComp (viz kapitolu 4) – u jednotlivých prvků se zobrazuje přímo daný atribut.
3.1
Deprecated
Atributem Deprecated jsou zpravidla označené dílčí prvky skriptování (např. funkce, metody a property
tříd apod.), se kterými se do budoucnosti nepočítá ani v kódu Abry, protože byly nahrazeny
alternativním kódem.
3.2
Úprava skriptů za pomoci nových atributů
Cílem těchto nových atributů skriptování je, aby správce skriptů mohl v dostatečném časovém
předstihu prvky skriptování nahradit jejich aktuálními zveřejněnými verzemi. Aby takováto revize mohla
proběhnout, je umožněno upravit chování skriptování ABRA Gx k těmto prvkům označeným atributy
„Deprecated“ nastavením v konfiguračním souboru ABRA Gx.
POZOR!!! – jakákoliv změna parametrů popsaných níže v Nexus.CFG v sekci [Scripting]
automaticky znamená nutnost provedení kompilace u všech skriptů podobně jako po update na
verzi 14.51!!! Důrazně varujeme, že změny parametru HideDeprecated na jiné než defaultní
hodnoty nejsou určeny pro ostrou verzi, která se používá v provozu u uživatele!!! Parametry lze
změnit na testovací verzi a upravené a otestované skripty vyexportovat do ostré verze.
Konfigurace v souboru NEXUS.CFG umožňuje skrýt prvky označené určitým atributem tak, že tento
prvek není při startu ABRA Gx do skriptování zaregistrován a není tedy možné jej používat, tj. použití
takového prvku skriptování vyvolá nefunkčnost skriptu nebo chybu kompilace a lze ho tedy s pomocí
validačních hlášek odstranit.
Nastavení skrývání prvků s atributy se provádí v sekci souboru NEXUS.CFG [Scripting]:
[Scripting]
HideDeprecated =1
Hodnota 1 znamená zapnutí skrývání (dané prvky se do skriptování neregistrují).
Hodnota 0 znamená vypnutí (dané prvky se do skriptování registrují).
Defaultní hodnoty:
HideDeprecated=0 (skrývání vypnuto – Deprecated prvky lze ve skriptování použít)
Stránka 6 z 22
4.
Nástroj pro zjištění změn definic skriptování mezi verzemi (DefsComp)
Pro lepší orientaci ve změnách skriptování bude generován vždy s novou verzí soubor s definicemi
skriptování dané verze s příponou ADC (ABRA Definition Compare). Pro verzi 13.01.12 byl
vygenerován soubor 13.01.12.adc. Další definiční soubor bude vygenerován pro certifikovanou
legislativní verzi 14.01.xx. Pro verze 14.51.xx budou s každou vydanou verzí generovány soubory
14.51.xx.adc. Tyto soubory budou dostupné v adresáři Doc\DefsComp instalace ABRA Gx.
Nástroj DefsComp.exe se nachází v instalačním adresáři ABRA Gx. Pro jeho správnou funkci je tedy
třeba mít k dispozici dva soubory ADC z různých verzí ABRA Gx k vlastnímu porovnání a
nainstalovaný freewarový SW WinMerge (http://winmerge.org/). Po spuštění DefsComp.exe se
vyberou definiční soubory verzí, které se mají porovnávat a stiskem tlačítka Další se provede výpočet
porovnání definic (může trvat i déle jak 15 sec.).
Objeví se výsledné okno porovnání definic, ve kterém je možné zobrazit nové, změněné, odstraněné a
nezměněné definice. Omezit seznam lze pomocí pole „Like podmínka“.
Pro zobrazení detailu změn stačí stisk CTRL-ENTER (nebo tlačítko „Porovnání ve WinMerge“,
případně dvojklik myší na daném řádku) na zvolené definici, který změny zobrazí v aplikaci WinMerge.
Dále je možné tlačítky „Přehled Deprecated položek“ a „Přehled odstraněných položek“ uložit do Htmlsouboru příslušný přehled.
V příloze č. 1 s názvem „Skriptovani_zmeny_D7_XE_priloha_1“ navíc uvádíme přehled
odstraněných definic vybraných tříd k verzi 14.51.06 s jejich doporučenými náhradami. Kompletní
přehled odstraněných položek k verzi 14.51.06 pak obsahuje v příloha č. 2 s názvem
„Skriptovani_zmeny_D7_XE_priloha_2“.
Obrázek – Nástroj DefsComp.exe
Stránka 7 z 22
5.
Dílčí změny ve skriptování
V této kapitole budou popsány dílčí změny konkrétních prvků skriptování v ABRA Gx.
5.1
Přetypování
Přetypování objektů ve skriptování má následující vlastnosti:


Syntaxe: <<cílová třída>>(<<zdrojová třída>>)
Při tomto zápisu je kontrolována kompatibilita cílové třídy se zdrojovou tak, jako je tomu u
přetypování s operátorem AS v Delphi-kódu.
Pokud tedy cílová třída není se zdrojovou kompatibilní a nelze přetypování provést, je vyvolána
výjimka „Invalid classes type cast <<zdrojová třída>> to <<cílová třída>>“
Samotný operátor AS ve skriptování k dispozici není.
Kompatibilitu tříd lze otestovat pomocí operátoru IS, který naopak ve skriptování k dispozici je.
Příklad
procedure Test(APanel: TPanel);
var
mControl: TControl;
mWinControl: TWinControl;
begin
// př. 1:
// - nalezení komponenty edName typu TEdit na panelu APanel
mControl := NxFindChildControl(APanel, ‘edName‘);
// - přetypování: TEdit je potomkem třídy TWinContol ==> přetypování proběhne v pořádku
mWinControl := TWinControl(mControl);
// př. 2:
// - nalezení komponenty lblName typu TLabel na panelu APanel
mControl := NxFindChildControl(APanel, ‘lblName‘);
// - přetypování: TLabel není potomkem třídy TWinContol ==> přetypování vyvolá výjimku
mWinControl := TWinControl(mControl);
end;
5.2
Třída TEncoding
Třída Encoding slouží především k převádění dat mezi různými kódovými stránkami a nahrazuje tak
zrušené samostatné funkce pro převody kódování řetězců, jako byly např. NxTranslateText a
NxRemoveDiacritics.



Třída také umožňuje převod řetězců na pole Bytů a naopak s možností definovat zdrojové a
cílové kódování.
Pro odstranění diakritiky z textového řetězce třída obsahuje metodu RemoveDiacritics.
Třída podporuje práci s kódovými stránkami, které jsou vyjádřené následujícími konstantami:
o Encoding_cp1250: Integer = 1250 (Win1250 - Ansi)
o Encoding_cp852: Integer = 852 (IBM-Latin2)
o Encoding_cpASCII: Integer = 20127
o Encoding_cpISO_8859_2: Integer = 28592 (ISO-Latin2)
Stránka 8 z 22
o
o
o
o
Encoding_cpKamenicky: Integer = 895
Encoding_cpMacIntosh: Integer = 10029
Encoding_cpUTF_8: Integer = 65001
Encoding_cpUTF_16: Integer = 1200 (Unicode)
Příklady použití
// příklad převodu kódování z Win1250 (Ansi) do Unicode
function ExampleConvertEncoding(AAnsiBytes: TBytes): string;
var
mUnicodeBytes: TBytes;
begin
mUnicodeBytes :=
TEncoding.Convert(AAnsiBytes, Encoding_cp1250, Encoding_cpUTF_16);
Result := TEncoding.Unicode.GetString(mUnicodeBytes);
end;
// příklad odstranění diakritiky
function ExampleRemoveDiacrits(AValue: String): String;
begin
Result := TEncoding.RemoveDiacritics(AValue);
end;
// příklad převodu z řetězce na pole Bytů
function ExampleGetBytesFromString(AValue:String): TBytes;
begin
Result := TEncoding.Unicode.GetBytes(AValue);
end;
5.3
Funkce EncodeBase64, DecodeBase64
Tyto funkce nyní pracují s polem Bytů (TBytes) takto:
function EncodeBase64(const Value: TBytes): String;
function DecodeBase64(const Value: String): TBytes;
Původní použití
Nové použití
{Encode64}
{Encode64}
function Encode64(aValue:String):String;
function Encode64(aValue: String):String;
begin
var
Result := EncodeBase64(aValue);
end;
mBytes: TBytes;
begin
mBytes := TEncoding.Unicode.GetBytes(aValue);
Result := EncodeBase64(aValue);
Stránka 9 z 22
end;
{Decode64}
{Decode64}
function Decode64(aValue:String):String;
function Decode64(aValue:String):String;
begin
var
Result:= DecodeBase64(aValue);
end;
mBytes: TBytes;
begin
mBytes := DecodeBase64(aValue);
Result := TEncoding.Unicode.GetString(mBytes);
end;
5.4
Změny ve Streamech

TStringStream byl odstraněn. Pro ukládání / načtení řetězců do / ze souborů je potřeba použít
funkce přímo pro práci se soubory nebo TMemoryStream a TEncoding.
U TMemoryStream byla zrušena properta Memory. Pro čtení a zápis se používají funkce Read()
Write(). Případně je možné využít nové funkce GetBytes() a SetBytes().
TMapStream byl zabalen do nové obálky.
TFileStream byl zabalen do nové obálky.
THandleStream byl odstraněn.




5.5
Změny v Tisku a Exportu
5.5.1
Funkce pro tisk a export
Tyto původní funkce pro tisk a export byly označené jako deprecated:





NxGetFilterTextFromPrintExportKind
NxGetFileExtensionFromPrintExportKind
NxPrintByIDs
NxExportByIDs
NxB2BExportByIDs
Dále byla odstraněna třída CFxPrintToFile a její funkce byly převedeny do nové třídy
CFxReportManager, která navíc obsahuje uvedené funkce označené jako deprecated a některé další:












PrintByIDsToTempFile
PrintByIDsToBytes
PrintIDsToSignedPDFToBytes
PrintByIDs
PrintByIDsWithParentForm
PrintByIDsToTempFile
PrintByIDsToBytes
PrintByIDsToSignedPDF
PrintByIDsToSignedPDFWithParentForm
PrintByIDsToSignedPDFToBytes
ExportByIDs
B2BExportByIDs
Stránka 10 z 22


5.5.2
GetFilterTextFromPrintExportKind
GetFileExtensionFromPrintExportKind
Ukončení podpory formátu ARP
ABRA Gx od verze 14.51 přestala podporovat formát pro tisk do souboru ARP. Při tisku pomocí
skriptování jej tedy již nelze používat ani pro tisk do souboru, ani pro náhled na obrazovku.
5.6
Odstranění TCustom- komponent
Z definic skriptování byly odstraněny komponenty TCustom. Tím došlo k celkovému zjednodušení
hierarchie tříd zveřejněných ve skriptingu, ale také ke změnám dědičnosti.
Místo Custom-tříd je třeba používat jejich potomky, kteří zveřejňují vlastnosti své i svého předka.
Příklad změn v dědičnosti komponenty TreeView (posloupnost od potomka k předkům):
Původní hierarchie
Nová hierarchie
TNxTreeView
TTreeView
TTreeView
TWinControl
TCustomTreeView
TWinControl
V novém modelu komponenta TTreeView plně nahrazuje původní TNxTreeView..
5.7
Property DataField a DataSource



5.8
Třída TComboBox

5.9
Původní komponenty s napojením na dataset, které měly v názvu třídy „DB“ (např. TDBEdit,
TNxDBEdit), nahrazujeme jednou novou společnou komponentou, která už v názvu „DB“ nemá
(např. TEdit) a používá jak ve spojení s datasetem, tak bez něj.
Napojení na dataset se realizuje prostřednictvím propert DataField a DataSource, jako tomu
bylo u původních DB-komponent.
Použití původních DB-komponent je tedy třeba nahradit komponentami novými.
Properta EnableValues je read only, na true ji nastavuje hodnota Values.Count > 0 (nelze ji tedy
měnit přiřazením)
Třída Tlabel jako náhrada za TDBText a TNxDBText
Třída TLabel kromě svého původního použití nově také nahrazuje dříve používané komponenty s
obdobnými vlastnostmi TDBText a TNxDBText. Tato náhrada plyne ze změn v kódu Abry. Při
nahrazování těchto komponent je třeba vést v patrnosti následující skutečnosti:

TLabel je potomkem TControl a nelze jej tedy přetypovat na TWincontrol, což bylo u TDBText a
TNxDBText možné, protože obě tyto komponenty byly potomky třídy TWinControl.

Při pokusu o přetypování proměnné, která obsahuje TLabel, na TWinControl, je za běhu
programu ohlášena chyba.
Stránka 11 z 22
5.10
Výčtové typy
Od verze 14.51 dochází ke změnám v některých výčtových typech, resp. v pozicích některých jejich
členů. Pokud skript pracuje s pozicí členu ve výčtu, jeho překlad takovou změnu neodhalí a je třeba
jej zkontrolovat.
Dále uvádíme výčtové typy, u kterých k uvedeným změnám došlo (konkrétní rozdíly je možné zobrazit
v nástroji DefsComp):



5.11
TNxPOSExtraParams – už ve verzi 13.01 se lišil výčet v kódu ABRA Gx od definice tohoto typu
ve skriptování, a to nejen položkami přidávanými na konec výčtu, ale i položkou
pexMacroCardBegin vloženou dovnitř výčtu
TSynStateFlag – na předposlední místo výčtu přibyl člen sfInsideRedo
TFieldType – výčet byl rozšířen o nové členy. Pozor, pokud kód skriptu detekuje přítomnost
fieldů různých typů v datasetu, je také třeba počítat s tím, že typy definované ve skriptech pod
Abrou do verze 14.01 (resp. 14.02) jako ftString a ftMemo, jsou nyní typu ftWideString a
ftWideMemo. Pro zachován kompatibility skriptu je tedy třeba příslušnou detekci o tyto typy
rozšířit.
Použití funkce NxGetSiteAppForm
Funkci NxGetSiteAppForm nelze použít v háčku FormCreate_Hook, protože v metodě FormCreate
není k dispozici SiteAppForm. Použití funkce v tomto místě končí výjimkou.
5.12
Použití třídy TZipFile (náhrada za TZipMaster19)
Původní použití
Nové použití
Příklad vytvoření nového archivu s jedním zkomprimovaným souborem:
var
mZip: TZipMaster19;
begin
mZip := TZipMaster19.Create(nil);
try
var
mZip: TZipFile;
begin
mZip := TZipFile.Create;
try
mZip.ZipFileName := '<<<zipfilearchiv>>>';
mZip.Open('<<<zipfilearchiv>>>', zfomWrite);
mZip.AddFile('<<<filename>>>');
mZip.AddFile('<<<filename>>>');
mZip.AddFile('<<<filename>>>');
mZip.Add;
finally
mZip.Free;
end;
mZip.AddFile('<<<filename>>>');
finally
mZip.Free; // provede uložení na disk
end;
end;
end;
Příklad rozbalení archivu do zvoleného adresáře:
var
mZip: TZipMaster19;
begin
mZip := TZipMaster19.Create(nil);
var
mZip: TZipFile;
begin
// Extract zip
Stránka 12 z 22
try
mZip := TZipFile.Create;
mZip.ZipFileName := '<<<zipfilearchiv>>>';
try
mZip.ExtrBaseDir := '<<<extractpath>>>';
mZip.Open('<<<zipfilearchiv>>>', zfomRead);
mZip.Extract;
mZip.ExtractAll('<<<extractpath>>>');
finally
finally
mZip.Free;
end;
end;
end;
5.13
mZip.Free;
end;
Zrušení funkce NxFindChildControlByClass
Funkce NxFindChildControlByClass byla používána k vyhledání nepojmenované komponenty podle její
třídy. Nyní lze komponentu vyhledávat pouze podle jména funkcí NxFindChildControl a je tedy nutné
mít komponenty pojmenované.
5.14
REST webové služby
Definice volané skriptovací funkce se nezměnily.
procedure GET(Self: TNxWebServicesHelper; ARequest: TNxHTTPRequest; AResponse:
TNxHTTPResponse);
Změna nastala v objektech Request a Response. Properta Response.Content.Content je typu TBytes
(dříve byla typu string).
Vzorový příklad použití REST implementace
procedure GET(Self: TNxWebServicesHelper; ARequest: TNxHTTPRequest; AResponse: TNxHTTPResponse);
var
mFileName: String;
begin
try
if uppercase(Arequest.Path) = '/PDF' then begin
AResponse.Content.Content :=getPDF(self.Context);
AResponse.Content.ContentType := 'Application/pdf';
AResponse.Content.ContentDisposition := '';
end else if uppercase(Arequest.Path) = '/ORDER' then begin
AResponse.Content.Content := getOrderInfo(Self.ObjectSpace, ARequest.Arguments);
Aresponse.Content.ContentType := 'text/html';
end;
except
AResponse.Content.Content := TEncoding.ANSI.GetBytes('<B>!! Chyba !! </B> <BR>'+ExceptionMessage);
Aresponse.Content.ContentType := 'text/html';
end;
end;
Stránka 13 z 22
function getOrderInfo(AObjectSpace: TNxCustomObjectSpace; Arguments: String): TBytes;
var
mArgs, mRes: TStrings;
mID: String;
mOrder: TNxCustombusinessObject;
mOrderRows: TNxCustomBusinessMonikerCollection;
i: Integer;
begin
mArgs := TStringList.Create;
try
mArgs.Delimiter := ',';
mArgs.DelimitedText := Arguments;
mID := mArgs.Values['ID'];
if not NxIsEmptyOID(mID) then begin
mOrder := AObjectSpace.CreateObject(Class_ReceivedOrder);
mRes := TStringList.Create;
try
if not mOrder.Test(mID) then begin
Result := TEncoding.ANSI.GetBytes('<B>Špatné číslo objednávky</B>');
end else begin
mOrder.Load(mID, nil);
mOrderRows := mOrder.GetLoadedCollectionMonikerForFieldCode(mOrder.GetFieldCode('Rows'));
mRes.Add('<table border="1">');
mRes.Add(
'<tr><th>Položka</th><th>Počet</th><th>Jednotka</th><th>Celková cena</th><th>DPH</th>‘ +
'<th>Datum dodání</th></tr>');
for i := 0 to mOrderrows.Count - 1 do
begin
mRes.Add('<tr><td>'+NxEvalObjectExprAsString(mOrderRows.BusinessObject[i], 'StoreCard_ID.Name')+'</td>'+
'<td>'+FloatTostr(mOrderRows.BusinessObject[i].GetFieldValueAsFloat('Quantity'))+'</td>'+
'<td>'+mOrderRows.BusinessObject[i].GetFieldValueAsString('QUnit')+'</td>'+
'<td>'+FloatTostr(mOrderRows.BusinessObject[i].GetFieldValueAsFloat('TAmount'))+'</td>'+
'<td>'+FloatTostr(mOrderRows.BusinessObject[i].GetFieldValueAsFloat('VatRate'))+'</td>'+
'<td>'+DateTostr(mOrderRows.BusinessObject[i].GetFieldValueAsFloat('DeliveryDate$DATE'))+'</td></tr>');
end;
mRes.Add('</table>');
Result := TEncoding.ANSI.GetBytes(mRes.text);
end;
finally
mOrder.Free;
Stránka 14 z 22
mRes.Free;
end;
end else
result := TEncoding.ANSI.GetBytes('<B>Musíte zadat číslo objednávky</B>');
finally
mArgs.Free;
end;
end;
function getPdf(AContext: TNxContext): TBytes;
begin
Result := PrintIssuedInvoice(AContext, '2J00000101' , 'W400000001'); //Faktura vydana
end;
function PrintIssuedInvoice(AContext: TNxContext; ADocumentID: String; AReportID: String): TBytes;
var
mOLEApp: Variant;
mCommand: Variant;
mCond: Variant;
mTempDir: String;
mIDs: TStrings;
mFileName: String;
begin
mFileName := CFxGUID.CreateNew + '.pdf';
mIDs := TStringList.Create;
try
mIDs.Add(ADocumentID);
mTempDir := NxGetTempDir;
NxPrintByIDs(AContext, mIDs, '40SBPEINEFD13ACM03KIU0CLP4', AReportID, rtoFile,
pekPDF, mTempDir, mFileName);
Result := Get_PDF(NxAddSlash(mTempDir) + mFileName);
DeleteFile(mTempDir + mFileName);
finally
mIDs.Free;
end;
end;
function Get_PDF(AFileNAme: String):TBytes;
var
mFS: TFileStream;
mSS: TMemoryStream;
Stránka 15 z 22
begin
mFS := TFileStream.Create(AFileName, fmOpenRead);
try
mFS.Seek(0, soFromBeginning);
mSS := TMemoryStream.Create;
try
mSS.CopyFrom(mFS, mFS.Size);
Result := mSS.GetBytes;
finally
mSS.Free;
end;
finally
mFS.Free;
end;
end;
begin
end.
5.15
Metoda Show třídy TControl a jejích potomků
Pro „zviditelnění“ vizuální komponenty na formuláři slouží jednak nastavení property Visible na True, a
kromě toho také volání metody Show.
Na rozdíl od Delphi D7 však v Delphi XE2 volání Show způsobí také přepnutí na záložku
PageControlu, na které se daná komponenta nachází. Pokud se tedy např. komponenta nachází na
záložce TabSheet2 a v okamžiku volání Show je aktivní záložka TabSheet1, po vyvolání Show bude
aktivní TabSheet2. Pod D7 zůstávala aktivní záložka TabSheet1.
Doporučujeme proto pro nastavení viditelnosti používat funkci NxSetVisible().
5.16
Změny v metodách pro komunikaci s externími knihovnami DLL
Původní funkce NxDllCall() a CallProcOnAddress() byly určené pro komunikaci s externími knihovnami
DLL podporujícími pouze řetězce typu AnsiString.
V Abra Gx od verze 14.51 je komunikace s knihovnami DLL zajištěna následujícímu funkcemi:


5.17
NxDllCallA() a CallProcOnAddressA() – pro komunikaci s knihovnami podporujícími řetězce
typu AnsiString (= náhrada původních NxDllCall() a CallProcOnAddress())
NxDllCallW() a CallProcOnAddressW() – pro komunikaci s knihovnami podporujícími řetězce
typu WideString (řetězce Unicode)
Změna použití encodingu v třídě TNxScriptingXMLWrapper
Pro kódování XML dokumentu je nyní k dispozici properta Encoding (read/write). Naopak z parametrů
metod saveToBytes(),saveToFile() a saveToStream() byla volba kódování odstraněna.
Pokud se tedy má XML dokument uložit v jiném než aktuálním kódování, je třeba před voláním
příslušné metody saveTo… přiřadit požadované kódování propertě Encoding.
Stránka 16 z 22
Původní použití
Nové použití
var
var
mXml: TNxScriptingXMLWrapper;
begin
mXml: TNxScriptingXMLWrapper;
begin
mXml := TNxScriptingXMLWrapper.Create;
mXml := TNxScriptingXMLWrapper.Create;
try
try
mxml.loadFromFile('n:\!firmy.test.XML');
mxml.loadFromFile('n:\!firmy.test.XML');
mXml.saveToFile('n:\!firmy.test2.XML', 'UTF-8');
mXml.Encoding := 'UTF-8';
finally
mXml.saveToFile('n:\!firmy.test2.XML');
mXml.Free;
finally
end;
mXml.Free;
end;
end;
end;
5.18
Poznámky k práci s formuláři ve skriptování


5.19
Formuláře vytvářené skriptem musí mít definovanou výšku a šířku pomocí propert ClientWidth a
ClientHeight a tedy ne pomocí Width a Height.
Doporučený postup vytváření formuláře s tlačítky ve spodním panelu v Abra vzhledu:
na formulář se vloží panel se zarovnáním dolů a na něj se vkládají tlačítka. Tomuto panelu se
pak nastaví properta BottomInModalDialog:= true a tím se v Abra vzhledu panel vybarví barvou
aplikace.
Properta Font.Color v Abra-vzhledu
V předchozích verzích bylo možné u komponent zveřejněných ve skriptování ovlivňovat a barvu pozadí
nastavením property Color a barvu písma nastavením property Font.Color.
Je-li v XE2-verzi nastaven styl vzhledu „Abra vzhled“ nebo „Abra vzhled - alternativní“, nelze barvy
u většiny komponent těmito propertami měnit. Barvu tak určuje výhradně nastavení barev v systému.
Výjimkou jsou následující komponenty: TLabel, TEdit, TComboEdit, TDateEdit, TDirectoryEdit ,
TLabeledEdit , TNumEdit , TObjectComboEdit a TRollComboEdit.
U těchto komponent barvy nastavením uvedených propert ovlivnit lze.
Je-li nastaven styl vzhledu „Podle Windows“, jsou změny barev pomocí uvedených propert účinné.
Stránka 17 z 22
6.
Binární data vs. string
Jak bylo vedeno výše, v Abra Gx od verze 14.51 jsou řetězce (typ string) unicodové, nejedná se tedy
o prosté pole Bytů a není tedy vhodné je používat k předávání binárních dat.
Pokud už je třeba binární data přenášet v řetězcích (to se může týkat např. webových služeb SOAP i
REST), je třeba je ukládat v kódování Base64.
Stránka 18 z 22
7.
Příloha č. 1: přehled odstraněných položek k verzi 14.51.08
Odstraněná položka
Náhrada
Poznámka
enumset AddOpts =
bez náhrady
[AddDirNames, AddRecurseDirs, AddMove, AddFreshen,
AddUpdate, AddHiddenFiles, AddArchiveOnly,
AddResetArchive, AddEncrypt, AddEmptyDirs, AddVolume,
AddFromDate, AddSafe, AddVersion, AddNTFS]
výčet původně použitý v odstraněné komponentě
TZipMaster19
type AnsiString
string
přechod skriptování na Unicode řetězce
class CFxPrintToFile
CFxReportManager
změna delphi-komponenty
enumset ExtrOpts = [ExtrDirNames, ExtrOverWrite,
ExtrFreshen, ExtrUpdate ,ExtrTest, ExtrForceDirs]
bez náhrady
výčet původně použitý v odstraněné komponentě
TZipMaster19
class TAnimatedImage (TRxImageControl)
TAnimate
změna delphi-komponenty
class TContainedAction (TBasicAction)
TBasicAction
zjednodušení struktury komponent skriptování
class TCurrencyEdit (TCustomNumEdit)
TNumEdit
změna delphi-komponenty
class TCustomAction (TContainedAction)
TBasicAction
zjednodušení struktury komponent skriptování
class TCustomActionList (TComponent)
TActionList
zjednodušení struktury komponent skriptování
class TCustomCheckBox (TButtonControl)
TCheckBox
zjednodušení struktury komponent skriptování
class TCustomCombo (TCustomListControl)
TComboBox
zjednodušení struktury komponent skriptování
class TCustomComboBox (TCustomCombo)
TComboBox
zjednodušení struktury komponent skriptování
class TCustomComboEdit (TCustomMaskEdit)
TComboEdit
zjednodušení struktury komponent skriptování
class TCustomDBComboBox (TCustomComboBox)
TComboBox
zjednodušení struktury komponent skriptování
class TCustomDBGrid (TCustomGrid)
TDBGrid
zjednodušení struktury komponent skriptování
class TCustomDateEdit (TCustomComboEdit)
TDateEdit
zjednodušení struktury komponent skriptování
class TCustomDrawGrid (TCustomGrid)
TDrawGrid
zjednodušení struktury komponent skriptování
class TCustomEdit (TWinControl)
TEdit
zjednodušení struktury komponent skriptování
class TCustomFrame (TScrollingWinControl)
TFrame
zjednodušení struktury komponent skriptování
class TCustomGrid (TCustomControl)
TDBGrid, TDrawGrid,
TStringGrid
zjednodušení struktury komponent skriptování
class TCustomGroupBox (TCustomControl)
TGroupBox
zjednodušení struktury komponent skriptování
class TCustomLabel (TGraphicControl)
TLabel
zjednodušení struktury komponent skriptování
class TCustomLabeledEdit (TCustomEdit)
TLabeledEdit
zjednodušení struktury komponent skriptování
class TCustomListBox (TCustomMultiSelectListControl)
TListBox
zjednodušení struktury komponent skriptování
zjednodušení struktury komponent skriptování
class TCustomListControl (TWinControl)
TCheckListBox,
TComboBox, TListBox,
TListView
class TCustomListView (TCustomMultiSelectListControl)
TListView
zjednodušení struktury komponent skriptování
class TCustomMaskEdit (TCustomEdit)
TEdit
zjednodušení struktury komponent skriptování
class TCustomMemo (TCustomEdit)
TMemo
zjednodušení struktury komponent skriptování
class TCustomMemoryStream (TStream)
TMemoryStream
zjednodušení struktury komponent skriptování
class TCustomMultiSelectListControl (TCustomListControl)
TListBox, TListView
zjednodušení struktury komponent skriptování
class TCustomNumEdit (TCustomComboEdit)
TNumEdit
zjednodušení struktury komponent skriptování
class TCustomPanel (TCustomControl)
TPanel
zjednodušení struktury komponent skriptování
class TCustomRadioGroup (TCustomGroupBox)
TRadioGroup
zjednodušení struktury komponent skriptování
class TCustomRichEdit (TCustomMemo)
TRichEdit
zjednodušení struktury komponent skriptování
class TCustomSynEdit (TCustomControl)
TSynEdit
zjednodušení struktury komponent skriptování
class TCustomTabControl (TWinControl)
TTabControl
zjednodušení struktury komponent skriptování
class TCustomTreeView (TWinControl)
TTreeView
zjednodušení struktury komponent skriptování
Stránka 19 z 22
class TDBCheckBox (TCustomCheckBox)
TCheckBox
zjednodušení struktury komponent skriptování
class TDBComboBox (TCustomComboBox)
TComboBox
zjednodušení struktury komponent skriptování
class TDBDateEdit (TCustomDateEdit)
TDateEdit
zjednodušení struktury komponent skriptování
class TDBEdit (TCustomMaskEdit)
TEdit
zjednodušení struktury komponent skriptování
class TDBMemo (TCustomMemo)
TMemo
zjednodušení struktury komponent skriptování
class TDBText (TCustomLabel)
TLabel
zjednodušení struktury komponent skriptování
class TEditButton (TRxSpeedButton)
TSpeedButton
zjednodušení struktury komponent skriptování
class TGIFFrame (TPersistent)
bez náhrady
v XE-verzi není odpovídající delphi komponenta
enum TGlyphOrientation = (goHorizontal,goVertical)
bez náhrady
v XE-verzi není odpovídající delphi-výčet
class THandleStream (TStream)
TMemoryStream
v XE-verzi není delphi-komponenta podporovaná
class TMaskEdit (TCustomMaskEdit)
TEdit
zjednodušení struktury komponent skriptování
class TMemoryRecord (TPersistent)
bez náhrady
v XE-verzi není delphi-komponenta podporovaná
enum TMimeChar =
(ISO_8859_1,ISO_8859_2,ISO_8859_3,ISO_8859_4,ISO_8
859_5,ISO_8859_6,ISO_8859_7,ISO_8859_8,ISO_8859_9,
ISO_8859_10,ISO_8859_13,ISO_8859_14,ISO_8859_15,C
P1250,CP1251,CP1252,CP1253,CP1254,CP1255,CP1256,
CP1257,CP1258,KOI8_R,CP895,CP852,UCS_2,UCS_4,UT
F_8,UTF_7,UTF_7mod,UCS_2LE,UCS_4LE,UTF_16,UTF_
16LE,UTF_32,UTF_32LE,C99,JAVA,ISO_8859_16,KOI8_U,
KOI8_RU,CP862,CP866,MAC,MACCE,MACICE,MACCRO,
MACRO,MACCYR,MACUK,MACGR,MACTU,MACHEB,MA
CAR,MACTH,ROMAN8,NEXTSTEP,ARMASCII,GEORGIA
N_AC,GEORGIAN_PS,KOI8_T,MULELAO,CP1133,TIS620,
CP874,VISCII,TCVN,ISO_IR_14,JIS_X0201,JIS_X0208,JIS
_X0212,GB1988_80,GB2312_80,ISO_IR_165,ISO_IR_149,
EUC_JP,SHIFT_JIS,CP932,ISO_2022_JP,ISO_2022_JP1,I
SO_2022_JP2,GB2312,CP936,GB18030,ISO_2022_CN,IS
O_2022_CNE,HZ,EUC_TW,BIG5,CP950,BIG5_HKSCS,EU
C_KR,CP949,CP1361,ISO_2022_KR,CP737,CP775,CP853
,CP855,CP857,CP858,CP860,CP861,CP863,CP864,CP865
,CP869,CP1125)
konstanty
v XE-verzi je pro převody kódování řetězců
Encoding_cpKamenicky, použitá třída TEncoding
Encoding_cp852,
Encoding_cp1250,
Encoding_cpISO_8859_2,
Encoding_cpASCII,
Encoding_cpMacIntosh,
Encoding_cpUTF_8,
Encoding_cpUTF_16
class TNxAction (TNxCustomAction)
TAction
zjednodušení struktury komponent skriptování
class TNxActionList (TCustomActionList)
TActionList
zjednodušení struktury komponent skriptování
class TNxActionListController
(TNxCustomActionListController)
TActionListController
zjednodušení struktury komponent skriptování
class TNxButton (TButton)
TButton
zjednodušení struktury komponent skriptování
class TNxCheckAction (TNxAction)
TCheckAction
zjednodušení struktury komponent skriptování
class TNxColorDialog (TColorDialog)
TColorDialog
zjednodušení struktury komponent skriptování
class TNxComboBevel (TNxCustomPanel)
TComboBevel
zjednodušení struktury komponent skriptování
class TNxConditionLink (TObject)
TConditionLink
zjednodušení struktury komponent skriptování
class TNxConditionList (TNxCustomConditionList)
TConditionList
zjednodušení struktury komponent skriptování
class TNxConditionListItem (TNxCustomConditionListItem)
TConditionListItem
zjednodušení struktury komponent skriptování
class TNxControlBox (TNxPanel)
TControlBox
zjednodušení struktury komponent skriptování
enum TNxControlBoxLayoutDirection =
(ldVertical,ldHorizontal,ldVerticalBottom,ldHorizontalRight)
TLayoutDirection
zjednodušení struktury komponent skriptování
enum TNxControlBoxLayoutType =
(ltFront,ltCenter,ltOpposite,ltAutosize)
TLayoutType
zjednodušení struktury komponent skriptování
konstanty
v XE-verzi je pro převody kódování řetězců
Encoding_cpKamenicky, použitá třída TEncoding
enum TNxCpDefinition =
Encoding_cp852,
(cpKamenicky,cpWin31CE,cpWin1250,cpECMA,cpLatin2,cp Encoding_cp1250,
UsaAnsi,cpIbm,cpSemigraph,cpMacIntosh)
Encoding_cpISO_8859_2,
Encoding_cpASCII,
Encoding_cpMacIntosh,
Stránka 20 z 22
Encoding_cpUTF_8,
Encoding_cpUTF_16
class TNxCustomAction (TCustomAction)
TAction
zjednodušení struktury komponent skriptování
class TNxCustomActionListController (TComponent)
TActionListController
zjednodušení struktury komponent skriptování
class TNxCustomComboEdit (TCustomComboEdit)
TComboEdit
zjednodušení struktury komponent skriptování
class TNxCustomConditionList (TCustomControl)
TConditionList
zjednodušení struktury komponent skriptování
class TNxCustomConditionListItem (TObject)
TConditionListItem
zjednodušení struktury komponent skriptování
class TNxCustomDBComboEdit (TNxCustomComboEdit)
TComboEdit
zjednodušení struktury komponent skriptování
class TNxCustomDirectoryEdit (TCustomComboEdit)
TDirectoryEdit
zjednodušení struktury komponent skriptování
class TNxCustomInfoGridPanel (TNxPanel)
TInfoGridPanel
zjednodušení struktury komponent skriptování
class TNxCustomMultiGrid (TCustomControl)
TMultiGrid
zjednodušení struktury komponent skriptování
class TNxCustomNumEdit (TRxCustomCalcEdit)
TNumEdit
zjednodušení struktury komponent skriptování
class TNxCustomPageControl (TPageControl)
TPageControl
zjednodušení struktury komponent skriptování
class TNxCustomPanel (TPanel)
TPanel
zjednodušení struktury komponent skriptování
class TNxDBCheckBox (TDBCheckBox)
TCheckBox
zjednodušení struktury komponent skriptování
class TNxDBComboBox (TRxDBComboBox)
TComboBox
zjednodušení struktury komponent skriptování
class TNxDBComboEdit (TNxCustomDBComboEdit)
TComboEdit
zjednodušení struktury komponent skriptování
class TNxDBDateEdit (TDBDateEdit)
TDateEdit
zjednodušení struktury komponent skriptování
class TNxDBDirectoryEdit (TNxDirectoryEdit)
TDirectoryEdit
zjednodušení struktury komponent skriptování
class TNxDBEdit (TDBEdit)
TEdit
zjednodušení struktury komponent skriptování
class TNxDBGrid (TRXDBGrid)
TDBGrid
zjednodušení struktury komponent skriptování
class TNxDBMemo (TDBMemo)
TMemo
zjednodušení struktury komponent skriptování
class TNxDBNumEdit (TNxCustomNumEdit)
TNumEdit
zjednodušení struktury komponent skriptování
class TNxDBObjectComboEdit (TNxCustomDBComboEdit)
TObjectComboEdit
zjednodušení struktury komponent skriptování
class TNxDBRadioGroup (TCustomRadioGroup)
TRadioGroup
zjednodušení struktury komponent skriptování
class TNxDBRoundPanel (TCustomPanel)
TDbRoundPanel
zjednodušení struktury komponent skriptování
class TNxDBText (TDBText)
TLabel
zjednodušení struktury komponent skriptování
class TNxDirectoryEdit (TNxCustomDirectoryEdit)
TDirectoryEdit
zjednodušení struktury komponent skriptování
class TNxFindDialog (TFindDialog)
TFindDialog
zjednodušení struktury komponent skriptování
class TNxFontDialog (TFontDialog)
TFontDialog
zjednodušení struktury komponent skriptování
class TNxInfoGridPanel (TNxCustomInfoGridPanel)
TInfoGridPanel
zjednodušení struktury komponent skriptování
class TNxListView (TListView)
TListView
zjednodušení struktury komponent skriptování
class TNxMainMenu (TMainMenu)
TMainMenu
zjednodušení struktury komponent skriptování
class TNxMultiAction (TNxAction)
TMultiAction
zjednodušení struktury komponent skriptování
class TNxMultiGrid (TNxCustomMultiGrid)
TMultiGrid
zjednodušení struktury komponent skriptování
class TNxNumEdit (TNxCustomNumEdit)
TNumEdit
zjednodušení struktury komponent skriptování
class TNxOpenDialog (TpsvOpenDialog)
TOpenDialog
zjednodušení struktury komponent skriptování
class TNxOrderByPanel (TNxPanel)
TOrderByPanel
zjednodušení struktury komponent skriptování
class TNxPageControl (TNxCustomPageControl)
TPageControl
zjednodušení struktury komponent skriptování
class TNxPanel (TNxCustomPanel)
TPanel
zjednodušení struktury komponent skriptování
enum TNxPanelColor =
(pcDefault,pcCustom,pcWizardWhite,pcTabSheetGray)
TPanelColor
zjednodušení struktury komponent skriptování
class TNxPrintDialog (TPrintDialog)
TPrintDialog
zjednodušení struktury komponent skriptování
class TNxPrinterSetupDialog (TPrinterSetupDialog)
TPrinterSetupDialog
zjednodušení struktury komponent skriptování
class TNxRadioGroup (TRadioGroup)
TRadioGroup
zjednodušení struktury komponent skriptování
class TNxReplaceDialog (TReplaceDialog)
TReplaceDialog
zjednodušení struktury komponent skriptování
class TNxSaveDialog (TpsvSaveDialog)
TSaveDialog
zjednodušení struktury komponent skriptování
Stránka 21 z 22
class TNxScrollBox (TScrollBox)
TScrollBox
zjednodušení struktury komponent skriptování
class TNxSeparatorAction (TNxCustomAction)
TSeparatorAction
zjednodušení struktury komponent skriptování
class TNxShortCutList (TStringList)
TShortCutList
zjednodušení struktury komponent skriptování
class TNxTreeView (TTreeView)
TTreeView
zjednodušení struktury komponent skriptování
class TNxWebBrowser (TEmbeddedWB)
TWebBrowser
zjednodušení struktury komponent skriptování
class TNxXHTMLEditor (TWinControl)
TXHTMLEditor
zjednodušení struktury komponent skriptování
class TRxCalcEdit (TRxCustomCalcEdit)
TNumEdit
v XE-verzi není odpovídající delphi komponenta
class TRxCustomCalcEdit (TCustomNumEdit)
TNumEdit
v XE-verzi není odpovídající delphi komponenta
class TRxDBComboBox (TCustomDBComboBox)
TComboBox
v XE-verzi není odpovídající delphi komponenta
class TRxDBGrid (TDBGrid)
TDBGrid
v XE-verzi není odpovídající delphi komponenta
enum TRxDropDownMenuPos = (dmpBottom,dmpRight)
bez náhrady
v XE-verzi není odpovídající delphi-výčet
class TRxGIFAnimator (TRxImageControl)
TAnimate
v XE-verzi není odpovídající delphi komponenta
class TRxImageControl (TGraphicControl)
TAnimate
v XE-verzi není odpovídající delphi komponenta
class TRxMemoryData (TDataSet)
TMemoryDataset
v XE-verzi není odpovídající delphi komponenta
type TRxNumGlyphs
TNumGlyphs
v XE-verzi není odpovídající delphi-typ
class TRxSpeedButton (TGraphicControl)
TSpeedButton
v XE-verzi není odpovídající delphi komponenta
class TStringStream (TStream)
TMemoryStream
v XE-verzi není delphi-komponenta podporovaná
class TZipMaster19 (TComponent)
TZipFile
v XE-verzi není odpovídající delphi komponenta
class TpsvOpenDialog (TOpenDialog)
TOpenDialog
v XE-verzi není odpovídající delphi komponenta
class TpsvSaveDialog (TSaveDialog)
TSaveDialog
v XE-verzi není odpovídající delphi komponenta
const faVolumeID: Integer = 8
bez náhrady
v XE-verzi není konstanta podporovaná
enum TNxBucketEventType =
(beInsert,beRemove,beChangeData,beChangeState)
bez náhrady
výčet nemá smysl ve skriptování zveřejňovat
class TNxBucket (TObject)
bez náhrady
třídu nemá smysl ve skriptování zveřejňovat
class TNxKeyBucket (TNxBucket)
bez náhrady
třídu nemá smysl ve skriptování zveřejňovat
class TNxContainer (TObject)
bez náhrady
třídu nemá smysl ve skriptování zveřejňovat
class TNxCollection (TNxContainer)
bez náhrady
třídu nemá smysl ve skriptování zveřejňovat
Stránka 22 z 22

Podobné dokumenty

Diplomová práce

Diplomová práce Typ proměnné je jeden z výše uvedených datových typů. Pro deklaraci celého pole proměnných se použije název proměnné []. Proměnné, kterým není přiřazen typ, jsou METAPOSTem chápány, jako by byly ty...

Více

1. Seznámení s C++ Builderem

1. Seznámení s C++ Builderem programové jednotky další soubor, obsahující popis vzhledu formuláře (vlastnosti formuláře a objektů umístěných na formuláři). Tento soubor má příponu DFM, jedná se o binární soubor, který si běžný...

Více

Elektronická verze - Zpravodaj Československého sdružení

Elektronická verze - Zpravodaj Československého sdružení Jednak je dobré si uvědomit, že PostScript je interpretovaný jazyk. To znamená, že součástí každého výstupního zařízení podporující PostScript je interpret, program, který se stará o vykonávání pří...

Více

C++ Builder 4.0 - Tvorba software

C++ Builder 4.0 - Tvorba software nazveme ho třeba okno.cpp a uložíme ho do adresáře Projects\01. Přitom se zároveň uloží i hlavičkový soubor (okno.h) a soubor s popisem okna (okno.dfm). Poté se nás prostředí zeptá na jméno projekt...

Více

close

close Funkce pro sockety int getsockopt(int sck, int lvl, int optname, char* optval, int* optlen) int setsockopt(int sck, int lvl, int optname, char* optval, int optlen)

Více

Dokumentace k API Balíkobot v1.75 2016-09-14

Dokumentace k API Balíkobot v1.75 2016-09-14 $aResponse = json_decode($response); // převod návratových hodnot do pole DOPRAVCE – nahraďte za zkratku dopravce, přes kterého se bude balík posílat (cp – Česká pošta, dpd – DPD, ppl – PPL, atd. v...

Více

imigranti v české republice - Research Support Scheme

imigranti v české republice - Research Support Scheme transformačních změn neodmyslitelně spojují s nutnou emigrací části populace transformující se společnosti (např. Massey 1988). Na druhé straně jsou v této oblasti také další transformující se země...

Více

01 WT3-WK3_12-Seiter_cz.qxd:WT3-WK3_12

01 WT3-WK3_12-Seiter_cz.qxd:WT3-WK3_12 Princip funkce . . . Proud vzduchu temperovaný nebo klimatizovaný na přesně zadanou žádanou hodnotu proudí kontinuálně zkušebním prostorem a zaručuje optimální prostorové rozdělení vzduchu a teplot...

Více