home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2002 June
/
PCWorld_2002-06_cd.bin
/
Software
/
Komercni
/
xbase
/
study
/
help.txt
next >
Wrap
Text File
|
2002-05-14
|
17KB
|
285 lines
Vazeni uzivatelia,
snazil som sa spravit nejake prve demo ukazky, ktore Vam, verim,
na zaciatku trosku pomozu. Ako uvidite, az na "kozmenticky" syntax
prikazov spocivajuci v pridani prefixu DC_ sa na Clipper-ovskom kode nic
nezmenilo. Niekde bude samozrejme treba pridat nejake "textove objekty"
navyse, pripadne troska upravit postupnost niektorych prikazov, ale princip
programu zostane zachovany. Budem sa to snazit strucne okomentovat, aj ked
si myslim, ze je to dost zrozumitelne - v pripade nejakych nejasnosti ma
kontaktujte eMail-om, ale predtym si najskor dokladne pozrite dokumentaciu
Xbase++ a eXpress++! Samozrejme nechcem nahradzat priklady z dokumentacie
alebo z demo verzii prislusnych produktov, len su tu spracovane najcastejsie
Vase otazky, plus nejake moje doterajsie skusenosti.
- hned uvodom, ak len chcete mat 32-bit-ovu "textovu" verziu, teda 100% kopiu
Vasej DOS-ovskej aplikacie, tak sa nemusite s nicim trapit
- a len jednoducho si ju prekompilujte pomocou Xbase++
- no a ak chcete mat plne GUI verziu, tak citajte dalej :-)
- predtym ako zacnete studovat zdrojovy kod jednotlivych funkcii, vyskusajte
si najskor vsetky volby z menu
- v menu systeme som spravil az tri urovne menu(Evid.4)
aj s jednou zakazanou polozkou-PragoSoft3
- na rychly vyber najcastejsie pouzivanych Volieb si mozete spravit
TOOLBAR - napr. osoby, presuny, provizie...
- na plochu si mozete umiestnit hocijaky obrazok(-y)
- menu polozky PragoSoft 1, 2 a 4 maju po dve varianty, aj pre ovladanie-
aktivovanie bud "zvolenymi" klavesami alebo funkcnymi klavesami F2...
samozrejme ich mozete aktivovat aj kliknutym mysi;
vid spravene funkcie pre Vas na osetrovanie stlacenych klaves;
takze mysi sa nemusite pocas celeho behu programu ani dotknut !
- volby PS 1 a 2 su len take odlahcene priklady na rychle prehladne
"zoznamenie sa" s problematikou a troska funkcnejsi priklad je v PS4,
kde je aj pridanie, oprava a vymazanie polozky;
rozmiestnenie jednotlivych poli GET si moc nevsimajte, je to velmi
okliestnena verzia jednej obrazovky z nasho jedneho programu, ale
je tu ukazana vacsina prikladov, s ktorymi sa stretnete ;
tu si treba uvedomit jednu dolezitu vec, a to, ze vsetko su to objekty,
preto napriklad ak v nejakej funkcii, ktoru volate, zmenite hodnotu
nejakej polozky v hlavnou GetList-e, treba po jej navrate zavolat
funkciu LOSTFOCUS-vid zrojak;
takisto, nemozete priamo vypisovat hocikde a z hocikadial na obrazovku,
nie ste MS-DOS-e, ale vzdy si musite najskor vytvorit prvotny objekt
a potom jednoducho uz do neho "vpisujete" co len chcete-vid :setCaption(;
- tu upozornim na funkcie pre VALID-aciu jednotlivych GET poli; a aj WHEN
- takisto je tu ukazka aj Scope funkcii-vid GET PSC; skuste najskor
vlozit 94911, potom 94901, potom 99999 a nakoniec 11111 a uvidite
rozdiely
- jednoducho sa treba len pohrat s niektorymi parametrami...
- takisto tu mate spravene rychle ovladanie pri pridavani alebo oprave udajov
na Zapis udajov(PGDN/ALT+Z) alebo Stornovanie zmien(ESC/ALT+S)
s ToolTip napovedami
- rychlo zistite, ze uzivatel sa nemusi pocas celeho behu programu mysi
ani dotknut, takze sa neznizi ziadna produktivita prace, coho sa
boji vacsina uzivatelov este DOS verzii !
- dolezita poznamka: napriek tomu, ze mate moznost ihned po vstupe
novych udajov v hociktorom GET poli stlacit PGDN alebo ALT+Z
alebo kliknut na OK, DOPORUCUJEM Vam vzdy potvrdit vstup stlacenim
klavesy ENTER, aby sa vykonali spravne vsetky VALID-acie a ostatne
podmienky, aj ked to vacsinou pracuje bez problemov, ale istota
je istota :-)
- na presun medzi jednotlivymi GET polami mozete pouzit ENTER, TAB,
SHIFT+TAB, stlacit priradenu kombinaciu HOT-Klaves(vid ACCELKEY xbeK_ALT_B
pre GET KodBanky vo funkcii Oprav() v PS4() ) alebo priamo kliknut mysou
do pozadovaneho GET pola(tu ale doporucujem vzdy kliknut na jeho
zaciatok, nie niekde "v nom")
- trosku iny sposob vytvorenia Browse objektu a PuschButton-ov je ukazany
vo volbe Banky
- TestUpdated()- ukazky testovania aktualizacie GET-ov, ci bola zmenena ich
povodna hodnota alebo nie, a nasledny zapis udajov len pri ich zmene,
aj ked bol ukonceny vstup ako OK;(inak povedane, naco sa zdrzovat
zapisovanim udajov na disk-hlavne pri praci v sieti, ak neboli zmenene);
na rozdiel od funkcie Updated() tato kontroluje nielen normalne GET-y,
ale aj CheckBox-y, ComboBox-y a vsetky ostatne GET objekty;
- vyzaduje pridat volbu SAVE do GETOPTIONS, DC_GetRefresh() a
DC_GetOrigSet() do EVAL pre DCREAD, po ukonceni vstupu TestUpdated()
a DC_GetDestroy() na konci - vid Pridaj/Oprav funkcie vo volbe Banky
a PragoSoft4
- ak citate/editujete priamo databazove polia, napr. MENO, OBEC v databaze
OSOBY, tak bud na zaciatku procedury/funkcie ich treba deklarovat ako
FIELD MENO, OBEC alebo este lepsie(doporucovane!) je pouzivat ich
alias databazy, teda napr. OSOBY->MENO, OSOBY->OBEC
- takisto aj vsade inde v programe pouzivajte spolu nazvami poli aj ich
aliasy prislusnej databazy, a takisto aj dopurucujem kvoli "istote"
vzdy nastavit prislusnu pracovnu databazu pomocou dbSelectArea()
- pomocou Filtra v Browse-ri si mozete "obmedzit-filtrovat" zaznamy podla
lubovolneho pola a lubovolnej podmienky
- pomocou Hladaj v Browse-ri si v aktualnom stlpci od aktualnej pozicie/vety
mozete postupne vyhladat vsetky zaznamy splnajuce Vasu podmienku
- spravil som aj par ukazok na Progress Bar; ja osobne ich nepouzivam vobec,
alebo len velmi malo, pretoze cas na ich vytvorenie/aktualizaciu/znicenie
je niedeky/vacsinou dlhsi ako vlastne vykonanie prikazu;
preto ja pouzivam Objekt TEXT, kde len menim jeho text, ktory v podstate
vobec nezdrzuje a splni tu istu "informacnu" funkciu - vid priklad
"Test Skip+Print - 1 RecNo() - info text" a
"Test Progress varianta 2"
- BROWSE objekt zabera dost pamate a systemovych prostriedkov a aj je trosku
pomalsi, "doporucuje sa" vsade tam, kde nie je potrebna az taka
"konfigurovatelnost" (napr. pri obycajnom prezerani DBF suborov a ich
aktualizovani cez dalsie funkcie (napr.Pridaj/Oprav apod.), pouzivat
QUICKBROWSE objekt, ktory splna tu istu informacnu funkciu, ale vzhladom
na jeho interny navrch je super rychly a zabera minimum syst.zdrojov;
ma vyznam pouzivat ho aj na rychlych PC a nielen na pomalych; inak
povedane, naco sa zbytocne zdrziavat pomalym vykreslovanim nejakych
nepodstatnych veci
- najvacsi rozdiel medzi rychlostou prace a celkovou narocnostou ihned
zbadate, ked budete prezerat DBF s nastavenou nejakou FILTER alebo SCOPE
podmienkou, a to je dost casta situacia v realnych podmienkach
u zakaznika, ked ho zaujima len nejaka podmnozina zaznamou
- ak si pozriete priklady Obce A a Obce B, tak uvidite len minimalne
rozdiely v ich strukture, ale obrovsky rozdiel v rychlosti prezerania
a reakciach
- tu si vsimnite funkcie konciace na _Q, riadky/funkcie obsahujuce
odkazy na M->nRecnoDB a vyskyty funkcii
dbSuspendNotifications() a dbResumeNotifications(); skuste si ich aj
"zaremovat", aby sa nekompilovali a uvidite ich vyznam v pouzitych
funkciach
- skuste si nastavit Filter na rovnaku podmienku v oboch prikladoch
(napr."TRA $ OBEC" pomocou Funkcie Filter) a potom len jednoducho
prezerat DBF - rozdiel v rychlosti je velky aj na mojom Intel
Pentium IV 1.5GHz, takze nie je to urcene len pre pomale PC
- ako uvidite, skip-ovanie filtrovanej databazy, ked su zaznamy, ktore
splnaju pozadovanu podmienku "fyzicky" dost od seba vzdialene, tak
pri QuickBrowse objekte to vobec "necitite" na rozdiel od Browse
objektu; tu vyrazne rozhoduje aj to, ako mate nastavene Syst.par.
v Servise pre Browse objekty, ci na "A" alebo "N" !
- skuste si v Servis-Parametre nastavit najskor posledne styri nastavenia
pre Browse na A(ano) a potom druhykrat na N(nie) a len jednoducho
prezerajte-prechadzajte databazu hore-dole. Najlepsie uvidite rozdiel,
ked skocite na koniec databazy(CTRL+PGDN):
a) a len stlacte klavesu-sipku "posun hore" a drzte ju,
b) alebo stlacte klavesu PGUP "skok o stranku hore" a drzte ju;
- rozdiely v oboch pripadoch(Browse/QuickBrowse) v rychlosti posunu
a aj v prekreslovani su obrovske, vyskusajte si to aj s "A" aj "N"
volbou v parametroch pre BROWSE a aj QUICKBROWSE objekt
- takisto je "trochu" citit rozdiel, ak je databaza otvorena
Vyhradne-Exclusive alebo Zdielane-Shared
- udaje zo suboru ParamSys.INI su "zdielane" aj nasimi DOS-ovskymi verziami
programov; tu doporucujem zvazit nastavenia pre posledne parametre
pre Browse/QuickBrowse objekty na "A"(Ano) vs. "N"(Nie)-nastavenie na "A"
je sice efektne, ale "troska" zdrzuje obcas posuny po velkych databazach;
Naopak, "N" vyrazne zrychly presuny po databazach a prekreslovanie objektu
Browse a aj QuickBrowse; niekedy je samozrejme "ziaduce-pozadovane"
zobrazovat priebezne aktualne cislo vety, pocet zaznamov splnajucich
podmienku a akt.stav PushButtonov
- dobry "kompromis" je QuickBrowse s "A"
- spravene su aj funckie na Nahlad pred tlacou a vlastnu tlac TXT suborov
s moznostou vyhladavania "hladaneho" textu priamo vo vytvorenej zostave
- pomocou funkcie Demo() si mozete "vyrobit" demo verziu a hlasky
v urcitych casovych intervaloch a bud nechat na uzivatela, aby ukoncil
program "dobrovolne" alebo po uplynuti zadaneho casu jednoducho
"skoncit"- quit...
- pripojil som aj zopar uzitocnych funkcii vyuzivajucich priamo systemove
DLL, ako zistenie serioveho cisla disku, velkost dostupnych systemovych
zdrojov, priame vyvolanie posty(eMail) apod.
- ak nemate rsrc16.dll/rsrc32.dll, tak si ich nainstalujte cez volbu
Pridat-Ubrat programy/Instalacia Windows/Systemove nastroje/Merac
systemovych prostriedkov
- pripojil som aj funkcie, ktore som si vyrobil na spakovanie/rozbalenie
a zalohovanie/obnovenie suborov na disk/disketu; vyznam jednotlivych
parametrov WinRar(min.ver.2.9) si pozrite v jeho dokumentacii;
Princip je jednoduchy: vytvori sa adresar Zaloha a podadresare Mesiac01-12
a AktualnyDen. Pri kazdom starte/ukonceni programu sa vytvori/zaktualizuje
archiv v prislusnom podadresari podla aktualneho dna v mesiaci(ak este
neexistuje, tak sa najskor vytvori) a potom sa spravi aj kopia do adresara
Aktualny den ako podadresar Hodina/Minuta. Tymto mam zarucene to, ze ak
z nejakeho dovodu sa porusi nejaka databaza/zisti sa nejaky problem,
tak sa v ten den viem vratit k stavu, kedy to este bolo v poriadku
(preto mam nastavene, ze automaticky sa zalohuje kazde XX hodin-vid funkcie
Test_Zal() a PM() ), alebo, ked to zistim o den, dva, resp, neskor, viem sa
vratit k stavu k urcitemu dnu, kedy to bolo este ok. Zaroven sa kontroluje,
ci nahodov nie je "novy den", ak ano, tak sa cely obsah adresara
AktualnyDen vymaze, aby sa to tam nepoplietlo-nehromadilo.
Sumarum: vzdy mam poslednu zalohu z kazdeho dna plus priebezne zalohy
aktualneho dna.
- na SAY doporucujem pouzivat font "Arial CE" a na GET "Courier New CE";
font "Times New Roman CE" nie je moc vhodny na SAY, nie je tak citatelny
- po spusteni volby Benchmark uvidite, preco sa "doporucuje" pouzivat kvoli
celkovej rychlosti behu programu hlavne Local/Static premenne; samozrejme
je niekedy takze alebo nemozne uplne Private/Public prestat pouzivat,
lebo ich vidiet "skoro vsade" bez nutnosti ich posielat ako parametre
- takisto sa odporuca programy spustat na Windows2000 alebo WinXP,
pretoze len to su skutocne 32-bit-ove systemy, Win9x maju plno stareho
kodu a je to citit(ale da sa to prezit); na Win2000/XP to chodi jedna
radost; vid web podstranku Testy
- pri praci so sietovymi verziami Vasich aplikacii Vam velmi moc doporucujem
kvoli "velkosti" EXE suborov a DLL kniznic mat ich nahrate na kazdom
jednom lokalnom pocitaci a spustat program z neho a nie mat len umiestneny
jeden EXE subor s DLL kniznicami na sietovom disku a spustat to zo servera;
rozdiel "v rychlosti" uvidite sami :-)
- na serveri majte ulozene len databazy
Vytvorenie projektu a kompilacia:
napriek tomu, ze je to dost podrobne a nazorne popisane a ukazane aj
v dokumentacii Xbase++ a aj eXpress++, tak Vas na nu v prvom rade odkazujem,
ale aj prikladam strucne ukazky a postupy, ako to robim ja:
princip je rovnaky ako v Clipper-i, len rozdielne su programy, ktore
kompiluju(XPP vs CLIPPER) a linkuju(PBUILD vs RMAKE) vytvorene XPJ subory,
tzv.projekty(v Clipper-i to boli RMK/LNK subory)
-Xbase: aby som nemusel stale pisat postupnost tych istych prikazov, ked
idem vytvarat novy projekt, tak som si vyrobil BAT subor, kde to
mam z automatizovanem, a uz len napisem "xpj cHlavnyPRG", kde miesto
cHlavnyPRG dam nazov hlavneho PRG suboru, teda napr. "xpj test";
no a potom neskor, ked spravim nejake zmeny v zdrojakoch, uz len
spustam _mybuild.bat na prekompilovanie zmien a vygenerovanie noveho
EXE s tym, ze ak by tam bol nejaky problem, tak chybove hlasky su
presmerovane do suboru _errost.txt
- subor XPJ.BAT a GUI.EXE si nahrajte do adresara, na ktory mate
nastavenu cestu-PATH, aby ste ho spustit z lubovolneho adresara
-Xbase+eXpress: tu si len vzdy skopirujete nejaky Vas subor projektu a do
casti pre PRG subory si napiste vsetky subory, ktore sa maju linkovat
-ak si chcete pridat priamo do EXE programu nejake dalsie ikony,
bitmapy apod, napr.MOJELOGO.BMP, tak ho treba
-nakopirovat do adresara \exp17\bitmaps,
-pridat-zadefinovat do \include\dcbitmap.ch novu hodnotu pre neho,
napr. #define BITMAP_MOJELOGO 9999
-pridat-zadefinovat do \lib\express.arc
BITMAP_MOJELOGO = "..\BITMAPS\mojelogo.bmp"
-prekompilovat zmeny suborov prikazom "arc express"
-prekomplilovat dclipx.xpj v adresari \source\dclipx a nakopirovat
nove dclipx.* do \lib
-tu mozete vyuzit moj _cl.bat subor, ktory treba vzdy spustit aj
po naistalovani kazdej novej verzie eXpress-u
Ak sa Vam zle zobrazuju narodne znaky, tak si:
a) bud si v projekte nastavte GUI = no (plati pre textovy rezim), alebo
b) si upravte v appsys.prg standardny font "Alaska Crt" na
"Courier New CE" a prilinkujte si ho k aplikacii(plati pre text/GUI
rezim), alebo
c) pouzite pre jednotlive objekty fonty Arial CE, Courier New CE alebo
Times New Roman CE - plati pre plne graficky rezim GUI
vid priklady v podadresari CLIP_XBA; neviem, ci to funguje-neskusal som
to s kodovou strankou Kamenickych, ale ak mate udaje/texty v Latin2,
tak je to bez problemov; pripadne si to prekonvertujte z kodu
Kamenickych do Latin2, pretoze ramceky v plne grafickom rezime aj tak
nebudete potrebovat
- zmeny v jednotlivych verziach citajte v subore _verzie.txt, vyhradzujem
si pravo robit zmeny kodu a funkcnosti bez upozornenia !
Dufam, ze Vam tieto moje skusenosti, rady a vysledky z doterajsej
prace pomozu a budem vdacny za spatny ohlas a kontaktovanie v pripade
hocijakych nejasnosti.
- pripojeny subor praha.exe treba nahrat do hlavneho adresara na disku C:
a len spustit
- vytvori sa podadresar praha so vsetkymi potrebnymi subormi
- spustite _mybuild.bat na vytvorenie exe suboru
- pre spravne zobrazovanie "narodnych" textov je potrebne prekompilovat
kazdu novo-nainstalovanu verziu eXpress-u - na to vam posluzi subor
_cl.bat. Tento prekopirujte do adresara c:\exp17\source\dclipx
a len ho spustite, pripadne si ho upravte podla potreby - neplati pre
demo verziu na nasej stranke, ta uz je upravena
- nezabudnite mat nastavene cesty v autoexec.bat:
SET ALINK=/PM:PM
SET XPPRESOURCE=C:\ALASKA\XPPW32\RESOURCE
SET PATH=%PATH%;C:\EXP17\LIB;C:\ALASKA\XPPW32\BIN;C:\ALASKA\XPPW32\LIB
SET LIB=C:\EXP17\LIB;C:\ALASKA\XPPW32\LIB
SET INCLUDE=C:\EXP17\INCLUDE;C:\ALASKA\XPPW32\INCLUDE
ak mate aj eXpress++ 2.0, tak cesty k nemu treba napisat pred
eXpress17++ a Xbase++, teda:
SET ALINK=/PM:PM
SET XPPRESOURCE=C:\ALASKA\XPPW32\RESOURCE
SET PATH=%PATH%;C:\EXP20\LIB;C:\EXP17\LIB;C:\ALASKA\XPPW32\BIN;C:\ALASKA\XPPW32\LIB
SET LIB=C:\EXP20\LIB;C:\EXP17\LIB;C:\ALASKA\XPPW32\LIB
SET INCLUDE=C:\EXP20\INCLUDE;C:\EXP17\INCLUDE;C:\ALASKA\XPPW32\INCLUDE
Dolezita poznamka: aby vsetky demo ukazky pracovali spravne, je potrebne
mat stiahnute eXpress++ 1.7, min. verziu 208 (vid \exp17\readme.txt) demo
z nasej www stranky, + Xbase++ 1.7 demo a PFL1 a aj PFL1b
Vela uspechov v programovani Vam zela
Zdeno Bielik - ACE System
Vas Autorizovany obchodny partner pre Cesku a Slovensku republiku
http://www.xbase.sk