fox.1djelovic,
Ljubitelji Lisice,
Dobrodošli u najbržu temu na Sezamu.
fox.2dr.grba,
>> Dobrodošli u najbržu temu na Sezamu.
A sad da mi svaki obeća po jedno piće (:
fox.3sbrk,
SB> >> Dobrodošli u najbržu temu na Sezamu.
SB>
SB> A sad da mi svaki obeća po jedno piće (:
Evo ja oću, al' da ne vodiš porodicu. :)
fox.4djelovic,
> A sad da mi svaki obeća po jedno piće (:
Polako, sad Foksovci tek treba da opravdaju poverenje :). Moj najveći strah
je da će ova tema ostati prazna ako Maksima zgazi autobus :). Zato Max, pazi
kako prelaziš ulicu.
fox.5ab.comp,
==> Dobrodošli u najbržu temu na Sezamu.
Mašala!
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.6mradic,
čiveli! Dobili smo svoju temu! Ojha! ;)
Treba opravdati poverenje, pa, po protokolu, reč dajem iskusnijim
Fox-ovcima od sebe... GO FOR IT! :)
fox.7goxx,
■ čiveli! Dobili smo svoju temu! Ojha! ;)
Dosta bre više sa tim radovanjem. ;)) Punite nam pad bezveze. Ili pišite
nešto ili da vas vratimo u baze.podataka. ;)))
Goran
fox.8max.headroom,
> Polako, sad Foksovci tek treba da opravdaju poverenje :).
> Moj najveći strah je da će ova tema ostati prazna ako
> Maksima zgazi autobus :). Zato Max, pazi kako prelaziš
> ulicu.
Od kada pišem u temu, dooobro gledam em levo, em desno :) Vernim po-
klonicima Fox-a (starim i novopečenim) spremam seriju o BROWSE-ru.
Izlazi za koji dan.
fox.9max.headroom,
------------------------------------------------------------------------
ANSWERS TO COMMONLY ASKED QUESTIONS
FOXPRO FOR WINDOWS V2.5
------------------------------------------------------------------------
MAIN TABLE OF CONTENTS
Cross-Platform Questions
Interface Features
Report Writer
Screen Builder
Product Support Questions
Na FAQ se nadovezuje i:
------------------------------------------------------------------------
ADDITIONAL INFORMATION ABOUT FOXPRO FOR WINDOWS V2.5
------------------------------------------------------------------------
faqfp25w.arjfox.10max.headroom,
PSSQA.TXT
**********************************************************
Answers to Commonly Asked Questions About
Microsoft(R) FoxPro(R) for Windows(TM) Version 2.6
(C)1994 Microsoft Corporation. All Rights Reserved.
**********************************************************
========
CONTENTS
========
Part Description
---- -----------
1 Cross-Platform
2 Interface Features
3 Report Writer
4 Screen Builder
5 Printer Drivers
-----------------------------------------------------------
Na FAQ se nadovezuje i:
README.TXT
**********************************************************
Release Notes for
Microsoft(R) FoxPro(R) for Windows(TM) Version 2.6
(C)1994 Microsoft Corporation. All Rights Reserved.
This README provides information not contained in the
FoxPro online Help file or print documentation, and provides
corrections to both. Information in Help is more current than
information in the print documentation.
**********************************************************
=========
CONTENTS
=========
Part Description
---- -----------
1 New Features in FoxPro 2.6
2 New and Enhanced Commands and Functions
3 Notes about the Catalog Manager
4 Notes about Wizards
5 Macro Key Support in FoxPro 2.6
6 FoxPro and Other Applications
7 International and Cross-Platform Recommendations
8 Installation Questions and Answers
9 Product Support Questions and Answers
----------------------------------------------------------
faqfp26w.arjfox.11max.headroom,
Skup funkcija koje olakšavaju život pri pozivanju fajlova, direkto-
rijuma i još gomile slične salate gde je potrebno izvući ekstenziju,
path, dodati po koji backslash, itd, itd.
fnc1.arjfox.12mradic,
FoxPro poseduje konfiguracioni fajl CONFIG.FPW.
Kako u njega da ubelezim da mi se obrise ekran svaki put
kada udjem u Fox ili nesto slično? Probao sam sa:
command = clear
command = set defa to c:Đ...
i to ne radi. Zasto?
Pozdrav!
fox.13mradic,
█ command = set defa to c:Đ...
Kah, opet sebe ispravljam (vezani za CONFIG.FPW). Treba:
DEFAULT = c:ĐfoxprowĐ...
Ipak, ostaje pitanje: kako da mi se obriše ekran po ulasku u Fox
za Windows ili neka druga komanda (USE <baza> i sl)?
Hvala!
fox.14nbjvsa,
> FoxPro poseduje konfiguracioni fajl CONFIG.FPW.
> Kako u njega da ubelezim da mi se obrise ekran svaki put
> kada udjem u Fox ili nesto slično? Probao sam sa:
>
> command = clear
> command = set defa to c:Đ...
>
> i to ne radi. Zasto?
FoxPro dozvoljava pisanje više COMMAND naredbi u konfiguracionom fajlu,
ali izvršava samo jednu i to poslednju (zato ti i nije obrisan ekran jer
je izvršeno command = set defa to c:Đ...).
Ako ti je potrebno više COMMAND naredbi napravi jedan .PRG, npr. START.PRG
sa sledećim sadrzajem:
CLEAR
SET DEFA TO C:Đ...
.
.
a u CONFIG dodaj samo jednu naredbu
command = do START.PRG
Pozdrav Nenad
fox.15ab.comp,
==> Ipak, ostaje pitanje: kako da mi se obriše ekran
==> po ulasku u Fox
Staviš mu svič -t u (PIP) Command Line.
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.16max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#1)
BROWSE Komanda
UVOD
----
Komanda BROWSE je zasigurno najkomplikovanija i, verovatno, najviše
upotrebljavana kao alat FoxPro-a. Razmatrajući njene 32 klauzule,
ispada da joj je u HELP-u posvećeno najviše prostora. Što je najvažni-
je, moguće je sastavljati male aplikacije koristeći samo jednu BROWSE
komandu - sve u svemu, veoma funkcionalno i opšte upotrebljivo. Kroz
dalji tekst oprobani Fox-ovci će, eventualno, pokupiti po koji intere-
santni "tip of the day", dok će oni manje verzirani verovatno shvatiti
sa kakvim moćnim oruđem raspolaže predmetni paket.
BROWSE komanda se koristi za prikazivanje, odabir i unos podataka. Mo-
žete je upotrebiti bilo gde (kako programski, tako i ekranski), sa
bilo kojim skupom željenih polja, odn. podataka. Evo jednog komple-
ksnijeg primera upotrebe ove komande:
BROWSE FIELDS ;
check :1 :H=" ", ;
faktura.sifra :23 :H="Šifra kupca", ;
kupci.naziv :20 :H="Naziv kupca" :W=.F., ;
kupci.telefon :17 :H="Telefon" :R, ;
x = UPPER(kupci.kontakt):H="Osoba za kontakt" ;
WINDOW prozor ;
TITLE "Spisak kupaca kojima su poslate ponude" ;
NOAPPEND NODELETE NOMODIFY;
WHEN chkoffx4() ;
VALID:F chkonx4() ;
FREEZE check ;
NOWAIT
Kao što se iz primera da videti, komanda je "razbijena" po linijama -
što zbog preglednosti, što zbog eventualne (olakšane) promene parame-
tara. Najjednostavniji način "projektovanja" jedne BROWSE komande je
iz Command prozora - zadavanjem znaka za rastavljanje komande na li-
nije (;) moguće je interaktivno menjati i dodavati potrebne parametre
i, ako sve ispada baš kako je predviđeno, prebaciti tako kreiranu
BROWSE komandu u program.
U slučaju da polja želite prikazati po vertikali (dakle - svaki red
jedno polje), jednostavno komandu BROWSE zamenite komandom EDIT (si-
ntaksa je identična).
fox.17max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#2)
POSTAVLJANJE BROWSERA U PROZOR
------------------------------
U slučaju da koristite BROWSE komandu bez odgovarajućih parametara,
verovatno je da rezultat neće izgledati onako kakvim ste ga zamišlja-
li. BROWSE, normalno, kreira prozor u gornjem-levom uglu Desktop-a, i
prikazuje sva postojeća polja baze iz tekuće radne oblasti (work
area). Nazivi kolona su ujedno i nazivi polja, a naslov BROWSE prozora
je ALIAS ime baze.
(*) U slučaju da BROWSE komandu pozovete bez WINDOW parametra, a defi-
nisali ste i aktivirali prozor, rezultujući BROWSE prozor zauzima me-
sto u vašem, aktiviranom prozoru.
Nekako je najpametnije ne dopustiti samom Fox-u da se brine o ovim
problemima. Najpovoljnija varijanta je da sami zadate potrebne parame-
tre "gde", "kako" i "šta" - tako u vlastitoj aplikaciji nećete imati
neočekivanih "obrta", a i korisnicima će biti, svakako, udobnije.
Dakle, potrebno je zadati gde će se, na ekranu, pojaviti BROWSE pro-
zor, nazive kolona, kao i naslov samog BROWSE prozora. Programiranje
BROWSEra je, može se zaključiti, zamalo pa učenje novog jezika.
Prva stvar koju treba uraditi je, kao što je već pomenuto, definisanje
BROWSE prozora. Dakle, upotrebom DEFINE komande određujete koordinate
i veličinu prozora (u slučaju da se koristi FoxPro fox DOS, potrebno
je navesti i koja se šema boja koristi. Najčešće - COLOR SCHEME 10, te
da li želite da prozor baca senku). Međutim, tako definisan prozor NE-
MOJTE aktivirati.
Kada FoxPro vidi WINDOW parametar u BROWSE komandi, on automatski kre-
ira novu kopiju navedenog prozora. U slučaju da ste prozor već aktivi-
rali, dobićete dve kopije prozora, pa ćete biti primorani da onu
ekstra kopiju deaktivirate. Daleko je jednostavnije prepustiti BROWSE
komandi da aktivira vlastitu kopiju prozora, i po završetku upotrebe
je ukloni. U svakom slučaju, morate pomoću RELEASE WINDOW vratiti
memoriju alociranu sa DEFINE WINDOW.
Kao što gorenavedeni primer pokazuje, BROWSE FIELDS parametar prati
zadati spisak polja - svako polje se može individualno "isprogramira-
ti". Opcije koje se odnose na svako polje ponaosob se zadaju iza nje-
govog naziva i odvojene su dvotačkom (:).
Najčešće korišćena opcija uz naziv polja je :H (Header) - svakako je
korisniku lakše kada vidi "Datum rođenja" kao naziv kolone, nego
"dat_rodj" (što programeru, verujem, govori dovoljno). Dakle, da bi se
promenio naziv kolone potrebno je, posle naziva polja, uneti i:
:H="Datum rođenja"
U slučaju da je naziv kolone kraći od širine polja, on se automatski
centrira. Ako je naziv kolone duži, širina polja se povećava da obu-
hvati ceo naslov. Ova osobina "rastegljivosti" širine polja se može
zaobići korišćenjem :## opcije - dvotačka praćena odgovarajućom bro-
jnom vrednošću. Ta brojna vrednost je fiksna širina polja, nezavisna
od stvarne dužine polja koje se prikazuje, ili naziva kolone. Dogodi
li se da je naziv kolone duži, biće odsečen, kao i eventualni sadržaj
polja.
Ako dopustite Fox-u da sam odredi širinu prikazanih polja, vaš izbor
fonta utiče na njegov izbor. Fox automatski podešava širinu kolone
prema podatku koji je duži: dužini naslova, ili dužini polja. Sa fixed
fontom (Courier, ili FoxFont) takav problem se ne javlja, ali kada se
koristi neki proporcionalni font (Arial, ili MS Serif), sadržaj prvog
zapisa određuje širinu celog polja. U slučaju da je naziv kolone
kratak, a prvi zapis sadrži puno blankova, ili uskih karaktera, FoxPro
može odabrati širinu koja je preuska za ostale podatke iz kolone. Tada
je rešenje ili koristiti fixed fontove, ili opcijom :## ručno podesiti
širinu kolone.
FORMATIRANJE POLJA U BROWSERU
-----------------------------
Pošto ste izabrali naziv kolone i njenu širinu, verovatno je da ćete
hteti da neko od polja formatirate. :P= opcija vam omogućava da to i
učinite, koristeći string koji se sastoji od PICTURE, odn. FUNCTION
znakova (slično kao i kod SAY i GET komandi). Evo onih najčešće kori-
štenih:
č! Samo velika slova.
čR Tzv. "non-template" karakteri (poštanski broj, broj
žiro-računa, itd).
č$ Valuta
čL Nule se, na početku, zamenjuju prazninama.
čZ Praznine se, na početku, zamenjuju nulama.
čB,I,J Poravnavanje uz levu ili desnu ivicu, odn.
centriranje.
Normalno, karakter stringovi, datumi i Boolean vrednosti se poravnava-
ju uz levu marginu kolone, a brojne vrednosti uz desnu.
fox.18max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#3)
BROWSE VALIDACIJA
-----------------
Verovatno je da ćete hteti da odlučite da li je korisniku omogućen,
ili zabranjen unos/izmena prikazanih podataka. Da bi vam olakšali po-
sao, tvorci Fox-a su pripremili sledeće opcije za validaciju:
- :R označava polje kao "Read Only", tj. njegov sadržaj nije dozvo-
ljeno menjati.
- BROWSE NOMODIFY opcija onemogućava promenu bilo kog polja ili za-
pisa u BROWSE prozoru.
- FREEZE opcija daje korisniku mogućnost kretanja samo po određenoj
koloni.
(*) Za razliku od Fox-a za DOS, default ponašanje Windows verzije BRO-
WSER-a je da je polje na koje se stane već "selektovano", tj. priti-
sak na bilo koji taster će stari sadržaj polja obrisati i uneti novu
vrednost. Da bi se isto postiglo i pod DOS-om, neophodno je zadati
picture opciju :P="čK".
Svako polje može, takođe, imati i VALID i WHEN opcije. :W= određuje da
li je kursoru uopšte dozvoljeno da stane na odgovarajuće polje. :W=.F.
zabranjuje prelazak kursora na naznačeno polje i on, jednostavno, pre-
skače preko njega. Logičke vrednosti .T. ili .F. mogu biti i rezultati
navedenih UDF-ova (User Defined Functions).
:V= opcija je, u stvari, VALID na nivou polja. Ako zadati izraz vrati
logičko .F. - nije moguće napustiti polje, osim ako se ne pritisne ESC
taster. Ako se pritisne ESC sadržaj polja se vraća na prvobitni, i
program nastavlja sa radom.
Za validaciju podataka moguće je koristiti i "čM" funkciju za biranje
podatka iz zadate liste, i to kao deo :P= opcije. Koristeći SPACE ta-
ster skačete sa jednog na drugi ponuđeni podatak iz liste. Tako se
izbegavaju eventualne greške pri unosu, u slučaju da imate sužen skup
podataka koji čine sadržaj polja.
:V= izraz se izračunava jedino ako je sadržaj polja izmenjen. U sluča-
ju da hoćete da primorate VALID f-ju da izračunava rezultat i ako ni-
ste ništa menjali, potrebno je da dodate i opciju :F posle :V izraza
(Force Validation). Ako korisnik unese podatak koji vraća logičko .F.,
ispisuje se "Invalid Input" poruka u gornjem-desnom uglu ekrana (ako
status-bar nije aktivan). Ako želite da se pojavi neka vaša poruka o
greški, koristite :E= opciju.
Malo manje fleksibilan vid validacije podataka omogućuje :B= opcija,
koja dozvoljava samo unos podataka koji podpadaju u zadati interval
veličina. Kao i kod :V opcije, stupa u dejstvo jedino ako je podatak
izmenjen (ovo se može zaobići korišćenjem :F opcije posle navedenog
niza dozvoljenih veličina).
Evo i primera:
BROWSE FIELDS ;
polje1 :H="Naziv kolone":12, ;
polje2 :W=fwhen() :V=fvalid():F :E="Greška!", ;
polje3 :B=12000,14000:F:P="č$ 999,999", ;
polje4 :5:P="čM Da,Ne,Možda", ;
polje5 :W=.F.:H="Nema unosa"
CALCULATE OPCIJA
----------------
BROWSE komanda omogućava kreiranje polja koja nastaju kao rezultat ka-
lkulacija određenih vrednosti (npr. sadržaja neka druga dva, ili više,
polja). Calculate polje kreirate tako što kao naziv polja zadate odre-
đeni niz karaktera (po vlastitoj želji), praćen znakom jednakosti, a
potom praćen bilo kojim ispravnim FoxPro izrazom. Izraz može sadržati
matematičku relaciju između polja baze, ili konstantu, FoxPro f-ju,
UDF, ili već neku kombinaciju navedenih vrednosti. To može biti i
IIF() f-ja, čiji sadržaj određuju neka druga polja, odn. drugi fakto-
ri.
Calculate se može iskoristiti i da bi ponovno prikazalo neko polje iz
baze (njegova kopija); naravno, naslove mogi biti drugačiji. Pomenuto
se da korisno upotrebiti u slučaju da imate nekoliko dugačkih polja
koja, da bi im videli sadržaj, pomeraju čitav ekran udesno i time vas
ostavljaju bez mogućnosti praćenja podataka na levoj strani (tj. prvih
polja u BROWSE prozoru). Evo i primera:
BROWSE FIELDS
firma :12:H="Firma", ;
osoba :30:H="Osoba za kontakt", ;
telefon :H="Telefon":P="čR (###) 999-9999 9999", ;
grad :H="Grad", ;
pbr :H="Poštanski broj", ;
kredit :H="Kredit":P="č$ 999,999,999", ;
x1=firma:12:H="Firma" ;
WHEN bwhen() ;
VALID bvalid()
Moguće je koristiti i BROWSE WHEN opciju da bi se utvrdilo da li kori-
snik ima pravo da menja neki od zapisa. Ako f-ja vrati logičko .F.,
zapis se može samo čitati (read-only). Kao i kod WHEN i VALID opcija
drugih komandi, tako se ni kod BROWSE-a ne mora izračunavati izraz
koji je vezan baš za tekuće polje (ili bilo koje polje, uostalom). Mo-
žete ih koristiti za osvežavanje ekrana, skok na neki drugi zapis,
itd.
BROWSE VALID opcija određuje da li je uopšte moguće napustiti neki od
zapisa (bilo da se to pokuša kursorima, mišem, ili preko Control
menija). Kao i kod :V= opcije, ovaj izraz se izračunava samo u slučaju
da je sadržaj zapisa promenjen. Naravno, da bi se BROWSE VALID "nate-
rala" da izračuna izraz čak i ako sadržaj polja nije promenjen, potre-
bno je koristiti prekidač :F (Force Validation). Samo, obratiti pažnju
na sledeće: ako korisnik pritisne ESC taster, BROWSE prozor se zatva-
ra (odn. prestaje rad sa Browser-om), čak i u slučaju da je VALID
izraz bio .F. Ovo se može "preduprediti" tako što se ESC tasteru pri-
dodeli neka beskorisna funkcija. Primer:
ON KEY LABEL ESC *
BROWSE VALID vbrow():F
ON KEY LABEL ESC
fox.19max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#4)
BROWSER I ESTETIKA
------------------
Kao što je ranije napomenuto, postoji određeni broj faktora koji utiču
na fizičko pojavljivanje Browse prozora. Ako se prozor definiše, a po-
tom navede posle WINDOW opcije BROWSE komande, BROWSE prozor preuzima
oblik i osobine ranije definisanog prozora. Pošto se završi rad sa
Browser-om, nemojte zaboraviti da učinite jedno RELEASE pomenutog pro-
zora - tako oslobađate preko potrebnu memoriju. Evo primera:
DEFINE WINDOW prozor FROM 10,10 SIZE 20,40
BROWSE FIELDS ;
polje1:H="Prvo polje", ;
polje2:H="Drugo polje" ;
WINDOW prozor ;
NOAPPEND NOMODIFY NODELETE ;
TITLE "Demo Browse prozor"
RELEASE WINDOW prozor
(*) BROWSE NOMODIFY poseduje jedan "propust" - u slučaju da kreirate
novi zapis u Browse prozoru, bićete u mogućnosti da pomenuti zapis
menjate, sve dok iz njega ne izađete (tj. pređete na neki drugi
zapis). Da bi predupredili ovakvo "nekorektno" ponašanje, radije
koristite BROWSE WHEN .F.
IN WINDOW opcija Browser-a omogućava smeštanje Browse prozora u neki
drugi prozor, sa tim da su odsečeni scroll bar-ovi. Ako je neophodno
da se scroll bar-ovi pojavljuju, definišite drugi prozor i koristite i
WINDOW, i IN WINDOW opcije BROWSE komande. Primer:
CLEAR ALL
CLEAR
USE roba IN 0 ALIAS roba1
USE roba AGAIN IN 0 ALIAS roba2
USE roba AGAIN IN 0 ALIAS roba3
SELECT roba1
DEFINE WIDNOW t1 FROM 0,0 SIZE 10,39 DOUBLE
BROWSE WINDOW t1 NOWAIT
SELECT roba2
DEFINE WINDOW FROM 13,39 SIZE 10,39 DOUBLE
ACTIVATE WINDOW t2
BROWSE IN WIDNOW t2 NOWAIT
SELECT roba3
DEFINE WINDOW t3 FROM 27,0 SIZE 12,39 DOUBLE
ACTIVATE WINDOW t3
DEFINE WINDOW t4 FROM 1,1 SIZE 8,35 IN WINDOW t3
BROWSE IN WINDOW t3 WINDOW t4 NOWAIT
MANIPULACIJE NAD BROWSE PROZOROM
--------------------------------
Korisnik može vršiti manipulacije nad Browse prozorom na više načina -
podeliti ga na dva dela, razbiti ga na dve particije, naterati ga da
se jedna particija pojavljuje u Edit modu, onemogućiti prikazivanje
mreže linija (iliti "grid"-a), itd. Sve pomenuto se postiže upotrebom
PARTITION nnn, LPARTITION, NOLINK, LEDIT, REDIT, NOGRID i NORGRID
opcija.
Moguće je dodeliti određeni font koji će važiti za čitav Browse pro-
zor, kao i stil (znakovi su u italik-u, podebljani, ili podvučeni).
Samo zapamtite da su nazivi kolona uvek podebljani (Bold style).
U FoxPro-u za Windows-e možete menjati boju pozadine, boju izabranog
polja, izabranog teksta, i okvira Browser-a. Nemojte se mučiti sa bo-
jenjem okvira, jer zaista ne doprinosi drastičnom povećanju estetike
ekrana. Windows-i kontrolišu boju tankih osvetljenih (highlighted)
traka koje označavaju da je baš to polje izabrano. Da bi se ovo izme-
nilo, moraćete da se "provučete" kroz Control Panel/Colors meni.
(*) Kada se Browse prozor zatvori, FoxPro vrši tzv. "snapshot" (pre-
nos određenih bitnih podataka) oblika prozora i širine polja u tre-
nutno aktivni FOXUSER fajl. To, naravno, traje. Ako želite postizanje
maksimuma performansi, koristite SET RESOURCE OFF setovanje (na samom
početku programa). Bićete zapanjeni kojom će tada briznom Browse pro-
zor vraćati kontrolu programu.
fox.20max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#5)
UPOTREBA BROWSERA ZA PREGLED/UNOS PODATAKA
------------------------------------------
BROWSE komanda se najčešće koristi upravo za pregled, odn. unos odre-
đenog podatka, ili skupine podataka. To je, naravno, moguće izvesti na
još stodva načina (preko GET polja, menija, popup-a, scroll lista, bu-
tton popup-a, itd), ali ću se ovde osvrnuti samo na Browser. Za po-
četak, evo jednostavnijeg primera:
BROWSE FIELDS ;
firma :24:H="Firma", ;
adr :H="Adresa", ;
pbr :H="Poštanski broj", ;
telefon :H="Telefon", ;
fax :H="Fax" ;
FONT "FoxPrint", 10 ;
PARTITION 28 LPARTITION REDIT ;
TITLE "Firme - kupci" ;
WINDOW t1
Rezultat:
╔════════════════════════════════════════════════════════╗
║ Firme - kupci ║
╠═════════════════════Đ══════════════════════════════════╣
║ Firma │ Firma Prva Firma ║
╠═════════════════════Á Adresa Prva adresa ║
║ Prva Firma Š│ Poštanski broj 11000 ║
║ Druga Firma Š│ Telefon (011) 772-778 ║
║ Treća Firma Š│ Fax (011) 445-332 ║
║ žetvrta firma Š├──────────────────────────────────Â
║ Peta Firma Š│ Frima Druga Firma ║
║ Šesta Firma Š│ Adresa Druga adresa ║
║ Sedma Firma Š│ Poštanski broj 11600 ║
║ Osma Firma Š│ Telefon (011) 752-755 ║
║ Deveta Firma Š│ Fax ║
╚═════════════════════¤══════════════════════════════════╝
Dakle, šta time dobijamo? Prvo - Browse prozor je podeljen na dva de-
la: na levoj polovini se nalazi naziv firme, dok se na desnoj polovini
(particiji) prozora nalaze detaljni podaci odabrane firme (leva parti-
cija je u Browse, a desna u Edit modu). Kako se podaci leve particije
skroluju, tako se automatski menja i desna particija. Ovo dobro dođe
kada imamo potrebu da prikažemo zapis koji sadrži veći broj polja -
više nismo ograničeni širinom, već visinom ekrana. Da bi se korisniku
omogućio skok na određeni podatak, i potom izmena detalja, najbolje je
taster ENTER "naoružati" sa jednim ON KEY LABEL. Rutina nazvana L3HOTW
čeka pritisak ili na ENTER, ili na desno dugme miša - rutina se de-
instalirama sama, pa se posle njene upotrebe ENTER taster može no-
rmalno koristiti bez pokretanja bilo kakve naknadne ON KEY LABEL ko-
mande. Evo te rutine:
PROCEDURE l3hotw
PARAMETERS sta
IF TYPE("khotw") = "U"
PUBLIC khotw, klk, krk
ENDIF
ON KEY LABEL ENTER
ON KEY LABEL RIGHTMOUSE
IF TYPE ("sta") = "L"
STORE .T. TO khotw
KEYBOARD(CHR(23)) PLAIN
ELSE
IF sta = "IN"
ON KEY LABEL ENTER DO l3hotw
ON KEY LABEL ENTER DO l3hotw
STORE .F. TO khotw
ELSE
STORE LASTKEY() TO klk
STORE READKET() TO krk
ENDIF
ENDIF
RETURN
Upotreba je jednostavna: vi pozivate L3HOTW da bi sačekivali pritisak
na taster ENTER ili desno dugme miša. Potom se poziva BROWSE komanda.
Korisnik iz nje izlazi pritiskom na tastere ENTER, ESC, ili desno
dugme miša, ili aktivirajući 'Close' button prozora. Potom se ponovo
poziva L3HOTW da bi se ukinuo ON KEY LABEL na navedene tastere (dakle,
vraća im se prvobitna funkcija). Ispituje se promenljiva 'khotw' - ako
je .T., korisnik je napravio izbor. I obratno. U slučaju da se pri-
tisne ENTER, ova rutina, zapravo, poziva samu sebe koristeći sledeći
trik: ako je rutina pozvana zbog aktiviranja ON KEY LABEL okidača
parametri se ne prosleđuju, te je i promenljiva 'sta' tipa Logical;
rutina uoči ovu činjenicu i u keyboard buffer smesti 'Ctrl + W', da bi
se napustio Browse mod. Evo i primera kako gorenavedenu rutinu pra-
ktično iskoristiti:
DO l3hotw WITH "IN" && ENTER i desno dugme miša (d.d.m.)
BROWSE FIELDS ;
izbor1:H="Naslov1", ;
izbor2:H="Naslov2", ;
izbor3:H="Naslov3" ;
NOAPPEND NODELETE NOMODIFY ;
TITLE "Izbor" ;
WINDOW c1
DO l3hotw WITH "OUT" && U slučaju da ENTER i d.d.m. i dalje čekaju
na pritisak da bi pokrenule rutinu.
IF khotw && khotw = .T.
* Korisnik je napravio izbor ;
* sledi rutina koja nešto radi...
ELSE
* Korisnik nije napravio izbor ;
* sledi rutina koja radi nešto drugo...
ENDIF
Primetite da su uz BROWSE komandu navedene i NOAPPEND, NODELETE i
NOMODIFY opcije - to je urađeno zato što je, u ovom slučaju, Browse
jednostavna lista po kojoj se vrši izbor određenog podatka. Korisnik,
dakle, nije u stanju ništa da promeni. Kada smo završili sa Browser-
om, proveravamo stanje promenljive 'khotw' da bi saznali da li je
korisnik odabrao neki podatak. U slučaju da nam, iz nekog razloga,
zatreba - imamo i LASTKEY() i READKEY() vrednosti, takođe smeštene u
promenljive ('klk' i 'krk').
fox.21max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#6)
BROWSER I INKREMENTIRANO PRETRAčIVANJE
--------------------------------------
Do sada pominjani vid pregleda liste podataka odgovara u slučaju da ih
ima u manjem broju (stotinak, recimo). Ali, ako je u pitanju nekih pe-
tsto ili više zapisa, korisniku traženje željenog podatka predstavlja
pravu noćnu moru - najviše vremena se provede u skrolovanju. Ono što
se približava optimalnom rešenju je sledeće:
1. Korisniku se predstavi lista sa podacima (Browser, naravno).
2. Dozvoli mu se unos karaktera.
3. Svaki taster startuje rutinu koja vrednost tastera pridružuje
stringu pritisnutih tastera.
4. U aktivnoj bazi se vrši SEEK svaki put kada se stringu doda nova
vrednost.
Da ne bih dalje navodio detalje i ponavljao se, ne bi bilo zgoreg da
bacite pogled na moje prethodne poruke, gde je ovaj vid pretraživanja
(i to baš iz Browser-a) detaljno objašnjen.
IZBOR VIŠE ZAPISA UNUTAR BROWSER-A
----------------------------------
Ideja je sledeća: postoji Browse prozor u kome su liste partnera koji-
ma treba poslati fax sa ponudom. Postoji potreba da se pošalje cirku-
lar na nekoliko adresa. Postiže se na sledeći način:
* Koristi memorijsku promenljivu po principu:
* jedan karakter - jedan zapis (record)
CLOSE DATA
USE partneri
m.pickvar = SPACE(RECCOUNT())
ON KEY LABEL F5 DO toggle
BROWSE FILEDS ;
CALC = IIF(LEN(m.pickvar)>=RECNO(), ;
SUBSTR(m.pickvar,RECNO(),1),"") ;
:W=.F., partneri.firma, partneri.fax
ON KEY BLABEL F5
PROCEDURE toggle
IF LEN(m.pickvar) < RECNO()
m.pickvar = PADR(m.pickvar, RECNO())
ENDIF
m.pickvar = STUFF(m.pickvar,RECNO(),1, ;
IIF(SUBSTR(m.pickvar,RECNO(),1) = "*"," ","*"))
Ovo je, definitivno, najbrža tehnika u slučaju kada je potreban izbor
više od jednog zapisa iz Browser-a. Jedino ograničenje jeste to da ba-
za ne sme imati više od 65,000 zapisa. Međutim, ako se ispostavi da
nam treba manji broj zapisa iz neke veće baze, evo programskog rešenja
sa nešto lošijim performansama od gorenavedenog:
* Koristi indeksirani kursor
CLOSE DATA
CREATE CURSOR kursor (RECNO N(13), STATUS C(1))
INDEX ON recno TAG recno
SELECT 0
USE partneri ORDER firma
SET RELATION TO (RECNO()) INTO kursor
ON KEY LABEL F5 DO toggle
BROWSE FILEDS ;
CALC = kursor.status:H="Izbor":W=.F., ;
partneri.firma, ;
partneri.fax
ON KEY LABEL F5
USE IN kursor
PROCEDURE toggle
IF RECNO("partneri") <> kursor.recno
INSERT INTO kursor (RECNO, STATUS) VALUES ;
(RECNO("partneri"),"*")
ELSE
REPLACE kursor.status WITH IIF(kursor.status="*"," ","*")
ENDIF
U slučaju da izaberemo više od jednog, iz skupine od osam zapisa (baza
je glomazna), sledeći program bi bio nešto efikasniji:
* Koristi kursor sa jednim zapisom za svaki zapis originalne baze.
CLOSE DATA
CREATE CURSOR multpic3 (STATUS C(1))
SELECT 0
USE partneri ORDER firma
SET RELATION TO RECNO() INTO multpic3
ON KEY LABEL F5 DO toggle
BROWSE FIELDS ;
CALC = multpic3.status:H="Izbor":W=.F., firma, fax
ON KEY LABEL F5
USE IN multpic3
PROCEDURE toggle
IF RECNO("partneri") > RECCOUNT("multpic3")
FOR l_xx = RECCOUNT("multpic3") TO RECNO("partneri")
INSERT INTO multpic3 (status) VALUES(" ")
ENDFOR
GOTO (RECNO("partneri")) IN multpic3
ENDIF
REPLACE multpic3.status WITH IIF(multpic3.status="*"," ","*")
RETURN
Zapazite da navedeni kod koristi prednosti jedne interesantne Fox-ove
osobine, odn. ostavštine XBase jezika uopšte: kada se koristi nume-
rički izraz za uspostavljanje relacije sa bazom (INTO) koja nema de-
finisan "master index", FoxPro koristi broj zapisa (RECNO) odredišne
baze kao indeks. U programu, svaki put kada se pointer na zapis baze
"Partneri" promeni, FoxPro izvršava sledeću komandu:
GOTO (RECNO("partneri")) IN multpic3
fox.22max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#7)
UNOS PODATAKA
-------------
Browser-ova namena nije striktno ograničena samo na prikazivanje poda-
taka - on može poslužiti i kao, npr. tabela u koju se podaci tek tre-
baju uneti. Ako projektujete aplikaciju single-user formata (dakle,
koristi je samo jedan korisnik, na jednoj mašini), nećete brinuti o
sistemu zaključavanja podataka; korisniku možete dozvoliti da menja
podatke direktno, bez ikakvog prethodnog proveravanja nije li neki
drugi korisnik na mreži (multi-user aplikacija) počeo da obrađuje tra-
ženi zapis.
Dakle, ako ste korisniku ipak dozvolili da direktno menja sadržaj ba-
ze, ipak morate uvesti kakvu-takvu kontrolu nad kvalitetom unesenih
podataka: VALID f-je na nivou polja, kao i BROWSE VALID f-je rade
upravo ovaj posao. Naravno, da bi održali totalnu kontrolu nad Browse-
rom, pazite i na ESC taster (ON KEY LABEL) - zamislite slučaj kada ko-
risnik slučajno uđe u Browse režim rada, ili ne unese odgovarajuće po-
datke (a definitivno želi napolje iz tabele). Takođe, u slučaju da ko-
ristite sistem numeracije zapisa (ili već neku sličnu ID vrednost),
nemojte očekivati od korisnika da on sam unosi ove vrednosti - to se
da vrlo elegantno izvesti odgovarajućim push-button-om sa naslovom
"Novi zapis", odn. izborom opcije iz menija, ili pritiskom na neki od
F tastera, kada se želi kreiranje novog zapisa u bazi (bitno je da ko-
risnik sve, za njega nebitne informacije NE unosi ručno - to mnogo
preciznije može da obavi i program; primer: pomenuta ID vrednost zapi-
sa).
Stoga, kada korisnik poželi kreiranje nove stavke (novog zapisa), pro-
gram će kreirati zapis, ali korisniku neće dati pristup sve dok odre-
đena polja ne popuni odgovarajućim ID vrednostima - takvo ID polje se
može, ali i ne mora pojavljivati u Browse listi (može, takođe, sa
jednim :R biti označeno kao polje koje je moguće samo čitati). U slu-
čaju da korisnik odustane od kreiranja novog zapisa, on mora biti
izbrisan (DELETE).
U suštini, mnogo je lakše i preglednije podatke u bazu unositi preko
.SPR ekrana za unos; na početku vidite Browse listu, a kada korisnik
pritisne odgovarajućći taster ili pokrene odgovarajuću opciju menija,
otvara se pomenuta .SPR maska. Tada se problem posmatra iz drugog ugla
- podatke koje korisnik unosi NE MORA unositi direktno u bazu; podaci
se mogu privremeno smestiti u memorijske promenljive, koje, u slučaju
da je korisnik zadovoljan unesenim, jednostavno "presele" u bazu
(REPLACE...WITH...). Sledeći program demonstrira jedan od pristupa
problemu:
SELECT partneri
ON KEY LABEL F4 DO novizapis
BROWSE FIELDS ;
firma:20, ;
adresa, ;
grad, ;
drzava, ;
telefon, ;
fax ;
NOAPPEND NODELETE NOMODIFY ;
TITLE "Pregled partnera <F4> - Unos novog partnera"
ON KEY LABEL F4
PROCEDURE novizapis
PUSH KEY CLEAR
STORE 0 TO akcija
DO novi.spr && Maska koja sadrži potrebne VALID filtere.
IF akcija = 1 && Samo u slučaju da je zapis OK.
REPLACE partneri.firma WITH m.firma
...
...
ENDIF
POP KEY
RETURN
fox.23max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#8)
VIŠE BAZA I JEDAN BROWSE PROZOR
-------------------------------
BROWSE komanda omogućava programeru da u jedan Browse prozor smesti
podatke iz više baza odjednom. U primeru koji sledi prikazuju se po-
daci o isplatama novca radnicima jedne firme:
SELECT plate
SET ORDER TO datum
SET ORDER TO ime IN zaposleni
SET RELATION TO ime INTO zaposleni
BROWSE FIELDS ;
zaposleni.ime :H="Ime i prezime":22 ;
zaposleni.telefon:H="Telefon" :P="čR (###) 999-9999", ;
datum :H="Datum", ;
iznos :H="Iznos" :P="999,999.99" ;
NOAPPEND NODELETE NOMODIFY ;
TITLE "Isplate radnicima" ;
FONT "Arial", 10 STYLE "B"
Rezultat na ekranu:
IME I PREZIME TELEFON DATUM IZNOS
-------------------------------------------------------------
čika čikić (011) 555-543 11.01.95 100.00
čika čikić (011) 555-543 12.02.95 120.00
čika čikić (011) 555-543 11.03.95 90.00
Pera Mikić (011) 322-2342 10.01.95 500.00
Pera Mikić (011) 322-2342 15.02.95 560.50
Pera Mikić (011) 322-2342 16.03.95 700.00
Pera Mikić (011) 322-2342 10.04.95 720.00
itd, itd...
Još od verzije 2.0 moguće je uspostavljati one-to-many relacije. To je
dobro u slučaju da postoji parent zapis koji nema odgovarajući child
zapis - jer i njih moramo prikazati (tradicionalnom many-to-one rela-
cijom to nije moguće izvesti). Ono što sledi prikazuje išto što i pre-
thodni primer, primenom many-to-one relacije (posmatrano sa parent
strane):
SELECT zaposleni
SET ORDER TO ime
SET ORDER TO ime IN plate
SET SKIP TO zaposleni
BROWSE FIELDS ;
zaposleni.ime :H="Ime i prezime":22, ;
zaposleni.telefon:H="Telefon" :P="čR (###) 999-9999", ;
datum :H="Datum", ;
iznos :H="Iznos" :P="999,999.99" ;
NOAPPEND NODELETE NOMODIFY ;
TITLE "Isplate radnicima" ;
FONT "Arial", 10 STYLE "B"
Rezultat na ekranu:
IME I PREZIME TELEFON DATUM IZNOS
-------------------------------------------------------------
čika čikić (011) 555-543 11.01.95 100.00
********************** ************** 12.02.95 120.00
********************** ************** 11.03.95 90.00
Pera Mikić (011) 322-2342 10.01.95 500.00
********************** ************** 15.02.95 560.50
********************** ************** 16.03.95 700.00
********************** ************** 10.04.95 720.00
itd, itd...
Iako je ovaj drugi način prezentacije podataka (one-to-many) na oko
prikladniji, događa se da za jednog zaposlenog imamo toliko podataka u
bazi "Plate" da mu ime pri pregledu odskroluje sa liste (vidimo poda-
tke o isplatama, ali ne znamo o kome se radi). U tom slučaju postoji
još jedno rešenje: skroz desno u Browser-u dodati ime radnika upotrebom:
x = ime:H="Ime":20
fox.24max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#9)
VIŠE BAZA U RELACIJI, VIŠE BROWSE PROZORA
-----------------------------------------
Vezano za temu - predstavljamo korisniku tri povezana Browse prozora
(povezana relacijama, da budem precizniji). U prozoru 1 je prikazana
baza partnera; u prozoru 2 - fakture koje su mu izdate; u prozoru 3 -
baza zaposlenih. Primer:
CLOSE DATA
USE partneri ORDER firma
USE racuni ORDER racbr IN 0
USE zaposleni ORDER ime IN 0
SET RELATION TO p_sifra INTO racuni
SELECT racuni
SET RELATION TO racbr INTO zaposleni
DEFINE WINDOW jedan AT 1,0 SIZE 10,SCOLS()/2 FLOAT ;
FONT "Arial", 10
DEFINE WINDOW dva AT 1,SCOLS()/2+2 SIZE 10,SCOLS()/2-4 ;
FLOAT FONT "Arial", 10
DEFINE WINDOW tri AT 12,0 SIZE 10,SCOLS() FLOAT ;
FONT "Arial", 10
SELECT partneri
BROWSE FIELDS ;
partneri.firma, ;
partneri.p_sifra ;
NOWAIT WINDOW jedan
SELECT racuni
BROWSE FIELDS ;
racuni.racbr, ;
racuni.p_sifra, ;
racuni.iznos ;
NOWAIT WINDOW dva
SELECT zaposleni
BROWSE FIELDS ;
zaposleni.datum, ;
zaposleni.ime, ;
zaposleni.p_sifra, ;
zaposleni.racbr ;
NOWAIT WINDOW tri
ON KEY LABEL F8 DO kraj
mvar = .F.
READ VALID mvar
PROCEDURE kraj
DEACTIVATE WINDOW ALL
RELEASE WINDOW ALL
mvar = .T.
CLEAR READ
Rezultat na ekranu:
Prozor: PARTNERI
----------------------
FIRMA P_SIFRA
----------------------
Firma jedan 001
Druga firma 002
Treca firma 003
----------------------
Prozor: RACUNI
------------------------------
RACBR P_SIFRA IZNOS
------------------------------
1/95 001 100.00
2/95 003 900.50
3/95 002 114.35
4/95 001 90.00
------------------------------
Prozor: ZAPOSLENI
----------------------------------------
DATUM IME P_SIFRA RACBR
----------------------------------------
02.01.95 čika čikić 001 1/95
05.02.95 Pera Perić 003 2/95
10.03.95 Pera Perić 002 3/95
11.03.95 čika čikić 001 4/95
----------------------------------------
INTERGRISANI BROWSE
-------------------
Ponekad se pojavi potreba za uvođenjem Browser-a u READ CYCLE petlju,
i to u sledećoj varijanti: prvo se unose podaci u GET polja, a čim se
unese poslednji podatak (dakle, poslednje GET polje) - aktivira se
Browse prozor. Solucija da se to radi automatski daleko je prihvatlji-
vija od prelaska sa prozora na prozor pritiskom na taster miša ili ko-
mbinaciju tastera (ON KEY LABEL Shift+F12 ACTIVATE WINDOW browse).
Dakle, kako glasi rešenje za automatizovanje pomenutog procesa? Na
prvi pogled, odgovor je jednostavan: postaviti WHEN okidač na invi-
sible button koji se nalazi odmah do poslednjeg GET polja. WHEN opcija
se poziva na UDF koji izgleda, otprilike, ovako:
PROCEDURE winvisible
ACTIVATE WINDOW browser
RETURN .F.
Međutim, ovo neće raditi. Evo kvake:
PROCEDURE winvisible
_CUROBJ = 0
KEYBOARD "šShift+F12ć"
RETURN .F.
fox.25max.headroom,
FoxPro for DOS/Windows 2.5 - BROWSE komanda (#10)
IZNALAčENJE TEKUĆEG ZAPISA U BROWSE PROZORU
-------------------------------------------
U slučaju da se koristi gorenavedeni tzv. integrisani Browser, kori-
sniku je potrebno obezbediti indikator tekućeg zapisa. Normalno, kada
je korisnik u samom Browser-u, to nije nikakav problem (broj record-a
se ispisuje automatski). Međutim, kada ste van Browser-a, tekući zapis
se nigde ne navodi. Rešenje problema je u sledećem:
1. Potrebno je ubaciti dodatno calculated polje u BROWSE komandu.
2. Vršiti update memorijske promenljive tekućim zapisom u Browser-u.
3. Resetovati promenljivu kada se korisnik pomeri na neki drugi zapis
u istom Browse prozoru.
Primer:
CLOSE DATA
DEFINE WINDOW browse AT 1,0 SIZE 10,75 FLOAT FONT "Arial",10
USE partneri
partner = RECNO() && Postavljanje promenljive
BROWSE FIELDS ;
t1 = IIF(RECNO("partneri")=m.partner,">"," "):H="":1:W=.F. ;
firma ;
NOWAIT ;
WHEN bwhen() ;
VALID :F bvalid(čpartner, "partneri") ;
WINDOW browse
DEFINE WINDOW prozor AT 15,0 SIZE 10,75 FLOAT FONT "Arial",10
ACTIVATE WINDOW prozor
SCATTER MEMVAR MEMO
č 2,5 GET m.firma
č 4,5 GET m.grad
č 6,5 GET m.drzava
READ CYCLE
PROCEDURE bwhen
SCATTER MEMVAR MEMO
SHOW GETS WINDOW prozor
partner = RECNO("partneri")
RETURN .F.
PROCEDURE bvalid
PARAMETERS p_var, p_window
IF UPPER(WONTOP()) == UPPER(p_window)
p_var = 0
ENDIF
RETURN .T.
BROWSE I RAD U MREčI
--------------------
Kada se vrši pregled/izmena podataka preko Browse prozora, postoje
sledeće opcije koje se tiču zaključavanja zapisa:
* Dozvoliti korisniku da vrši direktan unos/izmenu podataka u Browse
prozoru, bez pozivanja na eksplicitno zaključavanje (komade RLOCK() i
sl.). Umesto toga se osloniti na FoxPro-ovo implicitno zaključavanje
zapisa koje korisnik pokušava da promeni.
* Ne dozvoliti direktnu izmenu podataka u Browse prozoru, već ON KEY
LABEL komandom čekati na pritisak tastera koji aktivira određeni .SPR
fajl sa potrebnim GET poljima - zapis koji se na taj način "povuče" u
pomenuti .SPR fajl mora se eksplicitno zaključati.
* Kada se vrši Browse children zapisa parent zapisa, potrebno je za-
ključati parent zapis pre nego što se korisniku dozvoli da uđe u Bro-
wse prozor - tako će Fox automatski zaključavati i children zapise
koje korisnik pokušava da promeni.
* Koristiti BROWSE WHEN RLOCK() komandu za eksplicitno zaključavanje
svakog zapisa na koji korisnik stane. Koristiti f-ju tipa VALID :F
funlock() koja poziva UDF za otključavanje zapisa pošto ga korisnik
napusti.
* Kada se vrši Browse children zapisa parent zapisa, iskopirati chi-
ldren zapise u kursor, u trenutku kada korisnik poželi da edituje po-
datke. Potom dozvoliti promenu podataka u kursoru i zaključati samo
originalne zapise kako bi se snimile promene nastale u kursoru.
NA KRAJU...
-----------
Šta reći, osim da je Browser sistem koji će Fox približiti korisniku
dovoljno da ovaj ne primeti "promenu sredine" (pogotovo ako pomenuti
nije imao kontakata sa kompjuterima). Dakle, navali na Browse! :)
fox.26mradic,
Svaka čast Maxu na 40 KB Browse materijala! :)
Jedno Browse pitanjce: želim da mi se otvori
Browse prozor koji će listati samo podatke koji
odgovaraju nekom upitu. Međutim, ako nema ni jednog
podatka, ne želim da mi se uopšte otvara Browse prozor.
Da li je to moguće i kako?
Zahvaljujem se unapred.
fox.27goxx,
■ BROWSE FIELDS ;
...
■ telefon :H="Telefon", ;
■ fax :H="Fax" ;
■ FONT "FoxPrint", 10 ;
■ PARTITION 28 LPARTITION REDIT ;
...
Radim clipper pa mi baš sintaksa browse komande fox-a nije jasna. Da li bi
mogla da se ovde baci sintaksa?
žini mi se da je ovako mnogo komplikovano i da recimo u clipper-u može mnogo
lepše da se sve to napiše (samo bez pljuvanja, molim :)).
Goran
fox.28ab.comp,
==> Radim clipper pa mi baš sintaksa browse komande
==> fox-a nije jasna. Da li bi mogla da se ovde baci
==> sintaksa?
Evo sintakse, a uz poruku je ostatak.
Í─────────────────────────────────Ě
║ BROWSE ║
Ë─────────────────────────────────Ż
BROWSE
ŠFIELDS <field list>Ć
ŠFONT <expC1> Š, <expN1>ĆĆ
ŠSTYLE <expC2>Ć
ŠFOR <expL1>Ć
ŠFORMATĆ
ŠFREEZE <field>Ć
ŠKEY <expr1> Š, <expr2>ĆĆ
ŠLAST đ NOINITĆ
ŠLEDITĆ
ŠREDITĆ
ŠLOCK <expN2>Ć
ŠLPARTITIONĆ
ŠNOAPPENDĆ
ŠNOCLEARĆ
ŠNODELETEĆ
ŠNOEDIT đ NOMODIFYĆ
ŠNOLGRIDĆ ŠNORGRIDĆ
ŠNOLINKĆ
ŠNOMENUĆ
ŠNOOPTIMIZEĆ
ŠNOREFRESHĆ
ŠNORMALĆ
ŠNOWAITĆ
ŠPARTITION <expN3>Ć
ŠPREFERENCE <expC3>Ć
ŠRESTĆ
ŠSAVEĆ
ŠTIMEOUT <expN4>Ć
ŠTITLE <expC4>Ć
ŠVALID Š:FĆ <expL2>
ŠERROR <expC5>ĆĆ
ŠWHEN <expL3>Ć
ŠWIDTH <expN5>Ć
ŠŠWINDOW <window name1>Ć
ŠIN ŠWINDOWĆ <window name2>
đ IN SCREENĆĆ
ŠCOLOR SCHEME <expN6>
đ COLOR <color pair list>Ć
───────────────────────────────────
Opens the Browse window.
───────────────────────────────────
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
browse.zipfox.29max.headroom,
> odgovaraju nekom upitu. Međutim, ako nema ni jednog
> podatka, ne želim da mi se uopšte otvara Browse prozor.
> Da li je to moguće i kako?
Probaj sa BROWSE...WHEN... kombinacijom, i to u odnosu na RECCOUNT()
funkciju koja vraća broj zapisa jedne baze (ako si na te podatke mi-
slio), odn. nešto odomaćenijom metodom:
IF RECCOUNT() > 0
BROWSE ...
ENDIF
fox.30max.headroom,
Spisak tema diskutovanih u PC.PROG.5:baze.podataka, a tiču se Fox-a:
11.12 ndragan Za šta služi FOXBIND.EXE.
11.12 ndragan Struktura MEMO (*.FPT) fajla.
11.4 timot FP 2.0/2.6 bug - CALC polje u Browser-u i PREFERENCE.
11.11 misa.m -//-
11.11 misa.m FP bug - PICTURE "č!" i komanda EDIT.
11.6 borko Univerzalni generator aplikacija.
11.15 ndragan -//-
11.13 ndragan Procedura za otvaranje baza + FPT Recovery algoritam
(uz poruku: REBFPT.FXP).
11.17 mradic Kako znati koja je promenljiva definisana, a koja ne?
11.18 djelovic -//-
11.39 ndragan -//- i objašnjenje sistemske promenljive _TALLY.
11.55 mradic -//-
11.27 mradic Dinamičke matrice?
11.49 mradic FP Win 2.6 problem - kako znati da li je u određeno GET
polje (promenljiva ili zapis) nešto uneseno?
11.56 mradic -//-
11.63 ndragan -//-
11.40 max.headroom Alat za kompresiju/dekompresiju podataka (Fox for Win)
(uz poruku: EDILZSSA.ARJ).
11.50 djelovic Kompresija i dekompresija podataka pod Win 3.11 (API).
11.54 djelovic -//-
11.41 max.headroom FoxPro for Windows Developer's Guide
(uz poruku: FOXDIGES.ARJ).
11.42 max.headroom FoxPro v2.0 (DOS) - Extended i Expanded memorija.
11.43 max.headroom Novosti Fox-a v2.6 for Windows.
11.45 max.headroom Tetris za FoxPro + source
(uz poruku: POPTRIS.ARJ).
11.46 max.headroom Answers to Commonly Asked Questions About Fox for Win
v2.6 (uz poruku: PSSQA.ARJ) - prebačen u R:ĐDATABASE
11.47 max.headroom Programski primer - pisanje pisama i cirkulara.
11.59 ndragan Novosti sa sajma u Mađarskoj.
11.62 max.headroom Events (događaji) i FoxPro.
11.64 ndragan -//-
11.65 gaston Program koji u Browser-u prikazuje otvorene radne
oblasti i baze u njima. Jednostavnije rukovanje bazama.
fox.31mradic,
█ Probaj sa BROWSE...WHEN... kombinacijom, i to u odnosu na
█ RECCOUNT() funkciju koja vraća broj zapisa jedne baze (ako si
█ na te podatke mi- slio), odn. nešto odomaćenijom metodom:
█
█ IF RECCOUNT() > 0
█ BROWSE ...
█ ENDIF
Verovatno je to ono što mi je potrebno, probaću.
Moj problem je jednostavan: imam dve tabele u
vezi 1:N i postavljam upit nad Parent tabelom (recimo,
prikaži samo one slogove kod kojih je 'mesto_pol = BEG',
a 'mesto_odl = NSD'). Sada on prvo treba da vidi ima li u
Parent tabeli upošte slogova koji odgovaraju upitu (ako
ih nema, ne otvarati Browse) i, ako može, ima li u Child
tabeli slogova u relaciji sa Parent tabelom.
Ako ima slogova (u Parent tabeli), prikaži SAMO
njih u Browse prozoru (kako se pomeram po Parent tabeli,
menjaju se slogovi u Child tabeli).
Ja sam napravio dva Browse prozora, ali nisam
znao kako da postavim filter, pa sam to probao sa SET
FILTER TO <...> pre Browse prozora, što je JAKO sporo i
neefikasno, zar ne?
Uostalom, počeo sam da čitam Tvoju storiju o
Browse prozoru, pa ću tamo valjda naći odgovor! :)
Pozdrav!
fox.32djelovic,
> Spisak tema diskutovanih u PC.PROG.5:baze.podataka, a tiču se Fox-a:
Hvala!
fox.33ab.comp,
==> Browse prozoru, pa ću tamo valjda naći odgovor!
==> :)
Da ne citiram redom poruku, ukratko:
Radiš LOCATE ili SEEK() ako imaš indeks sa sastavljenim
ključem:
IF SEEK('BEGNSD')
SET SKIP TO child_table
BROW parent_table.field1, ;
....................
child_table.field1, ;
... KEY 'BEGNSD' REST
ENDIF
Ako nemaš indeks, radi LOCATE i FOR umesto KEY za filter.
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.34gaston,
Evo onog mog programa i ovde, ali kao ZIP fajl, da ne trosim mgogo vremena i
prostora.
Nesa Gaston
listzone.zipfox.35max.headroom,
> Ako nemaš indeks, radi LOCATE i FOR umesto KEY za filter.
U slučaju da nemaš indeks, nemoj da te mrzi da ga kreiraš :) Drasti-
čno ubrzava stvar (na kreiranje ti ode dva minuta, pogotovo ako je u
CDX formatu).
fox.36mradic,
FoxPro problem:
BROWSE FIELDS ... ;
FOR mesto.naziv = m.od ;
...
Ne radi! Kaze da je 'OD' nedefinisana varijabla,
sto naravno nije tacno (ispred Browse-a stavim '? m.od' i
lepo se ispise vrednost). Isto mi se desava i kod SET
RELATION TO. Zasto, pobogu?
fox.37mradic,
█ Radiš LOCATE ili SEEK() ako imaš indeks sa
█ sastavljenim
█ ključem:
Super! Koristio mi je deo koda koji si napisao, radi.
Zahvaljujem! :-)
fox.38max.headroom,
FoxPro v2.5 Win
Advanced Developers' Handbook (1/5)
fpadh.arjfox.39max.headroom,
FoxPro v2.5 Win
Advanced Developers' Handbook (2/5)
fpadh.a01fox.40max.headroom,
FoxPro v2.5 Win
Advanced Developers' Handbook (3/5)
fpadh.a02fox.41max.headroom,
FoxPro v2.5 Win
Advanced Developers' Handbook (4/5)
fpadh.a03fox.42mradic,
Kako pretraživati FoxPro bazu koristeći modem?
Pišem neki program u Fox-u za Windows, i hteo bih
da, jednog dana, mogu da čitam podatke iz baze i kada
nisam kod kuće. Nije problem kompajlirati i prilagoditi
program za DOS verziju, ali šta onda? Da li preko Doorway
programa ulaziti u takav Fox sa menijima, OK tasterima i
sličnim elementima, ili praviti sasvim novi
user-interface? (Ako neko zove iz TeleMate-a, uključio
bi 'Doorway' opciju i koristio ALT+x i Control+x
kombinacije.) Može li se, putem nekih biblioteka,
povezati Fox sa modemom? Koliko je sve to brzo? Ima li
neko bilo kakva iskustva po tom pitanju? Saveti? ...
Na Infosys BBS-u svojevremeno je postojao program
u kojem su se mogle naručiti knjige. Program je pisan u
Clipper-u i radio je preko Doorway-a, sa svim poljima za
unos, kako inače ova izgledaju u Clipper-u.
Hvala. ;)
fox.43sbrk,
>> Kako pretraživati FoxPro bazu koristeći modem?
COMET-MP is an add on communications library compatible with
dBASEIII/IV, FoxBase/Pro, Clipper S87/5.0, dBXL and QuickSilver.
COMET extends these database languages by adding powerful
communications capabilities. One of COMET's most unique features
is that all of its commands operate entirely in the background
leaving your program free to do other tasks. No longer do you
have to wait for lengthy file transfers to complete before being
returned to your database application. Imagine a data entry
person posting invoices while COMET handles incoming modem calls
and performs file transfers, all in the background!
COMET-MP (multi-port) supports the simultaneous use of
upto 5 COM ports. With user defined I/O port addresses and
interrupts, COMET-MP will work on virtually any IBM PC compatible
RS232 hardware including boards manufactured by companies such as
DigiBoard and AST Research.
a.afox.44sbrk,
čao mi je zbog greške. Datoteka uz prethodnu poruku (a.a)
se ustvari stvarno zove: DMETD4FP.ZIP ;)
fox.45max.headroom,
FoxPro v2.5 Win
Advanced Developers' Handbook (5/5)
fpadh.a04fox.46djelovic,
> Advanced Developers' Handbook (5/5)
Hvala na zanimljivom prilogu. BTW, bulajo, ovo bi moglo u dir?
fox.47bulaja,
│ Hvala na zanimljivom prilogu. BTW, bulajo, ovo bi moglo u dir?
└───
Naravno. žekao sam da max pošalje sve delove, pa da to prepakujem :) u
jednu arhivu i stavim u dir.
fox.48ddabic,
> BROWSER I INKREMENTIRANO PRETRAZIVANJE
> --------------------------------------
> ..............
> ..............
> Da ne bih dalje navodio detalje i ponavljao se, ne bi bilo
> zgoreg da bacite pogled na moje prethodne poruke, gde je ovaj
> vid pretrazivanja (i to bas iz Browser-a) detaljno objasnjen.
Izvini Max ako te prekidam u necem vaznijem (divim se tvojim prilozima!!!)
ali ostalo mi je nejasno, i posle pregleda tvojih ranijih poruka o
inkrementalnom trazenju, kako da koristim ove funkcije u DOS verziji. Posto
se slabo bavim C-om (imam TC v.2.0 '88) interesuje me koji C mi treba da
bi napravio neku biblioteku i kako se to radi.
Probao sam da ono parce koda (L3INCR.C) kompajliram sa mojom verzijom
TC-a, ali fali mi onaj PRO_EXT.h. Kada uradim nesto u C kako od toga da
napravim biblioteku (za DOS ili WIN)?
fox.49sbrk,
Hi!
Evo javljam se sa jednim problemom. Nabavio sam jednu knjigu za FOX 4
WINDOWS i ukucavajući primere, jedna stvar nikako da mi proradi, a ja
nikako da ukapiram o čemu se radi, pa bih zamolio nekoga da pogleda.
Fajl će treba da se raspakuje u direktorij BOOK, staviti ga u root
diska. U dir-u BOOKĐPRG su programi, u BOOKĐSCX ekrani, u BOOKĐDBF
...
Problem verujem da nije komplikovan, ima samo tri-četr kratka sorsa:
TSCLIENT.PRG
TSMAIN.PRG
TSCLIENT.SPR
TSMENU.MPR
pre svega treba da se startuje TSSETUP.PRG da on namesti pathove itd.
Znači u Command window-u:
DO PRGĐTSSETUP
DO TSMAIN
Kada se pojavi meni Time, birati Submeni Clients. Otvoriće se prozor
(BOOKĐSCXĐTSCLIENT.SPR). E sad ..., kada se bira bilo koji POPUP
BUTTON, u gornjem desnom ćošku izađe prozorčić u kome bi trebalo da
piše NAZIV POPUPa (Add, Previous, Next...), a kada se bira EXIT, onda
bi trebalo da se da se prekine program. (Mora da se kuca ručno POP
MENU _MSYSMENU pošto program nepravilno završi rad, pa se SYSMENU ne
vrati)
U OVOME JE PROBLEM !
Promenljiva m.control u proceduri VCONTROL (u TSCLIENT.PRG) nikako da
dobije vrednost POPUPA (naziv). To treba da dobije u TSCLIENT.SPR u
liniji: (koliko sam ja uspeo da shvatim.) :)
č 8.923,9.600 GET m.pb ;
PICTURE "č*HNĐ<Add;Đ<Delete;Đ<Next;Đ<Previous;Đ<Search;Đ!Đ?EĐ<xit"
;
SIZE 1.769,10.333,0.667 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "B" ;
VALID vcontrol (m.control)
Ova promenljiva m.pb lepo menja vrednost ako se biraju različiti
POPAP-i, ali se m.control ne ažurira pravilno ?! U knjizi naravno
podrazumevaju da ovo šljaka.
O čemu se radi?
Drugo: postoji li neki Shortcut za gašenje Dos prozora u Foxu? Ona
varijanta kada se recimo kuca: RUN DIR pa se onda otvori Dos prozor,
koji onda mora da se ugasi mišem u levom gornjem ćošku. Da ne bi
jurio miša po stolu, može li to sa tastature?
sbrkbook.arjfox.50sbrk,
>> kada se bira bilo koji POPUP BUTTON,
PUSH BUTTON
Sorry.
fox.51max.headroom,
> Probao sam da ono parce koda (L3INCR.C) kompajliram sa
> mojom verzijom TC-a, ali fali mi onaj PRO_EXT.h. Kada
> uradim nesto u C kako od toga da napravim biblioteku (za
> DOS ili WIN)?
Sve što sam napisao važi, na žalost, samo u slučaju da poseduješ
FoxPro LCK (Library Construction Kit), uz koji dobijaš i pomenuti
heder (PRO_EXT) fajl. LCK je, i dalje, retka zverka na ovim prostori-
ma. Već nedeljama se preganjam sa jednim piratom koji tvrdi da ga može
nabaviti budzašto, ali bez literature (meni slaba vajda, jer se u C
razumem k'o Marica u kriv q).
fox.52sbrk,
SB> LCK je, i dalje, retka zverka na ovim prostori-
SB> ma. Već nedeljama se preganjam sa jednim piratom koji tvrdi da ga
SB> može nabaviti budzašto, ali bez literature
LCK? Imam ja.Literaturu sam zaturio ;)
fox.53bulaja,
**** new file ****
MSDOS - R:\DATABASE
----------------------
fpadh zip 437165 FoxPro v2.5 for Win Advanced Developer's Handbook
faqfp25w arj 16781 FoxPro for Win v2.5: odgovori na česta pitanja (FAQ)
faqfp26w arj 22869 FoxPro for Win v2.6: odgovori na česta pitanja (FAQ)
3 file(s) 466 kb
<thanks to max.headroom>
fox.54ddabic,
Jos jedno pitanjce u vezi Brows-a.
Kada nove zapise unosim direktno u brows preko nekog funkcijskog tastera
(on key label), a ne koristim .SPR za unos, za pozicioniranje na kljucno
polje (npr. sif_mat) koristim :W=nasif() (vidi primer) na svim ostalim
poljima osim na sif_mat, tako da je unos moguc samo u sif_mat. Ovo jeste
neko resenje ali nije dobro u svim situacijama (kad mi treba :W za neko
polje). Moze li ovo da se resi elegantnije?
Dakle, ako sam bio nejasan, kako da se dodavanjem novog zapisa u tabelu
pozicioniram uvek u isto polje nezavisno od trenutnog polozaja kursora?
....
....
on key label "+" do novi
brow fiel sif_mat :H="Sifra" :V=sifra() :E= "Neispravna sifra artikla" :F
:W=sif(), ;
sifmat.naziv :20 :H= "Naziv artikla" :W=.f., ;
sifmat.jm :3 :W=.f. ,;
kol :10 :H="Kolicina" :W=nasif() :V=zalihe() :E="Neispravno uneta kolicina",
;
pr_cena :10 :H="Cena" :W=nasif() :V=nivel() :E="Neispravna cena", ;
wind faktura
on key label "+"
.... itd.
* Dodavanje novog zapisa u tabelu
func novi
sele fakture
append blank
repl br_fakt with m.br_fakt
RETURN
* Prekidac za pozicioniranje na unos sifre artikla kada se radi novi zapis
func nasif
if empty(sif_mat) and allt(uppe(varr())) != "SIF_MAT"
RETURN .F.
ENDIF
fox.55ab.comp,
==> neko resenje ali nije dobro u svim situacijama
==> (kad mi treba :W za neko polje). Moze li ovo da
==> se resi elegantnije?
Probaj sa:
...........
pr_cena :10 :H="Cena" :W=nasif() .and. Neki_uslov() ;
------------------
:V=nivel() :E="Neispravna cena", ;
...........
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.56mradic,
█ Ne radi! Kaze da je 'OD' nedefinisana varijabla,
█ sto naravno nije tacno (ispred Browse-a stavim '? m.od' i
█ lepo se ispise vrednost). Isto mi se desava i kod SET
█ RELATION TO. Zasto, pobogu?
Heh, odgovaram sam sebi. 'OD' je nedefinisana varijabla zato sto
se program u medjuvremenu završio, a time se gube vrednosti svih
promenljivih iz procedura i slično (sem PUBLIC). Browse prozor je bio
u NOWAIT stanju! Već sam pljuvao po Fox-u i Microsoft-u, a grška je
bila u meni, c-c-c... ;))
fox.57max.headroom,
> Dakle, ako sam bio nejasan, kako da se dodavanjem novog
> zapisa u tabelu pozicioniram uvek u isto polje nezavisno
> od trenutnog polozaja kursora?
Ja problem rešavam sa serijom KEYBOARD "šTABć"-ova. Potreban broj
TAB-ova (odn. BACKTAB-ova) izračunavam na osnovu polja na kojem se
trenutno nalazim :) Može da se sredi jednostavnom FOR...ENDFOR
petljom.
>* Prekidac za pozicioniranje na unos sifre artikla kada se
> radi novi zapis func nasif
> if empty(sif_mat) and allt(uppe(varr())) != "SIF_MAT"
> RETURN .F.
> ENDIF
Kuku, al' ga nagrdi :) Što ne daš čoveku da siđe dole, ako nije na
šifri? Ništa se pogubno neće dogoditi - polje 'šifra' je jedino polje
na kome držiš :F opciju, pa će ga po koji ENTER, ili TAB viška kad-tad
doterati dotle :)
U suštini i globalu, sistem unosa fakture i jeste takav da, posle uno-
sa cene artikla, tekuće polje bude ono skroz sa leve strane (prvo).
Ona gimnastika TAB,TAB,TAB... je potrebna samo u slučaju da se čovek
prešao negde u unosu, otišao da ispravi, pa najzad rešio da unese i
novu stavku. Sav taj sport na, recimo, 286 mašini ume da bude SPOR.
fox.58sbrk,
>> Nabavio sam jednu knjigu za FOX 4 WINDOWS i ukucavajući
>> primere, jedna stvar nikako da mi proradi, a ja nikako da ukapiram
>> o čemu se radi, pa bih zamolio nekoga da pogleda.
Rešio sam problem :) Radi se o tome da promenljiva m.pb nije bila deklarisana
kao Char nego je po defaultu Num. Jedna linija m.pb = "" pre č GET linijue u
TSCLIENT.SPR je rešilo ceo problem. Knjiga iz koje je ukucao ceo primer je
pisana za Fox 2.5 4 Win. Nije moguće da je u toj verziji Foxa stavljeno da je
promenljiva u č GET funkciji Char po defaultu a u Foxu 2.6 da je Num.
postoji li neki Shortcut za gašenje Dos prozora u Foxu? Ona
varijanta kada se recimo kuca: RUN DIR pa se onda otvori Dos prozor,
koji onda mora da se ugasi mišem u levom gornjem ćošku. Da ne bi
jurio miša po stolu, može li to sa tastature?
fox.59ab.comp,
==> postoji li neki Shortcut za gašenje Dos prozora u
==> Foxu? Ona
Negde uspeva sa Alt+Space.
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.60mradic,
Hi!
Pokušao sam da u Fox-u pronađem jednu sasvim
uobičajenu finkciju, ali nisam uspeo. Reč je o funkciji
koja izdvaja (vraća) deo stringa sa određene pozicije i
određene dužine.
U Pascal-u je to COPY (<string>, <pozicija>, <dužina>).
Postoji li nešto takvo kod Fox-a (sem LEFT () i sl.)?
Hvala. ;)
fox.61oki.,
>> Pokušao sam da u Fox-u pronađem jednu sasvim
>> uobičajenu finkciju, ali nisam uspeo. Reč je o funkciji
>> koja izdvaja (vraća) deo stringa sa određene pozicije i
>> određene dužine.
>> U Pascal-u je to COPY (<string>, <pozicija>, <dužina>).
>> Postoji li nešto takvo kod Fox-a (sem LEFT () i sl.)?
U Fox-u se zove SUBSTR:
SUBSTR (<expC>,<expN1> [,<expN2>])
? SUBSTR("abcdef",3) daje "cdef"
? SUBSTR("abcdef",3,2) daje "cd"
Detalje potraži u HELP-u.
fox.62mradic,
█ Pokušao sam da u Fox-u pronađem jednu sasvim
█ uobičajenu finkciju, ali nisam uspeo. Reč je o funkciji
█ koja izdvaja (vraća) deo stringa sa određene pozicije i
█ određene dužine.
Kah, opet ispravljam sebe. ;) Kada sam postavljao
gornje pitanje mislio sam na jedno, a napisao drugo. ;)
Ne verujem da iko ne zna da postoji funkcija SUBSTR()
koja vraća baš ovo što sam u citiranom delu naveo.
No, ja sam hteo sledeće: postoji li gotova
funkcija kojom mogu određenom delu stringa da promenim
podstring? Recimo, u stringu "kompjuter" promeni peti
znak u "w" i slično. Jasno, sve se ovo može
isprogramirati kroz petlju, ali ako već postoji... ;)
Hvala!
fox.63oki.,
>> No, ja sam hteo sledeće: postoji li gotova
>> funkcija kojom mogu određenom delu stringa da promenim
>> podstring? Recimo, u stringu "kompjuter" promeni peti
>> znak u "w" i slično. Jasno, sve se ovo može
>> isprogramirati kroz petlju, ali ako već postoji... ;)
Koliko ja znam, ne. Za tako nešto sam koristio kombinaciju
LEFT(..)+"w"+SUBSTR i sl., zavisno po potrebi. Mislim da ti
neće biti teško da jednom napraviš takvu jednu funciju koju
posle izrabljuj po želji. :))
fox.64ab.comp,
==> znak u "w" i slično. Jasno, sve se ovo može
==> isprogramirati kroz petlju, ali ako već
==> postoji... ;)
Imaš STUFF().
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.65sbrk,
U vezi sledećeg POPUP-a:
DEFINE POPUP klient ;
FROM 1,0 TO 13,30 ;
PROMPT FIELDS PADR(klient.id,15)+"đ"+klient.naziv ;
TITLE "Izaberi klienta" ;
FOOTER "Izaberi klienta" ;
IN WINDOW klient
Trenutno mi Fox po default-u koristi neki proporcionalan
(verovatno) SYSTEM font u ovom POPUP-u što mi pravi 2 problema:
a) nema naših slova (inače je u pitanju W4Wg CEE) i
b) proporcionalan je, tako da nikako ne mogu da izvedem da ona
uspravna linija gore ("đ"), bude u istoj vertikali sa ostalima.
Ili da se upotrebi neproporcionalan font ili da se nekako odredi
dužina stringa u milimetrima, inčima - svejedno. Kao neka naredba
PADR ali da se dužina stringa ne određuje brojem slova, nego
dužinom u mm, recimo.
1. Može li da se promeni font u POPUP prozoru? Kao i font za Header
i Footer.
2. U HELP-u kaže da se TITLE i FOOTER ignorišu u Fox-u 4 Windows ???
Kod mene rade.
fox.66ndragan,
Izvinjotka svima, promaklo mi je svečano otvaranje. Sad ću ja da vas
stignem.
Max, drži tebe, dolećavam :)
fox.67ndragan,
/ command = clear
Osim toga, ima još dva programa koji se mogu navesti poimence u konfigu,
to su
_startup="[ime_programa]"
_shell="[ime_programa]"
Mislim da ima još jedan, markira se kao _assist='...'. Ne znam kako se
tačno određuje redosled pozivanja ako se navedu sva tri, videti u
početnim poglavljima helpa. A, da, po difoltu se prvo poziva onaj CatMan
(and the other cat people).
fox.68ndragan,
/ kupci.naziv :20 :H="Naziv kupca" :W=.F., ;
Moguća je čak i ovako trikovita kombinacija:
alias.polje : p=fn() , ...
Fn() može da bude bilo kakav izraz, funkcija itd, bitno da je string i
da se ponaša kao pikčer. Kombinujući sa : V=vf() : ...
postigao sam da u jednoj koloni imam u nekim slogovima pikčer 999.999, a
u drugim samo 9 - ne pitajte za šta mi je trebalo. Valid funkcija,
inače, ima pet redi, a pikčer je glasio p=iif(ima_ono,"999.999","9")
fox.69ndragan,
/ i veličinu prozora (u slučaju da se koristi FoxPro fox DOS, potrebno
/ je navesti i koja se šema boja koristi. Najčešće - COLOR SCHEME 10, te
Što se veličine prozora tiče, najbolje mi se svidela (u dosu) varijanta
sa
define window za_brauz from 4, -1 size 12, scol()+1
tako da levi i desni okvir leže tačno izvan ekrana. Dobro, nestao je
klizač, ali slučaj za koji mi je trebalo je selekcija dva tri sloga iz
baze od 20, tako da se pitanje skrola ni ne postavlja.
/ čL Nule se, na početku, zamenjuju prazninama.
/ čZ Praznine se, na početku, zamenjuju nulama.
Obrnuo si: @L daje leve nule, @Z daje blenkove ako je vrednost nula.
tran(1, "@L 999") --- '001'
tran(1, "@Z 999") --- ' 1'
tran(0, "@Z 999") --- ' '
fox.70ndragan,
/ - :R označava polje kao "Read Only", tj. njegov sadržaj nije dozvo-
/ ljeno menjati.
...ali može da se šeta kursorom preko njega, što i nije loše ako je
polje duže nego što je širina kolone, pa onda može da se prošeta
kursorom do (nevidljivog) kraja stringa, koji onda postaje vidljiv, jer
string skroljne ulevo.
Ako vam treba preskakanje kolone, najbolje je da u nju ulaze na sveti
nikad, tj :w=.f.
Inače, foksov brauz ima ružnu osobinu da kad ste u numeričkoj koloni
imali, recimo, 19, pa počeli da kucate 2; ako je kolona dovoljno široka
da ono 2 nije pregazilo ni prvu cifru od 19, a iz polja izađete
strelicom naviše/naniže, u polju ostaje 219. Enter vas, naravno, spasava
toga, ali on vas vodi u kolonu desno. Jedno rešenje je
push key
on key label enter keyb '{enter}{dnarrow}' plain
browse ...
pop key
...pa onda lepo koristite enter i on vas vodi u polje _ispod_ tekućeg.
/ Za validaciju podataka moguće je koristiti i "čM" funkciju za biranje
Ovo ne radi u dos verziji, kao i neke druge varijante ludačkih pikčera -
jednostavno, ono što ne može da stane u jedan red, neće ići, a za @M baš
kaže da ne može.
fox.71ndragan,
/ Ja problem rešavam sa serijom KEYBOARD "šTABć"-ova. Potreban broj
Pade mi sad na um da bi, ako već varr() pozvan za vreme brauza vraća
ispravan naziv kolone u kojoj je kursor, možda i _curobj trebalo da
sadrži redni broj kolone. U tom slučaju bi i jedno
Store 1 to _curobj
moglo da odradi skok na prvu kolonu, i to direktno, bez viška
osvežavanja ekrana (što serija tabova vrlo lako može da izazove, ako si
se bar malo preračunao sa veličinom prozora).
fox.72ndragan,
/ 2. Vršiti update memorijske promenljive tekućim zapisom u Browser-u.
/ 3. Resetovati promenljivu kada se korisnik pomeri na neki drugi zapis
/ u istom Browse prozoru.
Ovo ume da bude sporo, i to pod dosom, a da ne spominjem prozore. Da bi
se rečeni indikator iole pomerio, foks svaki put osvežava ceo brauz
prozor. Probaj čuveni test zvani 'baza od 7000 slogova i leganje na
strelicu naniže'. U suštini, nema načina da se bilo šta promeni u
browse...nowait prozoru osim ponovnog aktiviranja brauza ili show window
bwtitle refresh, a ako to očekuješ da će da radi brzinom kojom tatastura
ponavlja pritisnut taster, neće ići.
Rešio sam taj problem (kao i farbanje tekućeg sloga) pod dosom, a za
pendžere nemam živaca - sve je tako grozno sivo/belo. Za efikasno
farbanje treba Visual Fox 3.0, barem.
fox.73ndragan,
/ odgovaraju nekom upitu. Međutim, ako nema ni jednog
/ podatka, ne želim da mi se uopšte otvara Browse prozor.
Locate for ...
if found()
browse rest for ...
endif
Obrati pažnju na _rest_ - kad si već utrošio vreme da nađeš prvi slog,
ovim stavljaš foksu do znanja da brauz ne krene opet ispočetka da traži,
nego od tekućeg sloga nadalje. Dosad nenađebivo najbrža kombinacija,
naročito ako postoji indeks po polju koje ulazi u uslov (ne mora da je
aktivan indeks, samo da je otvoren).
fox.74ndragan,
/ postoji li neki Shortcut za gašenje Dos prozora u Foxu? Ona
Pif editor - tamo treba nešto da se pročačka. Vidi u helpu za Run, piše
i šta treba. Ja sam u stvari imao obrnut problem - štogod pozovem,
odskroluje i nestane, zatvori prozor pa nemam pojma šta je ispisalo.
Mislim da i taj može da se zatvori sa alt+f4.
fox.75ndragan,
/ funkcija kojom mogu određenom delu stringa da promenim
nov_string=Stuff(stari_string, od, koliko, zamena)
od - od kojeg znaka počinje zamena
koliko - koliko znakova se zamenjuje. Može bilo šta od 0 do preostale
dužine stringa
zamena - string koji se ubacuje umesto izbačenih znakova
Jednostavno i moćno, i sasvim brzo. Postoji i u kliperu, sa istim
parametrima.
fox.76sbrk,
>> / postoji li neki Shortcut za gašenje Dos prozora u Foxu? Ona
>>
>> Pif editor - tamo treba nešto da se pročačka. Vidi u helpu za Run, piše
>> i šta treba.
Fala, ali sam problem rešio tako što sam poslušao nekoga ovde ko mi je
predložio Alt-Space-C.
fox.77ab.comp,
==> Fala, ali sam problem rešio tako što sam poslušao
==> nekoga ovde ko mi je predložio Alt-Space-C.
Definitivno rešenje bi trebalo da bude ispravka u FOXRUN.PIF
koji se nalazi u FPW dir-u. Treba aktivirati opciju Close Window on
Exit.
Ukoliko to neće da radi treba proveriti da li se koristi neki
DOS BAR ili sličan program i u njemu kao i u _DEFAULT.PIF, DOSPRMPT.PIF
i NOCLOSE.PIF proveriti da li je aktivirana navedena opcija.
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.78gcurcic,
Ima li neko pojma šta znači misteriozna poruka 'Use of transgressed file
handle', za koju u helpu piše da se valja obratiti MS-u lično. Poruka
se povremeno javlja na aplikaciji pisanoj u Foxu 2.0 + DK i prethodi pucanju
aplikacije. Šta može biti uzrok?
Ndragane, Max?
fox.79ndragan,
/ aplikacije. Šta može biti uzrok?
Javlja se to još od mfoxplus (pardon, tamo je bilo fatal error 0008
while attempting to report error 0008, ovo se vuče od FP1.00 naovamo).
Skenjalo se nešto u internim tabelama. Ako ne izađe u dos, pomoći će
pravoslavni reset. Uzrok može biti bilo šta, prljavo pisan TSR, matorija
verzija upravljača memorijom... štogod hoćeš. Jedino rešenje je da se
vidi gde se to javlja, da se procedura rastereti (smanji se broj
otvorenih baza, prozora), da se pobrišu slogovi u foxuser koji čuvaju
konfiguraciju vezanu za taj slučaj, a pomaže i da opsuješ.
E, da, postoji mogućnost brljotke u nekom .fxp fajlu, prekompajliraj za
svaki slučaj. U .pjx tome odgovara Replace all timestamp with 0 pa
ponovo zidaj .exe ili .app. Moguće je da je i zaglavlje bloka u nekom
memo polju otišlo u ocov, prepakuj memo.
fox.81sbrk,
Ako neko poseduje disketu sa source-om koja ide uz knjigu:
CREATING FOXPRO APPLICATIONS by George F.Goley IV, Founder of Micro Endeavors,
Inc.
umoljavam ga da se javi! Moja disketa neće da se pročita :( A ja sam govorio
drugaru koji mi je nosio disketu da se ne vozi u trolejbusu. ;) Al'
sad je kasno.
fox.82ddabic,
> Pade mi sad na um da bi, ako vec varr() pozvan za vreme brauza
> vraca ispravan naziv kolone u kojoj je kursor, mozda i _curobj
> trebalo da sadrzi redni broj kolone. U tom slucaju bi i jedno
_curobj - vraca samo broj objekta u aktivnom get-u !!!
fox.83ndragan,
/ _curobj - vraca samo broj objekta u aktivnom get-u !!!
Da, probao sam i ja posle. Hm, malo je bez veze, bilo bi dobro da neka
generalna rutina za švrljanje po brauzu može da zna u kojoj je koloni
kursor, ne samo po imenu nego i po rednom broju.
fox.86sbrk,
Da li neko ima knjigu
Inside FoxPro 2.5 for Windows ?
Hitno.
fox.87sbrk,
Da li je neko probao ovo:
kada se napravi nezavisni EXE u Foxu 2.6, a u source-u postoji naredba
SCATTER, EXE pri izvršenju prijavljuje grešku ?!
fox.88sbrk,
žitam stare poruke u vezi Foxa i naiđem na
LIBRARY TOOLKIT FOR FOXPRO (DOS & WINDOWS)
zna li neko šta je ovo? Isto tako je i Max nekad davno ;) tražio neke
biblioteke za Fox:
>> Kategorija Naziv
>> --------------------- ------------------------------------------
>> Grafika Espia, dGE, SilverPaint, FoxGraph, SunShow
>>
>> Serijska komunikacija CommTools, SilverFox SPCS
>>
>> NetWare biblioteke NetLib, FPNet, GPLib
>>
>> Client-Servers Biton/ORACLE, RaSQL
a ima tu i neki FireFox koji je spomenuo MDrazic u onom prikazu nekog
takmičenja programskih jezika, biblioteka...
Jel vredi nešto odavde?
fox.89m.dzigurski,
Napravio sam .EXE od jedne aplikacije u Fox-u 2.6 za Windows, pa me
interesuje da li je moguće promeniti naslov glavnog prozora (piše
'Microsoft FoxPro')?
fox.90ab.comp,
==> interesuje da li je moguće promeniti naslov
==> glavnog prozora (piše 'Microsoft FoxPro')?
Staviš mu jedno:
MODIFY WINDOW SCREEN TITLE 'This is not Microsoft FoxPro';
FOOTER 'Prati radnju! Ne gledaj u tastaturu!'
Pozdrav
█ █ █ █
▄▄█ █ █▄▄ █▄▄
fox.91ndragan,
/ Jel vredi nešto odavde?
Ako nije zglomazno, bači sve. Naročito ono u vezi sa ser Oraklom.
fox.92sbrk,
>> / Jel vredi nešto odavde?
>>
>> Ako nije zglomazno, bači sve. Naročito ono u vezi sa ser Oraklom.
Ma nemam ja ništa od ovoga, nego pitam dal' da se bacam u poteru za nečim sa
spiska?
fox.93ndragan,
Povremeno me zeza jedna stvar, mislim da je foksov bag. Radi se o upisu
u memo polja. Recimo da prva i treća imaju memo polja i nekakve sadržaje
u njima, druga baza je tek tako da bude selektovana:
use prva in 1
use druga in 2
* ako je codepage=852 u config.fp, može šđć u imenima:
use treća in 3
repl memo3 with 'bum-tra-la-la'
sele 2
repl prva.memo1 with treća.memo3
E sad bi trebalo da je prva.memo1='bum-tra-la-la', međutim najčešće se
ništa ne događa, ostaje kako je bilo. Foks se ništa ne buni, ponaša se
isto i kad je excl On i kad je Off. Nisam probao da izričito zaključam
slog (a hoće to da ima uticaja, naprimer Edit na memo polju se ponaša
kao Disabled kad se da Read NoLock).
Dakle, selektovana jedna baza, a iz druge u treću prepisujem memo polje.
Ponekad ga prepiše, a najčešće neće, osim ako baš selektujem bazu u čije
memo polje pišem.
Ima li neko neka iskustva sa ovim problemom?
fox.94sbrk,
Taze informacija:
Danas sam se čuo sa jednim drugarom koji je u Kanadi. Kaže:
"Drž' se FoxPro-a, neverovatno se traže programeri u Foxu, satnica za
programera u Foxu je 70 dolara."
! - kažem ja.
fox.95nbatocanin,
> "Drž' se FoxPro-a, neverovatno se traže programeri u Foxu,
> satnica za programera u Foxu je 70 dolara."
Izgleda da je tvoj drug naleteo na leglo Foxovaca :) U Kanadi imam
oko 20 prijatelja koji rade u računarskoj struci, sa svima sam u
stalnom kontaktu i često pričamo o tome šta se traži. Programiraju u
svemu i svačemu, počev od C-a, C++, COBOL, Oracle, Clipper, Informix,
Progres, BASIC, ... ali mi niko nije ni jednom pomenuo neku
specijalnu potražnju za Fox programerima. Ono što je sigurno, to je
da se za baze traži Oracle, a za razvojno okruženje je sve traženiji
Windows.
fox.96sbrk,
Napravljen je jedan screen pomoću Screen Wizarda (SPR). U najdonjem redu stoje
buttoni: Top Next Prev End Add Locate ...
Kada se strelicama namesti kursor na button Next i kad se pritisne Enter, ekran
se osve
ži sa podacima sledećeg sloga i kursor pređe na sledeći button - Prev.
Da li postoji neki jednostavniji način (ili bilo kakav) da se izvede da
pritisak Entera ostavi kursor u aktivnom buttonu, da ga ne pomera na sledeći a
u isto vreme da dok je kursor u poljima gore (recimo u unosu ili izmeni) da
pritisak na Enter normalno skoči na sledeće polje?
Znači dok je kursor na buttonima da Enter ostavi kursor na tom buttonu gde je
bio kad se stisnuo Enter, a kad je kursor na poljima (a ne na buttonima) da
Enter skoči na sledeće polje.
fox.97sbrk,
>> Da li postoji neki jednostavniji način (ili bilo kakav) da se izvede da
>> pritisak Entera ostavi kursor u aktivnom buttonu, da ga ne pomera na
>> sledeći a u isto vreme da dok je kursor u poljima gore (recimo u unosu
>> ili izmeni) da pritisak na Enter normalno skoči na sledeće polje?
Rešenje je jednostavno, da ne mož' biti jednostavnije:
u literaturi o Foxu koju sam čitao se akcije koje proizvode Buttoni uglavnom
rešavaju jednom generalnom procedurom kojoj se svi buttoni obraćaju preko VALID
opcije @ .. GET naredbe - nešto kao: VALID button_val ('EDIT').
Za ovo što sam ja tražio: da dok je kursor na buttonu da pritisak na enter NE
pomeri kursor na sledeći objekat je dovoljno na kraju procedure npr. button_val
staviti jedno RETURN 0.
fox.98ndragan,
/ Da li postoji neki jednostavniji način (ili bilo kakav) da se izvede
/ da
Probaj da u valid proceduri zapamtiš _curobj u neku promenljivu, a onda
da je na kraju upišeš nazad u _curobj, naprimer
_tmpobj=_curobj
Do Case
case <dugme1>
...
tra la la
endc
_curobj=_tmpobj
retu .t.
Druga varijanta je da probaš da menjaš prompt na tom objektu, i na onom
koji je ranije bio difolt objekt, tako što ćeš ovome turiti \! ispred
(da bude difolt dugme) a onome starom skinuti. Za ovo treba da držiš
jednu promenljivu sa rednim brojem difolt objekta, tako da znaš koji ti
je bio poslednji difolt.
Inače, cela ta filozofija sa dugmićima za šetnju kroz bazu mi ide na
levo a i na desno ono_čega_imam_dva, a foks (a i ostale pendžerske i
slične Xbase okoline) upravo je obožavaju. Zamisli knjigovođu koji treba
da proknjiži hiljadu stavki za jedno radno vreme (norma je oko 800, a
znam operatere koji su išli do 1600). On sad pre svake stavke treba da
(mišem, tabom, vrućim ključem) dođe do dugmeta "new" i okine ga, pa onda
da bude pripušten u unos, a onda da potvrdi (još jedna vožnja) da to što
je ukucao hoće i da mu bude upisano na disk (dugme "save", tj spasavaj
(se ko može)).
Da bude crnje, u Paradoksu, a sad vidim i u Vidigabre Lisici za Prozore
3.0 (beta pred puštanje), ti dugmići se nalaze u alatnici (toolbar - ima
li neko bolji prevod), dakle van okvira obrasca (form?). Šetnja do tamo
i nazad.
Za masovni unos, po meni, bolje je da se obrazac stalno nalazi u režimu
unosa, a enter na poslednjem polju/kontroli da upisuje na disk. Na taj
način ponovo dobijamo ono što smo imali još pre deset godina: jednoručni
unos podataka. Sve što vam treba nalazi se na numeričkom delu. Tab za
prelaz na sledeće polje? Ergonomijo, majko, pa to je na levoj strani!
Levom rukom obrću papire koje obrađuju.
Šta misli cenjeti kolegijum o ovoj temi?
fox.99nbatocanin,
> dobijamo ono što smo imali još pre deset godina:
> jednoručni unos podataka. Sve što vam treba nalazi se na
> numeričkom delu. Tab za prelaz na sledeće polje?
> Ergonomijo, majko, pa to je na levoj strani! Levom rukom
> obrću papire koje obrađuju.
>
> Šta misli cenjeti kolegijum o ovoj temi?
Rekao bih da je za sada filozofija da bude šareno, a detalji će doći
kasnije ;)
fox.100gcurcic,
¨˙> Šta misli cenjeti kolegijum o ovoj temi?
Jašta! Pošto sam video kako to kod konjkurencije izgleda, ja seo i napravio
pgmče u kojem se unos naloga najviše dopada mom ćaletu. Kakvi butončići, kakvi
bakrači! Knjigovođe to vole prosto (a da imaju sve pred nosom):
(za finansijsko)
╔════════════════ FINANSIJSKO KNJIGOVODSTVO ════════════════╗
║ _naziv_firme _br.naloga _date() ║
ă───────────────────────────────────────────────────────────Â
║ _br.stavke uk_duguje uk_potražuje _saldo ║
ă─────┬─────┬───┬───┬──────────┬────────────┬───────────────Â
║ │ │ │ │ │ │ ║ <- ovde se
║ │ │ │ │ │ │ ║ skroluje
║ │ │ │ │ │ │ ║ zadnjih
║ │ │ │ │ │ │ ║ desetak stavki
║ │ │ │ │ │ │ ║
║ │ │ │ │ │ │ ║
║ │ │ │ │ │ │ ║
ă─────┴─────┴───┴───┴──────────┴────────────┴───────────────Â
║datum konto sif1 sif2 opis duguje potražuje ║ <- ovde su polja
ă───────────────────────────────────────────────────────────Â za unos
║ _naziv_konta naziv_dokumenta ║
║ _naziv_komitenta (to je sif1) ║ <- ovde su
pomoćni
║ _naziv_r.j. (to je sif2) ║ ('podsećni')
╚═══════════════════════════════════════════════════════════╝ podaci
Još samo PgUp i PgDn za prelaz u prethodni/sledeći slog (ako treba neka
ispravka), Ctrl-B za brisanje stavke, Ctrl-K za poziv cincilatora i knjigovođe
site i živci na broju.
Uzgred, pitanje: kako se snalazite sa 286 radnim stanicama pod Novelom?
Toliko je sporo da za takve instalacije moram da kompajliram na Foxu 2.0.
fox.101sbrk,
Ne mogu da nađem u helpu FOXa koji fajlovi predstavljaju EXE support library,
valjda ih ima 5? Jel' zna neko?
I, da li Stand-Alone EXE kompajliran sa Extended FOXom na 486-ici radi na
286-ici? Pretposta sa 1 MB rama. Trebalo bi da radi, al' ne znam provereno.
A ovaj Stand-Alone-Extended verovatno NE radi na toj istoj 286-ici sa 1 MB.
fox.102ndragan,
/ Rekao bih da je za sada filozofija da bude šareno, a detalji će doći
/ kasnije ;)
Ako ih ikad bude. Idu mi do nekle na... taman ustališ neku filozofiju
svog interfejsa, i nas pedeset uradimo takve stvari, svako na svoj
način, i onda neko to pokupi i da psiholozima i ostaloj bratiji, i onda
izađu smernice (ko ono za Meka, sa potonjim prepisima i preradama,
zaključno sa pokazivanjem i kliktanjem).
Onda to postane standard.
Zvrčka je što je ceo taj interfejs zamišljen za opštu upotrebu u samim
prozorima, tj kad hoćeš nešto da radiš od kućnih poslova, dakle za
dijaloge, a ne za maske za unos, posebno ne za masovni unos.
Malo sam proradio ovo sa svojim projektantom (on radi globalni deo, moje
je da to pretočim u baze i aplikaciju), i on tvrdi da je situacija kad
neko ima 800 stavki za jedno radno vreme stvar loše organizacije, zašto
se sve to sliva u centralu i zašto nema računara tamo gde se stvarno
događa. Tu jeste u pravu, ali zamisli velik magacin koji treba da se
izinventariše preko vikenda. Voleo bih da vidim proračun troškova za
instalaciju kojom bi to mogli da rade pod pendžerima, i da za svaku
stavku moraju da klikću na dugmiće ko sivi soko.
Da se razumemo, mašina na kojoj radim je 486/40 sa 16M, pod dosom samo
zvoni, a pod win95 je za neku nijansu brže nego pod starim pendžerima -
jeste ekran brži, ali po potrošnji duvana vidim koliko ga često čekam
dok promulja po disku. A da mulja, mulja. "Checking your hardware" traje
maltene kao defragmentacija. Očin proverava hardver - nema pojma, traži
drajvere po disku :)
fox.103ndragan,
/ bakrači! Knjigovođe to vole prosto (a da imaju sve pred nosom):
I pazi sad, oni su mušterije, dakle u pravu su i treba im dati to što su
tražili i što hoće da plate. Video sam nekoliko dobrih rešenja, i ovo
tvoje je među boljima.
E, nek proba neko da ubedi knjigovođu koji je navikao na ovako lagan
unos, da treba da odvoza miša do alatnice, klikne na ikonicu praznog
papira, pa unese stavku, pa klikne na ikonicu diskete da mu se to i
zapiše, pa onda ispočetka. E da, ako hoće da preskoči neko polje, ne sme
da pritisne Enter, nego Tab.
Javite mi kakva je reakcija :)
fox.104ndragan,
/ Ne mogu da nađem u helpu FOXa koji fajlovi predstavljaju EXE support
/ library, valjda ih ima 5? Jel' zna neko?
To bi trebalo da su ona tri .ES? fajla (par .ESO i .ESL za preklapačku
verziju, i samo jedan .ESL velik kao ta dva zajedno za produženu), s tim
da bi trebalo nositi i
foxr.exe (da startuje .app - .exe se inače pravi tako što se on
linkuje na .app)
config.fp (da sadrži makar liniju Resource=off ili ćeš morati da
nosiš i)
foxuser.dbf, .fpt (ako vidiš .idx, obriši odmah - to je zaostalo od
poslednjeg reseta pa ga foks nije obrisao sam)
foxpro.int - tabele za kodne strane. Za naš 852 raspored može da se
stavi Set Collate to "Slovak", lepo slaže Š između S i T, jedino što
sortira č ravnopravno sa c, a ć dođe posle kao posebno slovo.
/ A ovaj Stand-Alone-Extended verovatno NE radi na toj istoj 286-ici sa
/ 1 MB.
Bilo šta u proširenoj verziji zahteva minimum mega ipo produžene (na
286) a može isto i proširene (386+), mada... 286? To bi trebalo zakonom
zabraniti. Uspeo sam jednom da pokrenem preklapačku verziju (2.6) na
286, mogao sam korak po korak da pratim kako iscrtava ekran. Ono što na
386 uradi ko je reko keks, na 286 se primetno vuče ceo minut. Ne
preporučujem.
fox.105gcurcic,
¨˙> Ne mogu da nađem u helpu FOXa koji fajlovi predstavljaju EXE support
¨˙> library, valjda ih ima 5? Jel' zna neko?
¨˙> I, da li Stand-Alone EXE kompajliran sa Extended FOXom na 486-ici radi
¨˙> na 286-ici? Pretposta sa 1 MB rama. Trebalo bi da radi, al' ne znam
¨˙> provereno.
Za 2.0: osim učitavača (jel to prevod za loader? ;> - FOX.EXE, FOXR.EXE,
FOXL.EXE), FOXPRO.ESL, FOXPRO.ESO, FOXPROX.ESL, FOXPROL.OVL; ako
koristiš foxove drajvere za štampače još GENPD.APP i PROAPI16.EXE
A za 2.6 (ako se ne varam) još FOXDX260.ESL, FOXPRO.INT, FOXSTART.APP i
valjda DRIVER2.PLB.
Za drugo pitanje: na 486tici možeš da formiraš Simple executable koji će raditi
na 286tici. Extended verzija je rezervisana za 386tice (SX) i više.
Hintić: kada loaderom startuješ .APP-likaciju, možeš ga naterati da ti se
Extended verzija startuje i na 386tici sa manje od 2MB slobodne memorije:
FOX -M1000 XYZ.APP
fox.106dulev,
Da li je neko probao Fox 2.6 za Win i ODBC sa Oracle-om?
Sta imam:
- Oracle 6 na Unix-u
- Fox 2.6 na Win 3.11
- Odogovarajuce verzije TCP...
Sta se desava:
Access vidi Oracle, V.Basic, CA Visual Objects... svi vide Oracle
i sljaka bez problema. (Na ISTOJ masini, isti WIN, isti TCP, isti
Oracle, SVE isto.)
Medjutim, Fox se UBIJE (Module Foxprow .... GENERAL ERROR ..... )?
(Karadza)
(dv)
fox.107gcurcic,
¨˙> Malo sam proradio ovo sa svojim projektantom (on radi globalni deo,
¨˙> moje je da to pretočim u baze i aplikaciju), i on tvrdi da je situacija
¨˙> kad neko ima 800 stavki za jedno radno vreme stvar loše organizacije,
¨˙> zašto se sve to sliva u centralu i zašto nema računara tamo gde se
¨˙> stvarno događa. Tu jeste u pravu, ali zamisli velik magacin koji treba
¨˙> da se izinventariše preko vikenda.
Dal' je tvoj projektant nekad obučavao magacionere? Tuga božija. Prvo,
nikad nemaju vremena. Drugo: muka im je da uče bilo šta novo. Treće:
kod nas je osnovni kriterijum kod zapošljavanja magacionera da je jak
i zdrav (masan i debo) kako bi mogao da pripomogne pri utovaru/istovaru.
Samo sam jednom video da je direktor, kad je ubacio comp u magacin,
zajedno sa mašinom ubacio i ženu koja je dotad radila pozadinski nanos
za taj magacin. Svi su se smejali ("taj kompjuter im samo napravi gužvu
u magacinu"), ali se njih dvoje lepo organizovalo - on prima i predaje
robu, utovaruje i istovaruje, dok mu ona sređuje svu dokumentaciju. Sa
njima nikad greške, a nije da nemaju posla...
fox.108gcurcic,
¨˙> I pazi sad, oni su mušterije, dakle u pravu su i treba im dati to što
¨˙> su tražili i što hoće da plate. Video sam nekoliko dobrih rešenja, i
Samo mi ovo nije jasno: moduli oko kojih sam se namučio ko žuti mušterije
ostavljaju mrtvim-ladnim, a nešto što sam ubacio za mož' nekad da zatreba...
Recimo, 132-kolonski prikaz ih oduševljava, kao i Print Preview izveštaja
(prosto odštampano u fajl i MODI COMM trt-mrt NOMODIFY) umesto browse-a
(TAB, gde to beše?), pa foxov calculator i diary. A ja se zamajavao oko
prepravljanja GENPDa da šaljem štampu u RipeFAX-ove *.LET fajlove sa sve
skenjiranim potpisom i džidžamidžama!
Definitivno, najbolji potrošači usluga su sekretarice u raznim Vele Komerc
Internacional Xolding Trade Export-Import Company Promet corp ltd firmama.
Brate, nabaciš joj Winword i neki Bitfax, uradiš 3-4 templejta sa logotipom,
instaliraš faxmodem, dolaziš 5-6 dana... Plus pićence, žensko društvo i
friendly environment. Možda se nađe i neki budući poslić... A i vlasnici
tih malih firmi nikad ne cepidlače oko honorara.
fox.109madamov,
> E, nek proba neko da ubedi knjigovođu koji je navikao na ovako lagan
> unos, da treba da odvoza miša do alatnice, klikne na ikonicu praznog
> papira, pa unese stavku, pa klikne na ikonicu diskete da mu se to i
> zapiše, pa onda ispočetka. E da, ako hoće da preskoči neko polje, ne sme
> da pritisne Enter, nego Tab.
Zavisi od alata i od toga koliko je programer želeo da utroši vremena
(viđao sam ja žešće nebuloze u Fox i Clipper DOS programima tipa da čovek mora
da prođe celu masku udaranjem 30 puta na enter da bi došao do "dugmeta" za
odustajanje, nemoj mi reći da je to brže od kliktanja mišem na Cancel dugme),
ovi moji se i nisu baš preterano bunili kad su iz Clipper programa prelazili na
moje čedo na Meku. Stvar navike i umešnosti programera, tj. manje umešnosti
koliko želje da se stvari naprave onako kako treba, a ne kako svi rade. Doduše,
ja sam malo subjektivan, tj. u specifičnoj sam situaciji jer razvijam program
za firmu u kojoj radim, kod mene (potrudio sam se da tako napravim
organizaciju) knjigovođe unose prilično malo podataka, više od 50% stvari im je
već uneseno od strane komercijalista, sekretarica, osoba koje vode blagajne i
bankovne račune i slično, knjigovođa i računovođa to odobravaju za knjiženje
ili im odbijaju, kliktanjem i shift-kliktanjem smeštaju grupe dokumenata u
odgovarajuće naloge za knjiženje itd. Alat u kome radim mi omogućava da ovakve
stvari relativno brzo uradim (uskoro će se, nadam se, pojaviti i za Windows pa
ćete moći da vidite o čemu pričam), a da sam se opredelio za Fox za Meka ne bi
mi na pamet palo da implementiram takve stvari u aplikaciju.
fox.110sbrk,
Ne mogu nikako da pronađem šta znači poruka o grešci:
kada se startuje Stand-Alone EXE, javlja FILE NOT FOUND, a ispod tog prozora o
grešci, na ekran napiše
13
0.5
[Enter]
Fox mi se nalazi u pathu, kada se startuje APP iz FOXa, ne prijavljuje se
nikakva greška.
Ako odgovorim sa Ignore, dalje sve lepo radi; na Cancel izbaci u DOS.
Verzija Fox-a je FP4Dos 2.6, startovanje je iz DOS-a.
Zna li neko?
fox.111majstor,
Dodje i MS Visual FoxPro na 13 disketa. Proba li neko ovo ????
fox.112spantic,
> Dodje i MS Visual FoxPro na 13 disketa. Proba li neko ovo ????
Ja imam neku verziju na 10 ED disketa, ali izgleda da je to
ipak bila beta. Dosta je lepo radila, mada osim prevođenja
starih programa iz Fox 2.6 for Win ništa nisam ni probao.
fox.113sbrk,
>> kada se startuje Stand-Alone EXE, javlja FILE NOT FOUND, a ispod tog
>> prozora o
>> grešci, na ekran napiše
>>
>> 13
>> 0.5
>> [Enter]
Niko? OK, onda jedno drugo (lakše?) pitanje:
da li nekako može da se izvede u FOX-u nešto kao IDLETIME HOOK? To bi bila neka
stalno aktivna (znači i onda kada user ništa ne kuca, a nalazi se bilo gde: u
READ-u, READ CYCLE-u, MENIju...) a mogla bi konkretnije da se iskoristi za
recimo neko brojanje vremena od zadnjeg pritisnutog tastera, da bi mogla da se
aktivira neka poruka (autorska reklama ili kontextni help ili bilo šta).
Pošto je u FOX-u skoro svaka akcija usera EVENT a za svaki EVENT je moguće
aktivirati UDF, da li postoji nekakva rezidentna funkcija koju ne aktivira
ni jedan EVENT nego je stalno aktivna (naravno, ako je programer aktivira).
Pritom nisam mislio na READ TIMEOUT (šta ako user nije u READ-u i šta ako bi
programer hteo da aktivira neku UDF posle nekog vremena).
fox.114max.headroom,
> Jašta! Pošto sam video kako to kod konjkurencije izgleda,
> ja seo i napravio pgmče u kojem se unos naloga najviše
> dopada mom ćaletu. Kakvi butončići, kakvi bakrači!
> Knjigovođe to vole prosto (a da imaju sve pred nosom):
Jasno. Nebulozno je praviti bilo kakav button bar, jerbo na
korišćenje istog odleti 50% vremena pri unosu naloga. Nekako
sam zaključio da je najbezbolnije APPEND u bazu raditi preko
nekog od F-tastera (F5 ili F9), a prikaz prepuštam BROWSEr-u.
Ne znam da li si implementirao :) sledeće - pri startovanju
programa obavezno pita "Odaberite firmu sa kojom ćete raditi",
u slučaju da čovek knjigovodstveno servisira više od jedne
firme. Potom program do daljnjeg ostaje na izabranoj firmi -
tako operatera spašavaš unošenja tog jednog (u praksi često
jednog te istog) podatka. Think about it.
I još nešto - obavezno na ekran gurni DUGUJE, POTRAčUJE i SALDO,
najbolje u dnu BROWSE prozora (da ne bude zabune, to su SUM
vrednosti). Tako se olakšava vizuelna kontrola.
Special tip: po unosu naloga ne dozvoliti izlazak (ili ga dozvoliti
opciono) ako je nalog u neravnoteži (SALDO<>0). U svakom slučaju -
stavi knjigovođi do znanja da's može zeznuti propusti li tekući
nalog u bazu.
fox.115gcurcic,
¨˙> Jasno. Nebulozno je praviti bilo kakav button bar, jerbo na
¨˙> korišćenje istog odleti 50% vremena pri unosu naloga. Nekako
¨˙> sam zaključio da je najbezbolnije APPEND u bazu raditi preko
¨˙> nekog od F-tastera (F5 ili F9), a prikaz prepuštam BROWSEr-u.
Ja ne koristim F-tastere. Nekako nisu pri ruci (od XT-ove pa naovamo:))
Umesto toga, slog u tabelu dodajem po unosu zadnjeg polja u read-ciklusu
(potvrdim sa enterom, što kaže moja koleginica)
¨˙> Ne znam da li si implementirao :) sledeće - pri startovanju
¨˙> programa obavezno pita "Odaberite firmu sa kojom ćete raditi",
¨˙-
¨˙> I još nešto - obavezno na ekran gurni DUGUJE, POTRAčUJE i SALDO,
¨˙> najbolje u dnu BROWSE prozora (da ne bude zabune, to su SUM
¨˙> vrednosti). Tako se olakšava vizuelna kontrola.
Dabome, sve to i još puno lipi' stvari... Tipična je situacija ako su radili
na programu koji im je samo prikazivao tekući stav i kumule za dug. i pot.
Kada vide moje ekranče sa browserom, uslede primedbe da je 'maska pretrpana'
i da im se više sviđao 'prazan ekran'. Posle tri dana reakcije su obično
upravo suprotne.
¨˙> Special tip: po unosu naloga ne dozvoliti izlazak (ili ga dozvoliti
¨˙> opciono) ako je nalog u neravnoteži (SALDO<>0). U svakom slučaju -
¨˙> stavi knjigovođi do znanja da's može zeznuti propusti li tekući
¨˙> nalog u bazu.
I ovo mora. U svakoj prilici radim ovakve kontrole. Malo produžava posao,
ali me posle manje boli glava.
fox.116omega,
Da li može da se izbegne da pritisak na ESC terminiše READ?
fox.117oki.,
:: Da li može da se izbegne da pritisak na ESC terminiše READ?
Što da ne, pre READ staviš
ON KEY LABEL Esc KEYBOARD "{neki drugi}" ili
do neka_procedura ili
wait window "Ne može ESC !" :)
fox.118vgenije,
HI
Mom ortaku je potrebna jednoa verzija fox-a za windows.Pa ako ima neka
dobra dusa koja je slobodna da mi to prekopira naka se javne na mail
hvala unapred i izvinjavam se zbog poruke koja manje vise i nije u
skladu sa temom
fox.119ndragan,
/ Dal' je tvoj projektant nekad obučavao magacionere? Tuga božija.
Da citiram dr Stjepana Hana:
"Sad se svi oni, naravno, boje, jer misle da, kad dođu računari, više
neće moći da kradu. I neće, bar ne oni, nego će moći neki drugi, koji to
budu umeli."
To je osnovni razlog otpora. Inače, imali smo iskustva i sa neverovatno
nepismenim osobljem, ama se sve to naučilo redu kad ih je šef pritegao,
čak su naučili, verovao ili ne, da rasporede navodnike u nazivima firmi,
a većinom su do kraja naučili čak i da sami odrede gde dođu velika slova.
Pošto smo stalno nešto doterivali, navikli smo ih na večite promene, i
mogu da kažem da su ukupno dva-tri puta tražili da vratimo nešto iz
prethodne verzije. Opet, to znači da su nove verzije pravljene prema
njihovim potrebama (ponekad i prema željama).
fox.120ndragan,
/ ostavljaju mrtvim-ladnim, a nešto što sam ubacio za mož' nekad da
/ zatreba...
...zato ja ubacujem pre svega ono što im treba :)
fox.121ndragan,
/ da prođe celu masku udaranjem 30 puta na enter da bi došao do
/ "dugmeta" za odustajanje, nemoj mi reći da je to brže od kliktanja
/ mišem na Cancel dugme),
Svi (svi, svi :) moji korisnici u prvih pola sata nauče gde je ESC, a u
prvih nedelju dana naviknu da ga nabodu žmurećki. Dugmići? Kakvi
dugmići?
fox.122gcurcic,
¨˙> čak su naučili, verovao ili ne, da rasporede navodnike u nazivima
¨˙> firmi,
Auuu, krećemo se u različitim krugovima :)
To plješte apostrofe (i leve i desne), tarabe, zvezdice, procente, kose
crte, po afinitetima, a desi se da nabodu i pokoji navodnik ;)
Uf, što južnije to tužnije!
fox.123gcurcic,
¨˙> ...zato ja ubacujem pre svega ono što im treba :)
Pa i ja, samo što oni definišu potrebe tek kada im plasiraš prvu verziju.
Ima veze i u nastupu: ako im se pojaviš i kažeš 'ovo radi ovako tu-i-tu,
ovo mora ovako' oni neće mnogo da namišljaju. A ako im razvučeš žvaku
'pa hm kupac je uvek u pravu - o'ma počnu da bistre politiku'.
fox.124madamov,
> Dugmići? Kakvi dugmići?
Oni za koje je ESC tastaturna skraćenica. B)
fox.125ndragan,
/ da li nekako može da se izvede u FOX-u nešto kao IDLETIME HOOK? To bi
Ne, bar ne zaključno sa 2.6 (u 3.0 još nisam našao, ali postoji objekat
tipa tajmer koji bi mogao da se aktivira makar u sakrivenom prozoru ili
kao sakriven objekat, pa bi to radilo posao).
Ja sam stvar rešio onoliko koliko mi je trebala: u READ naredbama (ima
ih ukupno tri do pet u bilo kojoj mojoj aplikaciji) stoji TIMEOUT, na 5
do 20 minuta (kako gde), sa reakcijom na isteklo vreme - zatvara se
maska i vraća se u prethodni nivo.
Druga situacija u kojoj mi se aplikacije često nalaze su rutine za
postepeno približavanje (ztv incremental search) koje koristim za sve i
svašta (što rekao kolega, ne znam da li je catal6.prg programerska
okolina ili ceo jezik), tamo ima jedan inkey(180). Posle tri minuta
reaguje kao da je pritisnut ESC i izlazi.
Ostaje problem što meniji nemaju vremensko ograničenje, pre svega zato
što se foks još od prve Pro verzije polako približava prozorskoj
filozofiji (zato je sistemski meni takav kakav je), a gde ste videli
aplikaciju za prozore koja reaguje na to što već pola sata niste
aktivirali ništa u meniju? Skrin šejver nije reakcija aplikacije, nego
šire okoline.
Najbliže "rutini koja okida redovno" što sam napravio je "rutina koja
okida dovoljno često", a štos je u tome da njeno ime predajem svom
drajveru menija (ne generišem programe za menije - čitam ih direktno
iz baze u memoriju) koji je poziva svaki put kad se uđe ili izađe iz
neke tačke menija.
Što se tiče tog nedostatka reakcije na časovnik u samom foksu, to je
ušlo u neki papir sa spiskom bagova i primedbi, što sam prosledio do
čoveka u Majkrosoftu, ali mislim da od toga ionako neće biti ništa -
FP za DOS će živeti koliko i DOS. Nema daljeg razvoja, moraćemo živeti
sa ovom verzijom do daljnjeg ili preći na VFP 3.0 itd. Možda će neka
firma otkupiti pravo na dalji razvoj pod dosom, ali mi se čini da i
Japanci kubure sa nestašicom kamikaza.
fox.126ndragan,
/ Dodje i MS Visual FoxPro na 13 disketa. Proba li neko ovo ????
Probao, ama od posla ne postižem da ozbiljnije pročačkam. Nemam pojma
koliko disketa, iskopirali smo CD na servera pa odande instaliramo, a
instalacija je tako glatka da sam klisno kod sekretarice na kafu dok
bude gotovo. Jedino (isti zajeb ko i fpw2.6), treba isključiti skrin
šejver, jer instal pauzira dok on žvrlja.
Imam beta verziju, zasad su jedini ozbiljni primećeni bagovi na
dokumentatoru (na svakoj rutini je ispisao u zaglavlju da poziva sve
ostale rutine iz fajla), i opet ono što me dovelo do ludila sa fpw2.6,
ne mogu da promenim font u (dbf-style) help prozoru. Menjao sam sve
moguće fontove koje W95 dozvoljava da se promene, a ovo je izgleda font
za svece (potpisi ispod ikona), tako da sam jedva pročitao neke novosti,
sve buljeći u monitor do ujutro.
Elem:
- READ je mrtav, emulira se.
- BROWSE je mrtav, emulira se.
- meniji su ostali kakvi su bili - tj, kako u ostalim prozorima, tako
i u foksu
- API funkcije su redom nabrojane u helpu, ko voli nek izvoli
- sve je skroz objektno, sa sve nasleđivanjem, potklasiranjem
- uvedene su zbirne baze (.DBC - database containers), u kojima stoje
kompletne okoline - koje su baze otvorene (i gde, pošto je moguće
praviti klijent aplikacije koje pišu/čitaju sa SQL servera), sa kojim
relacijama, koja su pravila koja treba da potvrde upis / ispravku /
brisanje.
- uvedeni su imenovani pogledi (view) gde se pamte neke stvari iz SQL
pretraga, SQL transakcija itd.
- baferisanje baza (optimističko i pesimističko), sa transakcionom
obradom (naredbe Begin Transaction & End Tr.) žesto će trebati funkcija
TableUpdate() i TableRevert()
- smeštene procedure
- .scx sadrži samo snipete i to za delove koji se razlikuju od koda u
roditeljskoj klasi. Kompajlirane verzije su takođe unutra. Nema
generatora - maska trči direktno iz .scx, otvarajući po potrebi .vcx
(class libraries) uzvodno, dok ne dođe do samog foksa.
Aj dosta za ovaj put.
fox.127ndragan,
/ Da li može da se izbegne da pritisak na ESC terminiše READ?
Moglo bi sa Read Save, pa ako je ReadKey() bio 12 (valjda, proveri),
onda ponovo Read Save. Ne zaboravi da uradiš Clear Gets na kraju, inače
getovi ostaju zapamćeni za sledeći Read.
fox.128sbrk,
Hteo sam da pri kreiranju menija (FP 2.6 DOS) u Menu Builderu zadam i MESSAGE -
onu centriranu liniju u poslednjoj liniji ekrana i vidim da takve opcije
(zadavanje MESSAGE klauzule) nema nigde ?! Ima Skip for, # Bar, Hot Key itd. a
MESSAGE - nema. Znači trebalo bi generisati MPR pa onda ručno ubacivati. A šta
kad se meni promeni? Opet ići u MPR?
Da nisam ja nešto propustio? Možda MESSAGE ipak negde može da se zada?
fox.129mishas,
Zdravo,
ja dosta koristim FOX-ov sistemski meni tako sto ga prevedem na srpski.
To lepo radi ali ne znam kako to da uradim za BROWSE MENU. Nigde nemam nazive
bar-ova i td. Ocekivao sam to da nadje u HELP-u itd ali nista! Ima li neko
id3ejeju?
fox.130max.headroom,
Pozdrav svima. 'Vako...
1. Ima li neko ideju kako napraviti brz parser .INI fajlova, nešto u
stilu Windows-ovih kreacija, a koji će raditi po principu:
ŠtemaĆ
var1=vrednost1
var2=vrednost2
...
2. Da li ste zainteresovani za, nazovi optimajzer, Fox-ovog koda (da
budem precizniji, .PRG fajlova)? Šta bi tu sve moglo da prođe?...
Hmmh, nešto poput parsera linije (nije tako teško izvesti), na šta
se nabudži par promenljivih koje prate IF...ENDIF i ostale sitne
uslove, potom promenljive koje čuvaju podatke o petljama, zatim
jedan SQL-da-sve-izgleda-lijepo, i, kao poslastica, vremenska
upoređivanja vašeg i novokreiranog koda. :) Al' bi to bilo lepo...
fox.131bambi,
Znam da je ovo najstarije i verovatno najdosadnije pitanje za iskusne
korisnike fox-a ,ali moram da ga postavim.
Mozete li mi preporuciti literaturu za Fox for Win na nasem i eng.
jeziku.
Hvala
fox.132bambi,
A, da zaboravih da dodam ,po mogucstvu FOX 2.6 for win.
fox.133gcurcic,
¨> Mozete li mi preporuciti literaturu za Fox for Win na nasem i eng. jeziku.
Dovoljna je ona koja se dobija u paketu. Teška je otprilike kao giter blok!
Par 'iljada strana, pis of kejk ;) A i štampana je na nekom anti-moljac papiru
čiji me opori miris podseća na FLIT ili FONAR insekticide!
žitava mi polica smrdi na Fox!
Mani se literature, u help fajlu imaš sve što ti treba.
fox.134smarkov,
> ŠtemaĆ
> var1=vrednost1
> var2=vrednost2
Valjda je zzivotic svojevremeno u Računarima opisao skeleton takvog sistema
u Računarima - u formi C-a. Ako se iz Fox-a zovu C funkcije - eto rešenja.
fox.135max.headroom,
> u Računarima - u formi C-a. Ako se iz Fox-a zovu C
> funkcije - eto rešenja.
Pa, i nije baš neko rešenje :) U svakom slučaju, hvala za tip -
probaću da nađem tekst i ev. ga prevedem u Fox formu.
BTW, Kroz Fox nije moguće (posebno onu DOS ver.) terati C source.
fox.136max.headroom,
> Mozete li mi preporuciti literaturu za Fox for Win na
> nasem i eng. jeziku.
Možda bi ti pomoglo da pročitaš neke tekstove koje sam svojevremeno
ostavio u temi baze.podataka - inspirisani su knjigama izvesnog George
F. Goley-a, čija su mi se izlaganja učinila manje suvoparnim i nekako
efektnijim u odnosu na konkurentna izdanja. U slučaju da neznaš kako
da počneš, ili rešiš neki od problema, slobodno ostavi poruku - po-
stoje ljudi koji će ti rado pomoći.
fox.137mishas,
Niko!?
Pa mozda nisam bio dovoljno jasan? Pokusacu blize da objasnim. Kada zelim da u
svoju aplikaciju pozovem neke Foxove rutine napr. kalkulator ja u meni
stavim:BAR # _MST_CALCU ili za HELP stavim BAR # _mst_MST_HELP ili kad zelim da
omogucim pomeranje prozora ja u meni stavim: BAR # _MWL_MOVE itd.
E sad kako da primeni isto i na rutine is BROWSE menija? Npr. kako da
omogucim prelaz izBRiz BROWSE u CHANGE mode i sl. ali tako da ponudip
programski kontrolisan BROWSE meni a ne da korisniku dam engleske nazive?
fox.138mishas,
Evo me opet nagovorili su me da jednu DOS aplikaciju prenesem na Mac-a,
a sada posto je korisnik zadovoljan radi dalje prodaje vratio sam je u Fox4win
sve je u redu ali mi nesto ne dostaje K. Naime na MACu sam sva GET polja
KKKKKKKKKKKKpolja postaviou bilderu tako da se vide u tri dimenzije. Na MACu
kad definises polje on te lepo pita 2dim ili 3dim. Transporter mi je sva takva
polja preveo u 2dim. Nisam se uzbudio i usao sam u bilder u Fox4win da promenim
u generatoru, ali gle cuda takve opcije nema u Foxu za windows. Da li je moguce
da to ne mogu da setujem automatski vec moram posebno da "crtam" polje po
polje. Znate ono box pa gore i levo belo dole i desno tamno i sl!?
Izvinjavam se zbog "rukopisa" - ja sam novi ovde - pa se nisam jos svikao.
Uzgred zna li neko taj stari vic?
fox.139ndragan,
/ Da nisam ja nešto propustio? Možda MESSAGE ipak negde može da se zada?
More, uvati GenMenu i dodaj opciju, tamo gde generiše "Prompt <trtmrt>"
dodaj i jedno
if !empty(message)
\\;
\ Message "<message>"
endif
Za unos poruke se snađi iz brauza ili tako nečeg.
fox.140ndragan,
/ bar-ova i td. Ocekivao sam to da nadje u HELP-u itd ali nista! Ima li
/ neko id3ejeju?
Id1ejeja je da pogledaš onu funkciju (sys(2013)) koja daje nazive svih
opcija u sistemskom meniju i to snimiš u nešto _za vreme brauza_,
najbolje iz neke globalne When funkcije. Tamo bi trebalo (proveri) da se
nalaze i trenutne opcije za Brauz meni, pa možeš da pohvataš i njihova
imena. Onda primeniš postupak kao i dosad, s tim da bi, ukoliko to ne
radiš heks editorom nego u trku, mogao da napišeš standardnu funkciju
koja bi menjala promptove jednom na početku brauza. BTW, stvarno, kako
to radiš?
Pajz šta kaže u helpu:
<system option name>
... For example, to provide access to the FoxPro Calendar/Diary
from a popup named Other, you could create the option with the following
command:
DEFINE BAR _MST_DIARY OF OTHER PROMPT 'Enter Appointments'
Whenever this option is chosen from the popup, the Calendar/Diary is
opened.
Not all system menu popups are available for user-defined menus.
Options on conditional menu pads (Browse, Screen, Project, etc.) are not
available.
For a list of system menu names, use SYS(2013).
fox.141ndragan,
A propao čitanja ini fajlova, probao sam na brzinu da napravim nešto:
/ ŠtemaĆ
_sele=sele()
Create Cursor Trtmrt (txt m)
Appe Blank
appe memo txt from "koji_ono.ini"
oldmm=set("memo")
set memo to 254
ml=atcline("[tema]",txt)
if ml>0
_mline=ml+2 && malo da odmaknemo
red=mline(txt,1,_mline)
do while ltrim(red)#"[" and _mline<len(txt)
je=at("=",red)
if je>0
* eventualno bi legla Public deklaracija za promenljivu...
* recimo Public (left(red,je-1))
* a mogla bi pre toga proba da li promenljiva već postoji...;
o tom potom, zasad da joj turimo vrednost:
store eval(subs(red,je+1)) to (left(red,je-1))
endif
red=mline(txt,1,_mline)
endd
endif
set memo to oldmm
use
sele (_sele)
Ovo sam napisao onako, iz glave, ama mislim da bi za pola sata moralo da
proradi. Rutina za pisanje .ini fajlova, međutim... pa, morala bi da ima
bar ove parametre: ime fajla, ime sekcije, ime promenljive, vrednost.
Xm, moraću ovo i da isprobam.
(pet minuta kasnije:)
Poslao sam kroz mrežu kolegi na drugu mašinu - kompajlira se bez greške
(izuzev naredbe "ovo sam napisao onako...", javlja grešku u sintaksi -
on meni da kaže da ne znam srpski, nanu li mu naninu), a problem je u
samoj sadržini: .ini fajl treba da ima format naredbe za dodeljivanje,
tj da izgleda ovako:
[sekcija]
cPromenljiva1="nekakav string"
nPromenljiva2=87897803254.32
lPromenljiva3=.f.
dPromenljiva4={01.01.95}
...samo zato da se funkcija Eval() ne zabunjuje. Probali smo sa
numerikom, radi. Probali smo sa system.ini, zbunjuju ga tačke levo od =,
kaže "Alias SYSTEM not found" (našao je system.drv=). žudno, nije javio
"must be a memory variable" kao što javlja kad se to uradi iz komandnog
prozora.
Uzgred, analizu linije bi trebalo obogatiti i preskakanjem komentara.
/ 2. Da li ste zainteresovani za, nazovi optimajzer, Fox-ovog koda (da
/ budem precizniji, .PRG fajlova)? Šta bi tu sve moglo da prođe?...
Naprimer,
da nađe makro zamene i predloži imenske izraze gde ima
smisla (gomila stvari u programima iz ranijih verzija nije radila bez &
operatora, a od 2.0 nadalje više ne mora),
da nađe stringove koji se pojavljuju više puta u programu i uradi
#define i ispozamenjuje
da nađe "do while !eof() ... skip ... enddo" i zameni sa "scan ...
endscan"
da nađe "select druga ... seek... if found()... endif... select prva"
i zameni sa "if seek(...,'druga') ... endif"
da nađe "select baza ... append blank ... replace ovo with ono..." i
ubaci "insert into baza (<polja>) value (vrednosti)"
da zameni "do while i<20 ... i=i+1 ... enddo" sa "For i=1 to 20...
EndFor"
Ovo su stvari koje sam često morao da čačkam na starim programima, a
mislim da bi ih valjalo automatizovati.
fox.142nbatocanin,
>> u Računarima - u formi C-a. Ako se iz Fox-a zovu C
>> funkcije - eto rešenja.
>
> Pa, i nije baš neko rešenje :) U svakom slučaju,
> hvala za tip - probaću da nađem tekst i ev. ga prevedem
> u Fox formu.
Pisao sam i ja za Clipper. Možda vam bude lakše da prevedete u Fox :)
fox.143cnenad,
Da li neko radi sa FoxPRO 4 Win 2.6 & DK ?
Interesuje me kako da počnem sa pravljenjem PRAVE Windows aplikacije (dakle,
prozori, button, i sve ostalo) i da to povežem. Do sad sam provalio foru
za FILE NEW MEN/NEW/MENU i tu kreiram menije koje mogu da probam sa TRY IT i to
je
sve.
fox.144cnenad,
=> Interesuje me kako da počnem sa pravljenjem PRAVE Windows aplikacije
=> (dakle, prozori, button, i sve ostalo) i da to povežem. Do sad sam
Donekle sam provalio da treba ići preko PROJECT-a tj. sve što se pravi
strpati u PROJECT, a onda pustiti FOKS da promeša, zabiberi i to je to.
Ono što mi nikako ne ide u glavu je princip po kojem sve to radi.
Ako bih se zadržao na sintaksi xBase jezika (kao i Clipper) i išao po
principu:
PROCEDURE glavna
* tralala, pišem ja kod
RETURN
sigurno daleko neću stići ; međutim FOX me iznenađuje brdom ekstenzija
MPR, SCX, MNX i ostale da ih sad sve ne nabrajam, dok je pod Clipper-om bilo
PRG, kompajliraj, linkuj i vozi. Iznenađuje jer ne znam šta sve treba strpati
u PROJECT. A većinu onoga što strpam kad otvorim vidim SORS u čijem
zaglavlju nema PROCEDURE ili nešto slično pa me sve to zbunjuje.
S toga mi trebaju što preciznije smernice najbitnijih stvari u FOX-u...
Kad smo već kod MENIJA, napravim ja iz zezanja jedan u kojem stoji DATOTEKE
i POMOĆ. Pod pomoć definišem KOMANDU ? 'ovo je probni program' a pod DATOTEKE
opciju KRAJ i u njoj RETURN / CANCEL
Kada aktiviram program i odem na KRAJ ne dogodi se ništa tj. ne vrati mi
FOX-ove menije...samo na ekranu ostane COMMAND window i to je to.
Onda moram napolje iz FOX-a pa ponovno učitavanje FOX-a... :(((
Naravno, dokumentacije za sad nemam :(((( i nemojte mi preporučivati HELP
(koji jeste dobar i ima puno informacija, ali samo za komande i funkcije)
a nikako smernice kako POžETI od nečeg.
fox.145sbrk,
Iz onog teksta koji je ovde ostavio MDrazic vidim da je za najbolju biblioteku
za FoxPro (Add-On) proglašen FIRE FOX. Da li je neko video ovo čudo, kako
izgleda, čemu služi (đe izlazi, ša radi), gde može da se nabavi...
Možda je neko čuo za neki CD Rom iz Singapura na kome se nalazi ovo?
fox.146sbrk,
>> => Interesuje me kako da počnem sa pravljenjem PRAVE Windows aplikacije
>> => (dakle, prozori, button, i sve ostalo) i da to povežem. Do sad sam
>>
>> Donekle sam provalio da treba ići preko PROJECT-a tj. sve što se pravi
>> strpati u PROJECT, a onda pustiti FOKS da promeša, zabiberi i to je to.
Ja mogu da ti preporučim ono šta sam ja uradio:
skini SVE poruke iz SVIH PC.UTIL i PC.PROG, teme baze.podataka i fox. Uđi
editorom, obriši šum i pročitaj SVE bar dva puta (ja sam tri puta :)
Srećno! :)
fox.147cnenad,
=> skini SVE poruke iz SVIH PC.UTIL i PC.PROG, teme baze.podataka i fox. Uđi
=> editorom, obriši šum i pročitaj SVE bar dva puta (ja sam tri puta :)
HVALA ! Zaista se nisam mogao setiti ovako dobrog i pametnog rešenja ;)
BTW, PC.Util nema temu BP već je u konf. USER ;)
Sledeći put kad budeš hteo nekom da pomogneš uzmi pištolj pa ga ubi a
nemoj ga mučiti da se ko 'kuče' raduje kad vidi da ima poruka u temi FOX,
pošto vidim iz RES-a da ti je to zanimanje.
Naravno, od mene nećeš dobiti ni filera ;) jer sam švorc :(
fox.148ndragan,
/ stavim:BAR # _MST_CALCU ili za HELP stavim BAR # _mst_MST_HELP ili kad
/ zelim da
Već sam ti objasnio zašto neće ići, ne da foks. Međutim, niko te ne
sprečava da napraviš svoju granu menija (ako može još da se napravi da
se brauz meni ne vidi, al' sumnjam) u kojoj ćeš putem tastaturnih makroa
(Keyb "{alt+b}c" za "Change", naprimer) aktivirati stvari iz brauz
grane. Jeste budževina, al' na tako neki štos sam uspeo da aktiviram
Program/Compile iz editora pozvanog iz programa (Compile opcija je po
difoltu neaktivna dok neki program trči).
fox.149ndragan,
/ u generatoru, ali gle cuda takve opcije nema u Foxu za windows. Da li
/ je moguce
Ima u Foksu 3.0 ;), čak četiri varijante za izgled polja - ravno sa i
bez okvira, ispupčeno i udubljeno. U FPW2.6 smo, blago meni, prilikom
generisanja maski ubacili opciju da izgeneriše čak četiri naredbe za
crtanje linije (oko polja) da bismo postigli taj efekat.
/ Uzgred zna li neko taj stari vic?
Svi, svi, svi. To je ovde deo folklora.
fox.151willow,
Ponekad mi se desavaju nejasne stvari sa Fox-om (2.6 za Dos ).K).
Uzmem lepo kreiram XYZ.DBF , prikacim mu TAG 'ZYX' i to je to.
Zatvorim , otvorim , dam "DISP STAT" , sve je u redu ( XYZ.CDX prisutan ).
JA : USE XYZ ORDER ZYX , ili USE XYZ , SET ORDER TO ZYX
i
i onda : = seek( "Willow" ) .
FOX : Database not ordered.
HHH-------------------------------------------------------------------------
JA : CLOS ALL , USE XYZ , DISP STAT , kad ono nema mi XYZ.CDX-a.
JA K: INDEX ON polje TAG ZYX , KKK.
FOX : Kao , index tag vec postoji , pa da li da ga overwrite.
Bilo da kazem Yes ili No , situacija je ista posle zatvaranja i otvaranja.
Ovo mi se desava sa fajlovima u koje vrsim APPE FROM xxx TYPE SDF.
Ajde , ljudi , pomozite malo.
fox.152sbrk,
>> => skini SVE poruke iz SVIH PC.UTIL i PC.PROG, teme baze.podataka i fox. Uđ
>> => editorom, obriši šum i pročitaj SVE bar dva puta (ja sam tri puta :)
>>
>> HVALA ! Zaista se nisam mogao setiti ovako dobrog i pametnog rešenja ;)
Eto ti, ne voli narod da čita pa to ti je.
Pa dobro, ako nećeš da čitaš ono što je džabe (i dobro i pametno), evo ti drugi
predlog:
otiđi u CET i naruči knjigu Creating FoxPro Applications od Golija, mislim da
je Ričard, btw, knjiga košta 105 DEM. Pogrešiti nećeš jer je knjiga
fenomenalna a posle nje ćeš verovatno izbaciti iz upotrebe izraze: donekle, iz
zezanja sam napisao program, tralala pišem ja program itd. NFH.
fox.153cnenad,
=> Eto ti, ne voli narod da čita pa to ti je.
Pazi, sve poruke iz tema koje si naveo imam odavno u SDW-u i tamo nisam našao
ono što mi treba i zbog čega sam postavio pitanje...
=> fenomenalna a posle nje ćeš verovatno izbaciti iz upotrebe izraze:
=> donekle, iz zezanja sam napisao program, tralala pišem ja program itd.
Zar očekuješ da ODMAH čim sam uzeo neki nov razvojni alat napišem iz prve
PROGRAM ?
BTW, mogao bi da prestaneš da trošiš svoju energiju na ova moja bezvezna
pitanja BEZVEZNIM odgovorima (za info o knjizi ne mislim da je bezvezan već
sasvim koristan, tnx) i kad već ne želiš (ili ne znaš) da mi odgovoriš na
postavljeno pitanje i nemoj...
Pošto je već nekoliko dana bilo dosta zezanja sa FOX-om, interesuje me
zašto kada se napravi neki SCREEN i pokrene u njemu nema MAXIMIZE dugmeta i
u Control dugmetu opcije CLOSE ?
I molio bih još jednom za odgovor u vezi menija koji napravih i kad zatvorim
ne dobijam nazad meni od FOX-a...
fox.154ndragan,
/ JA : USE XYZ ORDER ZYX , ili USE XYZ , SET ORDER TO ZYX
Da nemaš slučajno polje koje se zove Zyx? Probaj sa Set Orde to 1
(moglo bi da upali), ili "set orde to tag zyx", za svaki slučaj.
/ Ovo mi se desava sa fajlovima u koje vrsim APPE FROM xxx TYPE SDF.
Bilo bi dobro da okačiš primer. Inače, preporučuje se da se indeksi
prave tek nakon masovnog naseljavanja baze (gde spada i Appe... from).
Odnosno, sećam se da sam imao neki sličan problem jednom, al' se ne
sećam kako sam ga rešio. Moguće je da je baza na jednom direktoriju a
.cdx na drugom itd. Problem mi se nije vraćao, tako da u stvari ne znam
u čemu je.
fox.155ndragan,
/ zašto kada se napravi neki SCREEN i pokrene u njemu nema MAXIMIZE
/ dugmeta i u Control dugmetu opcije CLOSE ?
To bi trebalo da su opcije koje se čuvaju uz .scx, ali ne u njemu samom,
nego u .pjx, dakle kad napraviš projekat. GenScrn u stvari i traži da
imaš projekat, a ako nemaš, on napravi prazan onako iz glave, i uredno
ga obriše kad završi, tako da sve opcije koje si izabrao on lepo
zaboravi.
U stvari, ni ne znam baš da li GenScrn uopšte ima te opcije, koristio
sam ga jednom pre skoro godinu dana da mi napravi par stvari koje sam
posle isekao uzduž i popreko... ali Define Window naredba ih ima. Ili
negde sam napiši proceduru za definisanje prozora i ostali setap maske
(mislim da i imaš SetUp snippet, kao i CleanUp), ili dohvati GenScrn i
dodaj mu tih par opcija da ti ih ubuduće generiše.
/ I molio bih još jednom za odgovor u vezi menija koji napravih i kad
/ zatvorim ne dobijam nazad meni od FOX-a...
U CleanUp proceduri menija treba da ti stoji
Set Sysmenu Auto && ovo još i nije obavezno, ali ostalo jeste:
Set Sysmenu On
Set Sysmenu to Default
fox.156cnenad,
=> To bi trebalo da su opcije koje se čuvaju uz .scx, ali ne u njemu samom,
=> nego u .pjx, dakle kad napraviš projekat. GenScrn u stvari i traži da
Videh da ako se koristi Screen Wizard on odmah radi izgled po datoj mu bazi
podataka.
Za slučaj probe sam koristio opciju NEW / SCREEN pa sam se zbog toga začudio.
Dakle tek kad sam napravio Screen ubacio sam ga u projekat kao jednu
jedinu stavku i kompajlirao, pokrenuo i začudio.
=> negde sam napiši proceduru za definisanje prozora i ostali setap maske
Ukratko, pročitao sam tvoje mišljenje u temi Baze.podataka o FPW-u ali me
ovde interesuje da li pod njim raditi kao i do sada tj. sve pisati i ne
koristiti njegove (nedovršene) vizuelne osobine ili ih koristiti kombinovano,
to je ono što me zbunjuje ?
=> U CleanUp proceduri menija treba da ti stoji
žini mi se da nije ni dolazilo do pozivanja te procedura koja je vezana za
opciju menija kada se izabere. Probaću i javiti.
fox.157willow,
Znas , nikada do sada nisam imao problema ako kreiram Tag koji ima
isti naziv kao neko polje.
Meni je cudno ustvari to sto kada otvorim .DBF i dam DISP STAT nema
.CDX fajla.
APPE vrsim iz OGROMNIH!! .SEQ fajlova ( 1-60 MB ).
Evo primera :
==============================
USE XYZ
APPE FROM OGROMAN.SEQ TYPE SDF
CLOS ALL
==============================
OGROMAN.SEQ se APPEND-uje O.K.
Posle nekog vremena :
USE XYZ
SET ORDER TO ZYX ( ili 1 )
IF ( seek( "ndragan" ) )
&& ... radi nesto
ENDIF
Onda Fox kaze : Database not ordered.
==============================
U ocajanju , probao sam : USE XYZ INDEX XYZ
Sa DISP STAT vidi se da Fox prijavi 2 puta .CDX .
( 1 - Kao structural index fajl , 2 - Kao obican CDX fajl ),i onda ide
SET ORDER TO ZYX i seek bez problema.
Znaci ovo kao resi problem.Medjutim ovakav nacin otvaranja .CDX fajla,
koji bi trebao da se otvori zajedno sa .DBF-om , mi se uopste ne svidja.
fox.158willow,
Za one koji rade u Fox-u 2.6 za DOS i pritom hoce da se umreze
preko NetWare-Lite v 1.1.
Ne koristite Fox funkciju SYS( 0 ) koja vraca Id i Naziv radne stanice,
ako zelite da ustanovite sa koje stanice je pokrenuta aplikacija,
jer se te vrednosti mogu podesiti preko DOS servisa 05Eh fn. 01h .
fox.159prado,
Pocetnik sam o fox-u. Napravio sam aplikaciju ( .app) koja radi pod fox-om.Na
koji nacin da napravim exe verziju koja bi radila sama pod win-om .Imam
instalisan i distribution kit.
fox.161willow,
Molim dobre ljude da me upute ( posto sam ja novi na Sezamu ),
gde mogu da nadjem format .CDX fajla.
Takodje , zanima me ima li smisla proucavati .FXP fajl.
Ja sam tu nesto gledo, vidim u njemu pobrojane simbole iz mog .PRG-a,
pun naziv .PRG i .FXP-a, ali ostalo mi nije nista jasno.
Gledam nesto i .FRX medjutim tu tek nista da provalim.
Ako znate nesto o svemu tome , molim vas , recite to.
Pozdrav from Willow Valley.
fox.162nesan,
Da li je neko imao prilike da radi na 3-jci kombinaciju izmedju lokalne baze,
eksternih ( free tables) iz starog fox-a ( 2.5 ) i neku drugu kombinaciju (
npr. ORACLE ili sl. ) u okviru istog QUERY-ja. Takodjer da li je imao problema
da mu se prilikom dodavanja tabele u query-ja, ponekad izgube podaci, tj. iako
postoje u projektu, da se ne omogucava da se pozovu u samom izboru tabele (
polje project- database), jer te free tables vrlo cesto nestanu i ne pojavljuju
se iako se nalaze i vidljive su u masci projekat.
Da li je neko slao query na graph i da li je imao nekuh problema. Ja cesto
dobijem na dve razlicite masine ( ista baza i sl ) ali na jednog 386 i win 95,
a na drugoj 486 i win 3.11 razlicite rezultate u grafickom smislu ili uopste ne
prikazuje graphik, jednostavno zaglavi isl.
nesa
fox.163max.headroom,
> USE XYZ
> APPE FROM OGROMAN.SEQ TYPE SDF
> CLOS ALL
Nisam siguran da ce da upali, ali probaj sa:
USE xyz ORDER abc
APPEND .....
CLOSE ALL
fox.164max.headroom,
Nešto se ovih dana zlopatim sa Delphi-jem, pa sam ustanovio
da ne podržava .CDX (Fox-alike) indeksne zapise. Mislim,
znam da Borland prosto voli da udari po ušima, ali je ovo
bas bez veze. Zna li ko kako udomiti omiljene mi .CDX-e u
Delphi projekat?
fox.165ndragan,
/ IF ( seek( "ndragan" ) )
Otkud ja kod tebe :)
/ ( 1 - Kao structural index fajl , 2 - Kao obican CDX fajl ),i onda ide
Pogledaj 28. bajt zaglavlja baze, treba da ima 1 upisano ako postoji
.cdx.
Opet, moguće je da ga skenja upravo masovan priliv podataka. Obriši .cdx
(delete tag all) pre Append... Sdf, pa ga kreiraj nakon toga. Biće
kompaktniji i pouzdaniji, a i cela priča bi morala daleko brže da radi.
Naravno, use xyz excl.
fox.166ndragan,
/ koristiti njegove (nedovršene) vizuelne osobine ili ih koristiti
/ kombinovano, to je ono što me zbunjuje ?
Ono staro se emulira (ima neki bajt u novom .scx gde veli da je način
rada 0,1,2 ili 3, gde su 0 i 1 emulacije Read naredbe sa ili bez
modalnog rada). U načelu, preporučuje se da se nove stvari rade po
novom, a stare mogu da ostanu kako jesu dok ne pređeš na nove. žini mi
se, međutim, da je konverzija iz starih u nove ekrane malo zabunjena,
jer negde veli da ako je .scx jednom obeležen kao Read-type (modalan ili
ne) onda ne može da se pređe u novi, ili bar vrač to ne ume (form wiz,
tj). Eventualno da se napravi novi .scx pa da se objekat po objekat
prebaci iz starog u novi.
Za stare ekrane čak izgeneriše i .spr, ali samo poradi dokumentacije.
Nešto baš ne preporučuje da se potera.
fox.167ndragan,
/ Ne koristite Fox funkciju SYS( 0 ) koja vraca Id i Naziv radne
/ stanice,
Vidi poruku u pc.prog:mreže, treba podesiti ime mašine u login skriptu.
fox.168ndragan,
/ koji nacin da napravim exe verziju koja bi radila sama pod win-om
/ .Imam
Build exe <ime>, ali preporučuju da ide u poseban direktorij, gde će se
naći i svi ostali fajlovi potrebni za trčanje aplikacije (.ini,
foxpro.int, eventualni .dll, fontovi i slično). Onda pokreneš nekog tamo
čarobnjaka (uradio sam to samo jednom, ne sećam se kako beše, al' neki
distribution kit wizard), i on ti ispod toga napravi poddirektorije sa
sadržajima instalacionih disketa. Tamo će se naći i rantajm, pošto
fpw2.6 ne pravi samostalni .exe, nego praktično sastavi neki mali
program (koji učitava rantajm) sa .app fajlom. Razlika između .app i
.exe je minimalna.
fox.169ndragan,
/ Gledam nesto i .FRX medjutim tu tek nista da provalim.
Razvijačke gajde (FPW2.5 Developer's guide; za 2.6 ide ista knjiga; u
FPD2.5 i 2.6 nema tog dela), pred kraj knjige su sve stvari koje te
zanimaju, osim formata .fxp fajla. žitao sam u Data Based Advisoru da
neka firma reklamira dekompajler za foks pro... živi bili pa videli,
ionako su sve verzije foksa međusobno nekompatibilne po pitanju formata
.fxp fajla. Još reklamiraju da raščitava i kriptovane...
fox.170max.headroom,
Sve mi se cini da ovaj Delphi i nije tako losa alatka za rad
sa relacionim bazama podataka - sve sto su do sada ponudili za
Win, a sto radi sa bazama, nije ni priblizno interesantno ovom
paketu. Radi brzo, konacni .EXE je mali, potpuno je O-O, ima
ugradjen transaction-tracking sys. Poseduje Database Desktop
kojim se mogu kreirati rel. baze raznoraznih formata (Fox-ov je
preskocen - nikada im necu zaboraviti), i uopste, dobro osmisljen
DB mngmnt sistem.
Ali... :) Kako koristiti sve zanimljive potencijale, pa da
podseca na neki od alata na koji smo navikli (Fox, preciznije)?
Ja sam u svom kopanju dosao do jedne interesantne zackoljice:
ekvivalenta ON ERROR rutini. Hmh, da ne bih dalje gusio, jerbo
neznam koliko vas ima koji nikada necete oprostiti Microsoftu
onakav fuseraj sa Fox-om vs. Access, nastavicu pisanije po
PC.PROG:database temi. A ima li zainteresovanih?
fox.171djelovic,
> A ima li zainteresovanih?
Naravno. Kakav je to problem sa ekvivalentom (?) ON ERROR naredbe?
fox.172willow,
>> Vidi poruku u pc.prog:mreze, treba podesiti ime masine u login skriptu.
Zar to ( login skript ) postoji za NWLite ?. Nego , znas sta je tu.
Pravim tu aplikaciju ( u Fox-u, naravno :) ) i treba mi nesto da utvrdim
sa koje je stanice podignuta aplikacija.Od serijskog broja Diska sam digo
ruke jer okolne stanice nece imati diskove vec ce se dizati sa diskete.
I tako, rece mi neko da za to moje utvrdjivanje upotrebim SYS( 0 ).
Ja probao, i sve je O.K., i bio sam dosta zadovoljan svim tim razvojem
dogadjaja.:))
Znaci , ulogujem se kao Willow, i SYS( 0 ) vrati Willow i #1.
Onda sam u potrazi za Dos-ovim servisima koji se mogu koristiti pod
NWLite-om , naleteo na taj 05eh.
I onda sam probao ovako :
1 - Dignem mrezu, ulogujem se kao Willow, udjem u Fox, dam SYS( 0 ).
FOX: WILLOW #1.
2 - Izadjem iz Fox-a, udjem u Debug , postavim ime PERICA i broj stanice 5,
udjem nazad u Fox, dam mu SYS( 0 ), kad ono ...
FOX: PERICA #5.
I tu je kraj price.Ovo isto ( 2 ) sam probao i bez dignute mreze i opet
je Fox dao isti odgovor ( 2 ).
To je, bre, neka teska prevara u pitanju. ;>
Eto i pomagajte, jer ovo moje 'na odredjeno vreme zbog povecanja .....'
uskoro istice.
Znaci, treba mi nesto ( serijski broj FD-a ? ) da ustanovim sa koje
masine je dignuta aplikacija, u stvari nesto sto je jedinstveno za masinu.
Probao sam da dospem do broja Node-a masine ali to ( kao ni vecina mreznih
servisa 02Fh, 021h ) pod NWLite-om ne radi.( Onaj ludi MSD prijavljuje
totalne besmislice , a NC 5.0 kaze da nema mreze ).
Kada sam vec ovoliko gusio,zanima me ovo.Ja tu aplikaciju planiram da
ostavim u RunTime obliku.Znaci , napravicu mali Compact .EXE tek da moze
da se digne iz DOS-a, gurnucu mu onaj .ESL, i svi programi ce ostati kao
.FXP .Za sada sve odlicno radi ovako ( u mrezi i bez nje ) i kada
menjam neki program ( .FXP, .PLB ), samo njega posle zamenim i sve radi O.K.
Cini mi se da je ovaj nacin fleksibilniji.
Moze se pokrenuti bilo koji .FXP sa strane, cak i bilo koji .PLB
( ako ima funkciju CALLONLOAD ), i mogu se izvrsavati sve komande sa
komandne linije.
Definitivno sam odustao od Stand Alone EXE-a od 3MB.
Zanima me, ljudi, sta vi mislite o ovome i da li sam ja nesto tu prevideo.
AND LAST BUT !LEAST : Hvala "ndragan"-u za odgovore na moja prosla pitanja.
Pozdrav iz Willow Valley.
fox.174willow,
>>koliko vas ima koji nikada necete oprostiti Microsoftu
>>onakav fuseraj sa Fox-om vs. Access, nastavicu pisanije po
Meni je on ( Fox ) bio prva stvar na PC-ju koja me je STVARNO odusevila,
i od verzije 1.04 ( mislim ), to je moj alat.
Posle sam naleteo na C, i dobro, nema veze, ipak je mnogo lakse u Fox-u.
Jest da nema '#include ' ( ili ima, valjda nesto u vezi generisanja ekrana ),
nema unarnih operatora, ima operator dodele koji sluzi i za poredjenje,
nema tipizirane promenljive, preprocesor nesto brlja ( probaj : #if ...
#define ...
#endif ),
u redu, zrtvovano je zbog povecanja brzine interpretiranja koda ,
i to je sve samo pitanje sintakse.( Cestitke Clipper-u ).
Brzina je O.K. , pouzdanost je O.K. ali sa nastankom Windowsa to je ionako
preslo u drugi ( treci, cetvrti ... ) plan, i pitanje je dokle ce FOX i
po tom pitanju biti gazda.
Izgleda da sve trci okolo , samo FOX stoji i ceka Bill @!@#! Gates-a
da ga malo pokrene.
Necu vise da gusim, samo, plasim se da FOX ( uskoro ? ) ne postane
dinosaurus tipa COBOL-a i krivo mi je zbog toga , ali ako se nesto ne
promeni na bolje , cini mi se, uskoro ce fajront.
>>PC.PROG:database temi. A ima li zainteresovanih?
Ima, ima.
Pozdrav iz Willow Valley.
fox.175max.headroom,
> Zar to ( login skript ) postoji za NWLite ?. Nego , znas sta je tu.
> Pravim tu aplikaciju ( u Fox-u, naravno :) ) i treba mi nesto da utvrdim
> sa koje je stanice podignuta aplikacija.Od serijskog broja Diska sam digo
Will, kazi zasto ti je potreban ID stanice? Mozda problem moze i drugacije
da se resi (ako je u pitanju slanje poruka sa stanice na stanicu, ili vec
sta ti je na pameti :)
fox.176max.headroom,
> Naravno. Kakav je to problem sa ekvivalentom (?) ON ERROR naredbe?
Heh - stvar nije jednostavna (bar meni). Daklem, cim se dogodi nesto
nepredvidjeno, a sam Bog zna sta sve nepredvidjeno moze da se dogodi,
Delphi podize tzv. Exception. Kod Fox-a su 'iznimke' naslagane po
brojevima, i ima ih, razume se, daleko manje nego kod Delphi-ja.
Jos uvek nisam u stanju da predefinisem neki exception da prikazuje
moj dijalog (ili da nista ne prikazuje, okejžnli) - nikako ne bih
dozvolio korisniku da cita nekakve 'Couldn't find' i sl. dijaloge
sifrirane nazivom & brojem exception-a.
Primera radi, otvorio sam DBEdit polje "Datum" (baza sadrzi, dakle,
date field). U njega unesem nesto nedozvoljeno. Kako da podignem
moj exception na zadatu temu? :)
fox.177max.headroom,
> Brzina je O.K. , pouzdanost je O.K. ali sa nastankom Windowsa to je ionako
> preslo u drugi ( treci, cetvrti ... ) plan, i pitanje je dokle ce FOX i
> po tom pitanju biti gazda.
Vise nije, naravno, a uz zestok Bill-ov negativno usmereni trud. Umesto da,
kupivsi Fox, zadrze Rushmore i osnovne jezicke elemente, prebace ga u
objektno okruzenje i svima olaksaju zivot, Microsoftovi ljudi se trude da
citavu stvar zaguse do kraja izbacujuci more polufabrikata koji ama bas
nicemu ne sluze (Access, primera radi). Jeste profitabilnije, ali meni
zeludac zaista ne vari sve i svasta.
Jedina nada je Borland, sa svojim "adaptirajmo jezik do besvesti" sistemom.
Delphi je jedan od rezultata, a videcemo sta nas jos ceka. Nema veze, dobro
mi dodje da se vezbam na objektima ;)
P.S.
GROZOMORNA steta za Rushmore, princip index-handling-a jos nevidjen do sada.
Tehnika je, naravno, zasticena; ali ;) mislim da postoji jos par interesantnih
nacina da se postignu cak i vece brzine. Primera radi - neuronska mreza koja
nazoviinteligentno prati promene indeksa i vrsi pretrazivanja. Neko ce, vec,
doakati i Microsoftu :)
fox.178willow,
>> Will, kazi zasto ti je potreban ID stanice? Mozda problem moze i drugacije
>> da se resi (ako je u pitanju slanje poruka sa stanice na stanicu, ili vec
>> sta ti je na pameti :)
E, Max ovako stoje stvari.
Jedna stanica je server na kojoj se nalaze svi podaci i sama aplikacija.
Okolo su stanice bez HD, koje se dizu sa diskete, loguju se na mrezu pod
utvrdjenim imenom, mapiraju se na serverov disk i odatle pokrecu aplikaciju
( znaci, jedan program za sve ).
Sve bi to pokrio jedan .BAT program , znaci korisnici nemaju nikakve veze sa
DOS-om ili NWLite-om.
Ja sam informacije o radnim stanicama smestio u jednu tabelu ,
( da li imaju stampac, koji je to stampac, da li imaju Modem , itd. )
I sada , na primer, sa jedne stanice treba da se stampa neki izvestaj.
Program treba da utvrdi koja je to stanica u pitanju ( ne korisnik ) i onda,
ako stanica nema stampac da se preduzme neka akcija ( dobro , to i nije bas
neki problem, mislim na PrintStatus() ), ali ako stanica ima stampac, mora se
videti koji je tip da bi mu se slale odgovarajuce ESC sekvence.
Slicno vazi i za Modem .Ako ga ima , pokreni Telix, ako nema , posalji
izvinjavajucu poruku.
To je osnovno zbog cega mi je potreban ID.
Verovatno si procitao moje utiske o SYS( 0 ) funkciji i u nju se ne moze
pouzdati.Razmisljao sam i o postaljanju SET WORKSTAT=<broj>.
Oba ova metoda pucaju kada korisnik uzme svoju disketu, i podigne program sa
neke druge stanice. SYS( 0 ) ce prijaviti Ime koje je korisceno pri
login-ovanju, a SET ce prijaviti ono sto uvek i prijavljuje.
Mozda mi sve ovo i nece trebati u realnom okruzenju, ali, moje je misljenje, da
ako covek sedne da radi nesto , onda to mora da uradi najbolje sto moze.
Eto, pa pomagaj.!
Slanje i primanje poruka i ostalih signala ( medjusobno upucivanje
korisnika na funkcije koje te signale obradjuju ) sam resio u programu i to ,
za sada ( da kucnem u drvo ), funkcionise.
Ajde , molim te , baci pogled na onu moju poruku u vezi 'RunTime vs .EXE' pa
daj svoje misljenje.
Unapred hvala Max-u i svima koji odvoje vreme za ovu poruku.
Hello from Willow Valley.
fox.179gcurcic,
> Zanima me, ljudi, sta vi mislite o ovome i da li sam ja nesto
> tu prevideo.
Jesi li probao da mu proturiš neku environment promenljivu u autoexecu
i posle sa getenv() pročitaš?
Što se tiče 'kompajliranja', moja najbolja iskustva su sa običnim
Compact EXE. U slučaju da ipak koristiš .fxp module, preporučujem da
povećaš broj filesa u config.sys.
Baj d vej, kada sam aplikacije kompajlirao na Stand-alone EXE, primetio sam
izvesne probleme sa čitanjem environment promenljivih... :(
fox.180dvesic,
>> Mozda mi sve ovo i nece trebati u realnom okruzenju, ali, moje
>> je misljenje, da ako covek sedne da radi nesto , onda to mora
>> da uradi najbolje sto moze.
Zašto ne pokušaš sa ID-om Ethernet karte ? On je jedinstven za svaku
kartu, a teško da će korisnik da čupa Ethernet kada se loguje sa
druge stanice :))
Mora da postoji funkcija koja to radi u nekoj od nezavisnih biblioteka
(za Clipper ima na tone). Ako ne postoji ... uvek imamo C :))
Pozdrav,
Dejan.
fox.181max.headroom,
> Ja sam informacije o radnim stanicama smestio u jednu tabelu ,
> ( da li imaju stampac, koji je to stampac, da li imaju Modem , itd. )
> I sada , na primer, sa jedne stanice treba da se stampa neki izvestaj.
> Program treba da utvrdi koja je to stanica u pitanju ( ne korisnik ) i
Vidi, ja sam pomenuti problem sa indentifikacijom radne stanice uvek rešavao na
sledeći način: na disketu sa koje ti se diže sistem uguraj neki indetifikacioni
tekst-fajl, koji će Fox pri startovanju pročitati i ustanoviti koje su sve
komponente prikačene na njega. Sada te informacije smesti u onu zajedničku
users-tabelu. Ona ima polja (praktično - flegove) koja signaliziraju šta se od
hardvera na njima nalazi. Svaku disketu, ako treba, zalepi za drajv - šta ima
da je vade, koj' moj, ako nemaju hard-diskove? Prema korisniku budi strog,
pravilo nalaže, da te ne bi udarao po ušima.
Postoji i druga, organizacijski malo čupavija metoda - nateraj korisnike da se
na tuđim kompjuteriam ne loguju pod svojim imenom (znaš već šta hoću da kažem,
ali vidim da unapred odustaješ od tog sistema).
P.S.
Gotovo nikada ne dozvoljavam Fox-u da opšti sa Novell-om, osim ako to nije
preko potrebno. Do skoro sam se igrao sa Bindery-jem k'o lud, ali onda počeše
da izlaze neke svemirske verzije Fox-a koje ne podržavaju stari PLB format (pa
Jovo-nanovo - juri biblioteke), te mi se, sve u svemu, posle okretanja želuca
naopačke, učinilo najpraktičnije rastaviti Fox i Novell.
P.P.S.
> Ajde , molim te , baci pogled na onu moju poruku u vezi 'RunTime vs .EXE'
> pa daj svoje misljenje.
Lično, uvek koristim .APP fajl kada korisniku prosleđujem aplikaciju. Dođe mu
isto što i onaj APP-oliki kompakt EXE. APP fajl je, razume se, daleko
kompaktiniji od gomile .FXP-ova. BUT, nemoj zaboraviti - Fox VOLI da se zaglavi
pri "Rebuild Application" operaciji, kada koristi onaj svoj mem. manager.
fox.182max.headroom,
> Baj d vej, kada sam aplikacije kompajlirao na Stand-alone EXE, primetio sam
> izvesne probleme sa čitanjem environment promenljivih... :(
Primetio si SAMO te probleme? Meni su aplikacije padale k'o zrele kruške, i za
to sam dao okriviti mem. manager koji traljavo obavlja postavljeni mu zadatak.
Pročitao sam jednom prilikom na CIS-u neke rasprave povodom tog fenomena, ali
se više ne sećam detalja.
fox.183pedjak,
> Zašto ne pokušaš sa ID-om Ethernet karte ? On je jedinstven za svaku
> kartu, a teško da će korisnik da čupa Ethernet kada se loguje sa
> druge stanice :))
Voleo bih da vidim rutinu koja vraća ID broj kartice, ako može
asembler.
fox.184willow,
>> Voleo bih da vidim rutinu koja vraca ID broj kartice, ako moze
Imam knjigu u kojoj je dat API za Nowellvell NetWare Ki ima sve zive f-je,
pa i dobijanje ID broj-a kartice. Sve ide preko Int 021h ili 02fh.
Problem je sto ja koristim NetWare Lite v 1.1 koji izgleda nista ne
podrzava od svega toga.
Ako koristis Novell Netware , probaj ovako :
mov ah, 0EEh
int 02Fh
Vraca -> CX:BX:AX adresa., fizicki ID.
P.S. Ova moja poruka nema bas mnogo veze sa Fox-om. Izvinjavam se.
KKKKKKKKKKKKKKKKKKKKKKKKKKH
fox.185gcurcic,
¨˙> Primetio si SAMO te probleme? Meni su aplikacije padale k'o zrele
¨˙> kruške, i za to sam dao okriviti mem. manager koji traljavo obavlja
¨˙> postavljeni mu zadatak.
Jakako, ono volšebno Using of tra(n)sgressed file handle me je dobro
namučilo. A da ne pominjem bugiće koje fox 2.0 nije imao, a pojavljuju
se na 2.6! Na kraju sam se vratio na dobri, stari 2.0 :(
Sem toga, sporost 2.6-tice na slabijim mašinama je upravo glavobolna -
toliko da sam ubedio (skoro) sve svoje korisnike da bace 286 ploče i
opreme mašine sa 4MB RAMa.
Takođe, svečano objavljujem da više nemam diskless radne stanice, što
preporučujem i willowu da učini. Jednostavno reci korisniku da se:
a) ili disciplinuje pri korišćenju disketa
b) ili kupi hard
c) ili neka se pomiri sa posledicama
Uzgred, imam običaj da kod korisnika koji koriste samo poslovne aplikacije
onemogućim pristup disketama (osim ako im BAŠ nisu neophodne). Igre niks
(osim ako odobri šef - u kom slučaju proveravam te igrice od virusa).
Sve ove 'mere' možda izgledaju drastično, ali me štede onoga:
"Halo Gorane juče u 5 popodne mi je kompjuter propevao - mislim da je bila
ona pesmica Jenki Dudl..."
fox.186max.headroom,
> Problem je sto ja koristim NetWare Lite v 1.1 koji izgleda nista ne
E, baš me podseti :) Relativno skoro sam radio sa Fox-om v2.0 DOS i NW Lite-om,
i ustanovio par sitnih (gnjah) nelogičnosti. Neki paketi su odlazili ravno u k.
:) iz meni nepojmljivih razloga, tako da je svaka shared baza često bivala
izložena bombardovanju nekim budibogsnama podacima, te se zaglavljivala (te ode
ovo, te ono, te reindeksiraj, itd.)... Ima li auditorijum slična iskustva?
fox.187max.headroom,
> Sem toga, sporost 2.6-tice na slabijim mašinama je upravo glavobolna -
> toliko da sam ubedio (skoro) sve svoje korisnike da bace 286 ploče i
> opreme mašine sa 4MB RAMa.
:(( Nažalost, mene je traljavost 2.6 verzije prosto odbila od Fox-a kao
razvojne sredine pod Windows-ima, pa sam se preorjentisao na Delphi. Ndragane,
kako deluje (i da li uopšte deluje, nemam info. da li je izašao) Visual Fox
v3.0 for Win? Mislim, da me onaj ogavni MS natera da se sada bavim izučavanjem
OOP-a... Grozobno.
P.S.
Hehe, koji shit onaj VO (čitaj - Clipper for Win)... Bulaja se kune u njega,
ali nisam primetio da se ljudi razbijaju programirajući :)
P.P.S.
Sve u svemu, ta RUPETINA nastala ekspanzijom Windows-a još je daleko od
krpljenja, posebno po pitanju DB razvojne sredine. Za sada, po meni, stvari
stoje ovako:
- Delphi ima predivno razvijen korisnički interfejs, koji bi (da su pametni)
mogli dalje iskoristiti. FormEditor je kao iz snova.
- Delphi ima rogobatan sistem reporta, jerbo sve ide preko eksterne
aplikacije. Sve to _traje_. Fox-ov se da dalje koristiti.
- Query-ji su svuda podjednako slični, i, najzad, standardizovani.
- Gotovo ista situacija sa DBEngine-om (ODBC radi svoj posao, ali nije
rešenje).
- Etc,etc.
- Rushmore još nije prevaziđen.
- Krajnji EXE nesme prelaziti 1 Mb, jer je to bezobrazno.
- Sve to, na kraju, mora biti brzo poput Delphi-jeve aplikacije.
- Obavezan TTS (automatski ili ručni, svejedno).
- I tek tada čovek može da sedne, sklapa modul po modul, i ne brine brigu.
+ Muzička želja ;)
fox.188max.headroom,
Heh, primetio sam zanimljivu nelogičnost pri radu sa Fox-om v2.0 DOS koji trči
kao windowed DOS-task pod W4WG. Evo pomenute nelogičnosti: ako se aktivira
popup dok traje čisti READ, Windows-i završavaju task sa "This application
violated system integrity". Probao sam razne budže, ali... slaba vajda. Zna li
neko uzrok ovakvog prljavog ponašanja?
fox.189pyramid,
>> kako deluje (i da li uopste deluje, nemam info. da li je izasao) Visual
>> Fox v3.0 for Win? Mislim, da me onaj ogavni MS natera da se sada bavim
>> izucavanjem OOP-a... Grozobno.
Ako Visual Fox postoji, ili se ikada pojavi, racunam da ce biti OOP... Nisam
cuo da je neki jezik (osim Fox-a) ostao ne-OOP (sama cinjenica da postoje
Basic, Cobol i Fortran implementacije koje su OOP je dovoljna)....
fox.190pyramid,
>> >> kako deluje (i da li uopste deluje, nemam info. da li je izasao) Visua
>> >> Fox v3.0 for Win? Mislim, da me onaj ogavni MS natera da se sada bavi
>> >> izucavanjem OOP-a... Grozobno.
>>
>> Ako Visual Fox postoji, ili se ikada pojavi, racunam da ce biti OOP...
>> Nisam cuo da je neki jezik (osim Fox-a) ostao ne-OOP (sama cinjenica da
>> postoje Basic, Cobol i Fortran implementacije koje su OOP je
>> dovoljna)....
Danas mi pod ruke pade avgustovski byte sa opisom doticnog programa. Potpuno je
objektno orjentisan i koliko sam shvatio, vise lici na Access nego na Fox 2.x
fox.191ndragan,
/ To je, bre, neka teska prevara u pitanju. ;>
Lagani Novel nisam probao, moja poruka se odnosila na NWare 3.x i 4.0x.
Pretpostavljam da sve rame-u-rame mreže dodeljuju imena stanicama na
manje više isti regularan način, i da sys(0) to lepo hvata (RPTI je čak
davao i broj čvora, istina uvećan za 256).
Kod NWare je uvek # 0, osim ako u loginu ubaciš ime mašine. Za broj
nisam uspeo da ukačim štos, al' i ime mi je bilo dovoljno za ono što sam
hteo.
Sys(0) je napravljen da ti da tvoje mrežno _ime_. Nevolja je kod Novela
(laganoga), što onaj broj nije fizički broj stanice, nego broj veze,
koji se ponovo uspostavlja kod svake prijave. Prema tome, tu nema vajde
za tebe. Bilo bi dobro da nađeš neku funkciju koja bi ti vraćala broj
kartice ili tako nešto. Kružio je tu neki nwlib (vidi ono što je Maks
slao pre neki mesec), možda tamo ima nešto.
/ .FXP .Za sada sve odlicno radi ovako ( u mrezi i bez nje ) i kada
/ menjam neki program ( .FXP, .PLB ), samo njega posle zamenim i sve
/ radi O.K.
Preporučio bih (brzine radi) da napraviš .app ili mali .exe, ali da
uključiš u njega sve što ti treba, i ostatak da pobrišeš sa diska, i
uradiš jedno komprimovanje diska, jer em to onda bude jedini fajl koji
foks drži otvoren preko mreže (ajd, ne računajući silne .dbf, .fpt,
.cdx), em i direktoriji budu kraći. Eventualno bi mogao da se iz
projekta isključi poneki .fxp i da ostane na direktoriju, i to onaj koji
bi sadržavao lokalne parametre i trebalo bi ga možda češće menjati.
Takođe, preporučujem da se .exe i .fxp stave da budu read_only, mreža im
onda brže pristupa i ima manje posla oko njih (ne mora da proverava da
neko ne želi da piše preko njih, da li je neko nešto zaključao itd).
Za svoje potrebe sam napisao chkpjx.prg koji traži sve bitne fajlove
koji se nalaze u tekućem (razvojnom) direktoriju a nema ih u .pjx; ne
znam da li ima smisla da ga bacam ovde jer je moja definicija "bitnih
fajlova" osobena, a pozivam i nekoliko drugih rutina iz svoje
biblioteke, koja je vlasništvo firme... da ne upetljavamo lovu, ovo može
svako da napiše, a zgodno dođe.
fox.192ndragan,
/ pouzdati.Razmisljao sam i o postaljanju SET WORKSTAT=<broj>.
Pademinaum: ako svaka stanica ima svoj autoegzek na serveru, ubaci tako
neki Set trtmrt= tamo i pozdravi ih ako se ne slaže.
Imam tu sreću da sam samo dva meseca imao stanice bez diska, a onda je
mušterija negde na rasprodaji našla poslednje kvantume od 40M, verovatno
po pet dolara kilo.
fox.193ndragan,
/ kompaktiniji od gomile .FXP-ova. BUT, nemoj zaboraviti - Fox VOLI da
/ se zaglavi pri "Rebuild Application" operaciji, kada koristi onaj svoj
/ mem. manager.
Ume, bogami, naročito ako je .pjx poveći, a dobije da osveži malo više
fajlova. Po pravilu skenja memo polja u .pjt fajlu. Verovatno bi lek bio
da se neka polja skroz isprazne (obj ili kako se već zovu). Pokušavao
sam da otvorim .pjx kao .dbf i da uradim Pack Memo, da napunim timestamp
nulama, da praznim onaj revision number ili kako se već zove - i dalje
mi je najpouzdanije da u takvim slučajevima napravim .pjx ispočetka.
Morao sam da napravim i programčeto koje će da ga puni. Naravno, nije
savršen, pa završna kontrola mora na ruke.
fox.194ndragan,
/ opreme mašine sa 4MB RAMa.
A onda počinje trijezdvobitni posao, i iste stare usrane triosamšestice
lepo polete. Divota jedna. Sam sam se čudio kako brzo vozi.
Al' gledao sam jednom kako iscrtava ekran sa cirka 25 objekata - lepo
može da se gleda kako crta okvire, kako farba polja. 286/16. Usporeni
crtać.
fox.195ndragan,
/ kako deluje (i da li uopšte deluje, nemam info. da li je izašao)
/ Visual Fox v3.0 for Win? Mislim, da me onaj ogavni MS natera da se
/ sada bavim izučavanjem OOP-a... Grozobno.
OOP u suštini omogućava da se odlepimo od tatasture i 60% vremena
provedemo planirajući aplikaciju (gde se stari majstori i razlikuju od
cut&paste klinaca (ili beše click&point)).
Da radi, radi, al' kilavo. Spor je do proliva, bar što se tiče
iscrtavanja/osvežavanja prozora. Neke stvari me dovode do ludila:
definišem prazan form, dodelim mu Times Roman CE, napravim poneki
objekat i - svi dodati objekti imaju difolt Ms Sans Serif (naravno, nema
CE). Nasleđuje, nije da ne nasleđuje, al' je stvar izgleda još na sudu,
pa kad se završi ostavinska. Tj, trebalo bi da za svaki tip objekta
napravim klasu, pa kad ga ubacim, da turim ime svoje klase kao ime
roditelja, pa onda da uvaži font definisan u mojoj klasi - inače,
verovatno su osnovne klase definisane sa "Ms sans serif", pa je to
difolt to daljnjeg. Ili je neko probao da nešto pročačka u vfp.ini (ili
foxprow.ini, ne znam koji važi).
Glavi tu i tamo, pretpostavljam zato što sam opet ostao bez prostora na
disku (obrisao sam posle PowerPoint, a ako zagusti, leteće i Korel) i
zato što imam beta verziju i njega i w95 (via MSDN).
/ - Delphi ima predivno razvijen korisnički interfejs, koji bi (da su
/ pametni) mogli dalje iskoristiti. FormEditor je kao iz snova.
...
/ - I tek tada čovek može da sedne, sklapa modul po modul, i ne brine
/ brigu.
Saglasan od a do žnj.
+ Muzička želja ;)
Index While, tuga neprebolna :)
fox.196ndragan,
/ kojim se mogu kreirati rel. baze raznoraznih formata (Fox-ov je
/ preskocen - nikada im necu zaboraviti), i uopste, dobro osmisljen
Ako u ODBC nađe drajvere za foks, upotrebiće ih (čak sam našao i neke
njegove prevode, ali u stvari nisu Delfijevi, nego ih je posejao Report
Smith, koji mi inače glavi uzduž i popreko), ali nisam našao način da
iz Delfija uvučem foksova memo polja - samo ispiše <BLOB> i nema načina
da ga otvorim (dobro, nisam se previše ni trudio). CDX - 'production
index not found' i onda, kako se kad snađe, napravi ili ne napravi .MDX
(dBašić 4, naravno, Borlandovo čedo iz usputnog braka, dobio u miraz).
Kod mene je problem što nemam kad da preinstaliram ODBC (ostao mi još od
pendžera 3.1), a pun đavo aplikacija se u međuvremenu upisalo u njega.
Sva je prilika da ne bi prošlo bez ponovne instalacije W95, što je
celopopodnevni posao (čak i kad su fajlovi na serveru). Uostalom, do
daljnjeg me ne zanima uporedno korišćenje istih baza iz foksa i delfija,
nego da vidim kako rade svaki za sebe.
Obimni su i jedan i drugi, većina objekata ima previše osobina koje
bi trebalo poznavati, svi događaji imaju svoje redoslede okidanja...
gomila stvari koje treba naučiti pre nego što se počne sa ozbiljnim
radom.
Naravno, vremena nikad dosta, a svi očekuju da sa novim alatom bude brže
gotovo. Strava.
/ ekvivalenta ON ERROR rutini. Hmh, da ne bih dalje gusio, jerbo
VFox ima za svaki objekat Error događaj i može mu se ugraditi Error
metod, na nivou njegove klase ili neke predačke klase. Na taj način
rutina za obradu greške vozi računa samo o ograničenom skupu mogućih
grešaka koje mogu da se dese tom objektu. Mislim da je tako lakše.
Nisam iščačkao šta Delfi radi sa tim.
fox.197ndragan,
/ Izgleda da sve trci okolo , samo FOX stoji i ceka Bill @!@#! Gates-a
/ da ga malo pokrene.
Izašao je Visual Fox Pro 3.0, i ja ću se truditi da bacim ovamo kad
nešto naiđe. Imam beta verziju, koja je još uvek sklona padu tu i tamo.
Mogućnosti su straobalne, ali treba vreeeeeeemena da se sve to prođe (i
proba).
Inače, ono #if #define #endif je među stvarima koje sam probao u prvih
pola sata nakon instalacije. Radi. Ima i #include, ali se iz njega
čitaju samo #direktive.
fox.199willow,
>> Inace, ono #if #define #endif je medu stvarima koje sam probao u prvih
>> pola sata nakon instalacije. Radi. Ima i #include, ali se iz njega
>> citaju samo #direktive.
Kod mene, nema teorije da #if #define #endif prodje.
Evo bas sam malopre opet isprobao da ne bi ispalo da lupetam :
#if srows() = 25
#define _LASTROW 25
#endif
Nece, Fox prijavljuje gresku.
Ono #include nisam nasao , sem #insert u vezi generisanja ekrana.
>> Za svoje potrebe sam napisao chkpjx.prg koji trazi sve bitne fajlove
>> koji se nalaze u tekucem (razvojnom) direktoriju a nema ih u .pjx; ne
Ja sam sve programe koji su vezani za tekuci projekt , gurnuo u
jedan .DBF . Svaki program ima svoj slog gde je dat opis, naziv ,
a sam kod je gurnut u memo polje .
Tako su mi svi pri ruci, a kad treba da se vade,
ima tu jedno programce koje ih malo sredi, pa ih fljusne napolje.
Hello from Willow Valley
fox.200goxx,
■ Kod mene, nema teorije da #if #define #endif prodje.
■ Evo bas sam malopre opet isprobao da ne bi ispalo da lupetam :
■ #if srows() = 25
■ #define _LASTROW 25
■ #endif
■ Nece, Fox prijavljuje gresku.
Razumljivo da neće. #if #else #endif nisu komande već kompajlerske direktive
koje se izvršavaju u toku kompajliranja. To znači da ne možeš da pozoveš
ništa iz samog fox-a (važi i za clipper). C kompajleri mogu malo da "zavire"
i u run-time sa svojim direktivama, ali clipper ima ubedljivo najbolji
predprocesor što fox neće nikad imati (sem ako ga ne ukrade :).
Ono što si, verovatno, hteo je:
#define _LASTROW srow()
Možeš svuda da pišeš _LASTROW umesto srow() što i nije nešto jer je izraz
koji zamenjuješ prost za pisanje.
Pozdrav
Goran
fox.202willow,
>>Razumljivo da nece. #if #else #endif nisu komande vec kompajlerske direktive
>>koje se izvrsavaju u toku kompajliranja. To znaci da ne mozes da pozoves
To sto sam mislio sam i napisao ( i obrnuto ).
Ono 'srow()' i '_LASTROW' sam dao samo da popunim liniju ,jer bi onda
verovatno prigovorio da je u pitanju sintaksna greska.
Meni je veoma jasno sta su to preprocesorske direktive, cemu sluze itd.
Ako bacis pogled na programski jezik C i bilo koji od njegovih .H fajlova,
videces sta sam hteo da kazem.
>> To znaci da ne mozes da pozoves nista iz samog fox-a (vazi i za clipper).
Mislim da je obrnuto. Fox *DOZVOLJAVA* upotrebu funkcija ( srows(), itd. )
da se koriste u preprocesorskim direktivama ( za Clipper ne znam ), dok
preprocesor C-a prihvata *SAMO* u vreme kompajliranja poznate konstante.
Evo ti primer :
#if srows() = 25
@0, 1 SAY 'Fox ovo dozvoljava, a za Clipper bas i ne znam.'
#endif
Ovo ima da prodje iz momenta.
Mozda nisi bas obratio paznju na ono sto mene tu muci.Ovde nije problem
'#if' linija vec konstrukcija #if ....
#define ....
P.S. Clipper IMA dosta bolji preprocesor od Fox-a, i to niko ni ne dovodi
u pitanje.
Hello from Willow Valley
fox.203max.headroom,
> Ume, bogami, naročito ako je .pjx poveći, a dobije da osveži malo više
> fajlova. Po pravilu skenja memo polja u .pjt fajlu. Verovatno bi lek bio
Statistike radi, svaki projekat veći od 20-ak stavki zaglavi bar jednom pri
Rebuild Project ili Build Application opciji :) I još nešto - primetio sam da
mi zaglavljuje isključivo kod osvežavanja reporta... Hmh... Pokušavao sam i sam
sa tim osvežavačkim principom koji si naveo, ali mi nekako najlakše legne da
učinim jedno !DEL *.pj* i ponovo podignem projekat.
fox.204max.headroom,
> OOP u suštini omogućava da se odlepimo od tatasture i 60% vremena
> provedemo planirajući aplikaciju (gde se stari majstori i razlikuju od
> cut&paste klinaca (ili beše click&point)).
Mislim, znam da je OOP neophodno zlo :), samo sam se pogrešno izrazio u
prethodnoj poruci. Istina, teško mi pada navikavanje na jedan svemirski sistem
programiranja koji sa ovim, od Boga datim ;), nije ni na puškomet po
jednostavnosti. No, da se spasem kucanja do besvesti, zaista je poželjan. Mene
brine samo jedna stvar - OO programiranje nije objašnjeno onako kako bi
trebalo... još uvek samo malobrojni znaju da se bez greške snađu u ovom čudu, a
nas ('bazne') su držali u mraku bezobrazno dugo. Nisam pipao paskal od srednje
škole, C sam gledao da izbegnem kako znam i umem (C++ je imenica tipa misaona),
i sada mi preostaje samo da gledam belo u one konstruktore, ančestore i ostale
psovke.
> Da radi, radi, al' kilavo. Spor je do proliva, bar što se tiče
> iscrtavanja/osvežavanja prozora. Neke stvari me dovode do ludila:
> definišem prazan form, dodelim mu Times Roman CE, napravim poneki
Tu zaista nemam šta da dodam - od Fox-a (onog 2.5 za Win), pa preko Access-a i
ko zna čega sve ne, sve gledam hoće li se ko zajebati pa napraviti nešto što će
kao krajnji rezultat dati vizuelno BRZU aplikaciju. Pa to k'o da izmišlja
prozore... Sve sam na muci, i pitam se - imam li ja presporu mašinu, ili je
stvar testirana na P6 i K7, ili... Bre, vuku nas za nos. Em što moram da se
polomim učeći neke nove sisteme, em se na kraju sve izjalovi jerbo mi korisnik
ostario dok ovaj udari prozorče od pola ekrana.
I još nešto - svaki novi programčić donosi po jedan novi standard. Eno ga
Access sa njegovim megafajlom - eto, hajde da obezbedimo podršku za njega, eno
ga DBase 5 for Win... ide i on. Dobro, ono za Paradox sam do sada i gutao, ali
kada bi se uradila podrška za svaku bogovetnu bazu, pa samo bi ona uzela 10-ak
Mb. Do sada bih mogao da ih nabrojim bar dvadesetak :) (ODBC drajveri će da
'idu' kao Scan, ako ne i bolje - dvaput nedeljno ;) Šta bi im falilo da su se
zadržali na jednom, glupom :) DBase standardu, i samo dodavali Blob-ove i
ostale nepotrepštine po potrebi?
fox.205max.headroom,
> VFox ima za svaki objekat Error događaj i može mu se ugraditi Error
> metod, na nivou njegove klase ili neke predačke klase. Na taj način
> rutina za obradu greške vozi računa samo o ograničenom skupu mogućih
> grešaka koje mogu da se dese tom objektu. Mislim da je tako lakše.
Ma, nama je takav metod i najlogičniji, jerbo se tačno zna šta može da zakolje
jedno GET polje (ma kako se ono u praksi zvalo - u Delfiju je DBEdit). Delfiju
fali ovakav pristup problemu, jer on nema Error event za, npr. DBEdit, već
moraš da podižeš Exception (exception class). Taj 'izuzetak' je, primetio sam,
zdravo zajebano podići i, uopšte, definisati (to može da bude pogrešna vrednost
- npr. max. dozvoljena vrednost je 5, a ti kucaš 6, ali i neka 'apsolutno
pogrešna vrednost' - npr. umećeš char tip u num polje). U međuvremenu je baza,
zamislimo sranja, prestala da se odaziva - ko će da sredi ovaj Exception? :) I
tako dalje, sve se to gadno zakomplikuje na kraju.
Drugo, ima dosta neobično MaskEdit polje, a to mu je onaj PICTURE atribut GET
polja što ga koristim svakodnevno, u velikim dozama. Jedva se navikoh na te
nove function kodove, kad ispade da maska MORA da bude popunjena po priloženoj
funkciji, inače se diže exception (npr. ako je 999-9999, onda mora biti
123-4567, a ne 123-456). Shit. Postoje nekakva polurešenja, ali je sve to do
mošnica komplikovano.
Enivej, prihvatiću VFox-a kao brata jerbo sam se navikao na sintaksu, ali samo
zbog toga. Mogu si misliti koje bube idu uz njega, kao poklon MS-a (ali mu
kilavost, hebiga, ne praštam).
fox.207max.headroom,
Jedno interesantno pitanje:
Potrebno mi je da odštampam jedan report, i to preko REPORT FORM-a,
koji koristi neki moj custom PDSETUP. Report ide na beskonačni papir, i
najčešće ne prelazi veličinu jedne strane. Međutim, pošto mi je Page Length
namešteno na 66, šta se događa -
elem, kada se odštampa tih 5-6 redova reporta, štampač otera papir na
kraj definisane strane (dakle, 66. red). Zašto jednostavno ne zakuca tu
gde je završio, jer mu nisam rekao "Page Eject after printing"? Zašto
koj moj cima celu stranu na kraj? Help, jer nemam iskustva sa matričnim
štampačima :)
fox.208mamba,
Jedno pitanje za iskusnije korisnike Fox (2.6 DOS).
Ako se pri generisanju EXE fajla iskljuci opcija LOGO, nakon startovanja
i izlaska iz programa ostaje ona boja na ekranu koja je bila u background-u
menija.Da li to moze da se nekako izbegne.
fox.209atech,
Za potrebe testiranja programa za zastitu potreban mi je jedan
iskompajliran fox EXE program tipa 'Hello World' (verzija za DOS).
Ukoliko neko zeli da pomogne molim da mi se javi na mail radi
dogovora...
Uzgred, da li postoji vise razlicitih kompajlera za fox ili se
to radi samo uz pomoc onoga sto se zove Fox stand alone kit (ili
kako vec?)
fox.210max.headroom,
Bre, ovaj Report Writer na Fox-u 2.0 mi deluje sve kilavije, kako ja dobijam
potrebu da pišem aplikacije za matrične štampače :) Zna li neko (NDragane?)
neku dobru zamenu za njega, ili bar gde se može naći neki prerađeni & usavršeni
GENPD, bar one PDSETUP-e da uradim kako treba? Onaj čisto softverski deo je
dobro urađen, ali mi, bre, ona spona softver-hardver nešto ne deluje.
Dioptrija?
Evo šta me još muči - nigde da vidim gde se uzimaju u obzir oni silni _P****
parametri... Da li oni važe i za REPORT FORM, i da li imaju prednost nad njima
(tj. onima definisanim u REPORT FORM-u)? Npr. _PLENGTH, ima li nekog smisla da
učukam:
_PLENGTH = 100
REPORT FORM xxx TO PRINTER (ovde je definisana duž. strane 66)
Šta će od ova dva da upali - 100 ili 66? Drugo, kako da nateram REPORT da
poštuje moje ranije definisane _P**** sistemske varijable?
fox.211ndragan,
/ Kod mene, nema teorije da #if #define #endif prodje.
Obrati pažnju na verziju: Visual Fox Pro 3.0 (beta)
Na 2.6 neće, nije nikad ni htelo.
/ a sam kod je gurnut u memo polje .
A propao guranja koda u memo polja (to rade foksovi generatori, a često
radi i moj), nevolja je što se ne kompajlira dok se ne ispiše u
generisani program. Otvorite memo polje koje sadrži kod i probajte
štogod da ga kompajlirate. Cvrc.
Bilo bi zgodno kad bi neko bio ljubazan da napiše OKL rutinu koja bi to
sredila, a?
fox.212ndragan,
/ Razumljivo da neće. #if #else #endif nisu komande već kompajlerske
/ direktive
To je i bilo jasno - grešku i javlja prilikom kompajliranja. Ajd da
završimo: kombinacija
#if ovo
#define ono onako
#endif
nije podržana zaključno sa verzijom 2.6, ali radi u VFP 3.0. Ok?
/ i u run-time sa svojim direktivama, ali clipper ima ubedljivo najbolji
/ predprocesor što fox neće nikad imati (sem ako ga ne ukrade :).
Kliper nije interpreter, tj. on je od a do žnj kompajlirani jezik (vidi
se po tome što mora da se linkuje - foks _može_ da se linkuje, ako baš
hoćete, al' ne vidim čemu bi to služilo). Radi se o popriličnoj
koncepcijskoj razlici, tako da mi baš ni ne treba mnogo više # direktiva
u foksu nego što ih već ima; kad bih radio kliper, verovatno ne bih
mogao da živim bez žestokog pretprocesora.
Uostalom, zar nije kliper, po definiciji, pretprocesor koji iksbejzolike
(xBase-like) naredbe pretvara u pozive funkcija iz svoje bibliotetke?
/ Možeš svuda da pišeš _LASTROW umesto srow() što i nije nešto jer je
/ izraz koji zamenjuješ prost za pisanje.
Da, ali
#define Read_it Read Save Timeout 200 Modal valid Pera() when Mika()
...pa kad ti treba da zameniš neku od ovih opcija na deset mesta u
programu, samo zameniš u definiciji i prekompajliraš. Radio sam čak i
#define gurni =fputs(fhandle,
pa je program izgledao smešno:
gurni string1)
gurni "drugi string"), gurni "još koji string")
al' je radio ko zmaj i nisam imao nikakvih problema.
fox.213ndragan,
/ Drugo, ima dosta neobično MaskEdit polje, a to mu je onaj PICTURE
/ atribut GET
Nisi video SuperNovu, tek je tamo zabunjeno. To smo čudo na jedvite jade
dobili na probu, a onda brže bolje posklanjali sa diskova.
fox.214ndragan,
/ Statistike radi, svaki projekat veći od 20-ak stavki zaglavi bar
/ jednom pri
Kod mene normalan projekat ima brat bratu stotinak slogova (.app izađe
na 800K) a glavi uglavnom kad ga selim s mašine na mašinu ili iz bilo
kojih razloga nešto neregularno izađem iz njega itd - dakle, skenja se
kao baza ili tako nešto. Retko imam problema sa tim, al' kad počnu,
najbolje je ne prati ga, nego praviti nov.
fox.215ndragan,
/ brine samo jedna stvar - OO programiranje nije objašnjeno onako kako
/ bi trebalo... još uvek samo malobrojni znaju da se bez greške snađu u
/ ovom čudu, a
Našao sam na CDu sa junske MSDN konferencije dobar članak o OOP za
foksovce - tip je na kraju rekao 'nemojte da padate na retoriku, to je
sve u suštini prosto'. Kako ga je on objasnio, i jeste. Gledaću da ga
ponovo nađem i okačim (CD mi je ostao u Mađarskoj, dakle za jedno tri
nedelje mogu da donesem to čudo ovamo).
Jedino je bitno da znaš kojim redosledom okidaju događaji (i metodi koji
treba da reaguju na njih) kad se form otvara i zatvara, i kad žiža
prelazi sa objekta na objekat (tj kad pređe na sledeće polje), i da
voziš računa šta si kako definisao. Ako imaš jasan plan svoje
hijerarhije klasa, možeš zaista dosta da uštediš na vremenu i dužini
sorsa.
/ ko zna čega sve ne, sve gledam hoće li se ko zajebati pa napraviti
/ nešto što će kao krajnji rezultat dati vizuelno BRZU aplikaciju. Pa to
/ k'o da izmišlja
Znao sam šta nas čeka, čim je Bidža kupio lisicu. Samo sam čekao da
vidim i nisam se razočarao. Upravo ono što su obećali da neće ("rad pod
prozorima značajno usporiti foks"), desilo se. _Sve_ crta pendžere brže
od foksa. Uostalom, nije za džabe Borland napisao sopstvene rutine za
kojekakve rutinske poslove oko prozora dugmića i ostalom. Ili, zašto
isti pendžerski programi brže rade na istoj mašini pod o es pola - zato
što je emulaciju istih rutina aj bi em uradio pišući ih ponovo, ali
načisto. Sve su to brljotke malog mekanog.
fox.216ndragan,
/ kraj definisane strane (dakle, 66. red). Zašto jednostavno ne zakuca
/ tu
Ako imaš bilo kakav objekat u PageFooter traci, automatski dobijaš
chr(12) posle trake, a štampa se za svaku stranu na kojoj ima bar nečeg.
Obriši celu traku pa probaj ponovo.
Meni je to pravilo probleme kad generišem riport - ubacio sam brojač
strana u traku za dno strane, i još ubacio slog (ili beše opcija u
vodećem slogu, ne sećam se sad) za PageEjectAfter. Rezultat - izbacuje
prazan list posle izveštaja. Jedan FF u dnu poslednje strane (kao i bilo
koje druge strane) i još jedan iza svega (eject after).
fox.217ndragan,
/ menija.Da li to moze da se nekako izbegne.
Generiši sa logom, a .exe startuj sa -t (no logo), eventualno to zavari
u .bat fajl odakle pozivaš .exe fajl.
fox.218ndragan,
/ Uzgred, da li postoji vise razlicitih kompajlera za fox ili se
Ima jedan, al' pravi tri vrste .exe fajla:
compact exe, što je u stvari foxr.com+trtmrt.app (manje više),
zahteva da negde nađe Fox*.esl fajlove. Zavisno od raspoložive memorije,
startovaće šesnaestbitnu verziju sa overlejima (fox*.esl, .eso) ili
trijezdvobitnu (foxr26x.esl ili tako nešto, ima jedno x više u nazivu)
koja u komadu ide u gornju memoriju. Ne linkuje se, bar se ne primećuje.
standalone exe - 16 bitna verzija sa overlejima, sve gorenavedeno,
linkovano Wlink8 linkerom, do proliva dugo traje, ždere disk i memoriju,
i na kraju je dugačko kao oni .es?+.app zajedno (wlink8 vrlo malo
izostavi, nikad se ne zna šta može da zatreba, naročito ako ima bar
jedna makro zamena negde u aplikaciji)
standalone extended exe - jednokomadni exe, 32 bita, sadrži Phar Lap
Extender, tj sam upravlja memorijom. Linkuje se kao Simple Executable
(zato kažem jednokomadni), pet do deset puta brže nego prethodni, a
sadrži isto što i on, ali bez overleja - podrazumeva se da ima dovoljno
memorije da se učita ceo, i da još nešto ostane za bafere, stringove,
prozore itd. To praktično znači mega ipo za službeni deo, bar pola mega
za aplikaciju, i do pola mega za podatke - dva mega (produžene ili
proširene) će mu biti dosta.
Kompajler je ugrađen u Foks, i ne postoji kao poseban program.
p.s. ovo bi moglo... ko će da sastavi FoxPro.faq?
fox.219mamba,
> Generisi sa logom, a .exe startuj sa -t (no logo), eventualno to
> zavari u .bat fajl odakle pozivas .exe fajl.
I na ovaj nacin ostaje background boja nakon izlaska iz aplikacije.
fox.220max.headroom,
Objektni programeri, help. Nisam u stanju da ukapiram značenje pojma klase
(Class). Ako sam dobro shvatio, to je programski kod koji određuje skup metoda
koje se mogu izvršiti nad objektom. Klasa može naslediti određene osobine od
neke druge klase, koja se naziva predak (Ancestor). Pročitao sam i sledeće:
"The term Class is interchangeable with the term Object Type" - to znači da se
klasom može smatrati i opšti tip nekog objekta (?) Ali, da krenem redom (vi me
ispravite ako negde grešim):
Objekat - nešto što se vidi (ako nije hidden tipa) na ekranu (button, polje za
unos teksta...); njegovu pojavu određuje skup osobina (Properties). Takođe,
akcije nad objektom aktiviraju određene događaje (Events). Tip objekta definiše
klasa - dakle, klasom definišemo različite objekte, istog tipa (ovo mi nije
najjasnije - kakvi tipovi objekata, globalno, mogu postojati?). Klase mogu
nasleđivati osobine jedna od druge, po principu više i niže instance (nisam
shvatio - kakve, tačno, osobine? Da li je i prozor objekat? Ako jeste, da li se
kroz njega npr. definiše font koji će se uopšte prikazivati u njemu? Ako da, da
li je to primer nasleđivanja osobina?). Dalje, metoda (Method) - za nju piše da
je to "Procedure or a Function associated with particular object". Dakle,
objekat je multifunkcionalan entitet - ali neznam gde se definišu metodi jednog
objekta (da li su i oni nasledni? Da li se nalaze u definiciji klase, tj. tipa
jednog objekta?) Da li se Method može tretirati kao Property?
U svakom slučaju, znam kako se objekti upotrebljavaju (bar to):
ImeObjekta.Metod := ImeDrugogObjekta; ili
:= promenljiva; ili
:= konstanta;
Takođe, moguća je i sledeća kombinacija:
ImeObjekta1.Metod1(ImeObjekta2.Metod2);
Baš sam ljubopitljiv, zar ne? ;) Samo, ovo je osnova koju nisam našao niti u
jednom help-u, a bazično je za makar i najjednostavnije OOP. Kad bih to shvatio
teorijski, praktični deo bi mi daleko lakše pao :)
fox.221nlazic,
*> Objekat - nešto što se vidi (ako nije hidden tipa) na ekranu (button,
*> polje za unos teksta...); njegovu pojavu određuje skup osobina
*> (Properties). Takođe, akcije nad objektom aktiviraju određene događaje
*> (Events).
Ne, ni blizu. U "klasičnom", strukturnom programiranju program
pišeš tako što definišeš neke podatke (tipa integer, real, string...) i
onda pišeš procedure koje njima barataju. Ono što je bitno je da su podaci
i procedure/funkcije koje njima operišu razdvojeni. Fora kod objektnog
programiranja je da se podaci i procedure koje ih obrađuju spoje u jednu
celinu - objekat. Podaci koji su unutar jednog objekta zovu se POLJA
(fields), a procedure i funkcije METODI (methods). Šta su onda klase?
Jednostavno rečeno (!?), objekat je instanca klase (ili klasa je tip
objekta). Npr. kad napišeš VAR I,J:INTEGER; ti si definisao promenljive I
i J kao celobrojne. Analogno, može se napisati:
VAR OBJEKAT1, OBJEKAT2 : NEKA_KLASA;
Dakle, ono što je INTEGER za neku celobrojnu promenljivu, to je klasa za
neki objekat (objekat je promenljiva tipa klase). U prethodnom primeru
trebalo je negde iznad napisati nešto poput:
TYPE NEKA_KLASA = CLASS (RODITELJSKA_KLASA)
{ SPISAK POLJA }
Jedan, Dva : integer;
S1, S2 : string;
...
{ DEKLARACIJE METODA }
procedure PR1;
function Funkc1:Boolean;
...
END;
Konkretan kod metoda se definiše kasnije u programu, npr.:
function Neka_Klasa.Funkc1:Boolean;
begin
Funkc1:=true;
end;
Što se tiče properties-a i events-a oni sa klasičnim shvatanjem
objekata (ovim gore opisanim) nemaju ništa. To su samo "poslastice" koje je
Borland uneo u Delphi (pretpostavljam da je pitanje vezano za njega).
Osobine objekta su definisane ISKLJUžIVO sadržajem njegovih polja, a akcije
objekta se aktiviraju SAMO ako se pozove neki od njegovih metoda (kaže se
"objektu se uputi poruka". Npr. ako napišeš NekaForma.Show; ti si objektu
NekaForma (čija je deklaracija VAR NekaForma : TForm; ) uputio poruku Show,
tj. pozvao si metod NekaForma.Show.).
*> Klase mogu nasleđivati osobine jedna od druge, po principu više i niže
*> instance (nisam shvatio - kakve, tačno, osobine?
Naslednička klasa nasleđuje od roditeljske sva polja i metode. To
su te "osobine" o kojima pričaš. Naslednička klasa ih može menjati, a može
ih koristiti "as is", onakve kakve su napisane u roditeljskoj.
Objekat, dakle ne mora imati svoju reprezentaciju na ekranu.
Dizajneri Delphi-a su skontali da je najefektnije da se komunikacija sa
Windows-ima izvede preko objekata, pa su u tom cilju napisali klase za
prozore, dugmiće, skrol barove, menije, okvire i sve ostalo što vidiš (i ne
vidiš) na ekranu. Deklaracije svih ovih klasa (nažalost ne i kod) možeš
videti u *.INT fajlovima koji se isporučuju uz Delphi.
Ovo je bilo na brzinu. Ipak ti preporučujem da uzmeš neku knjigu u
kojoj je to detaljnije objašnjeno. Ako planiraš da radiš u Delphi-u dobar
početak bi bile knjige za Turbo Pascal 6.0 (mada i verzija 5.5 podržava
objekte).
Pozdrav,
:) Nebojša :)
P.S. Sad ti ništa nije jaso, jel' da? :)))))))
fox.222max.headroom,
Apropo poruke "izbacivanje cele strane pri štampi" (izvin'te što nema quote-a,
ali mi je krepao miš pa nemogu da kvotiram) - baš iz razloga što PageFooter
tera stranu do krJaja, ostavio sam samo Summary bend. Summary bi trebao da se
nalazi odmah posle završenog izveštaja, koliko se poznajem u report gen. Fox-a.
Ali, he-he, iako nema PageFooter benda on ga protera kako netreba. Bljaks.
fox.223max.headroom,
Ako nećeš Fox-ovu boju posle izlaska iz aplikacije, udari jedno CLS kroz .BAT.
fox.224abica,
Drugar ima jedan problem: u FoxPro 2.6 4Win je napravio
aplikaciju i koristeci FoxPro Distribution Kit napravio
je .EXE fajl. Medjutim, kada sa njim pokrene aplikaciju
iz Win-a (ne iz Fox-a) program izbaci glavni meni (odakle
program i treba da pocne) i istog tenutka se vrati tamo
odakle je startovan (npr. ako je startovan iz FileMgr-a
program se posle iscrtavanja menija vrati u njega, a od
aplikacije ni traga ni glasa)
Zna li ko u cemu je problem?
fox.225ndragan,
/ potrebu da pišem aplikacije za matrične štampače :) Zna li neko
/ (NDragane?)
Nisam se igrao sa _PdSetup, u načelu su svi štampači Esc/P ili Esc/P2
kompatibilni i mogu se neke osnovne sekvence ugurati direktno u sam
riport ili ručno rađenu štampu, a ostale baš i nisu nužne. Od ostalih
štampača igraju još PCL i PostScript kompatibilni, ali tu se, mislim, ne
vredi zezati sa štampanjem iz dosa - o tom potom kad budemo morali da
pređemo pod prozore. Tj, jesam napravio par štampi za na laser, ali na
ruke.
Jednom sam, od zezanja, stavio _pdsetup=postscript u config.fp, i
dobijao sam lepe .ps fajlove, koje nisam imao iz čega da gledam, a ni na
čemu da štampam :). Pogledao sam par komada iz GoScripta, pa koliko je
to na VGA monitoru moglo da se vidi, ličilo je na štogod. Nisam imao
laser pri nozi tog trenutka da vidim na šta liči kad se baci na papir.
fox.226max.headroom,
> pređemo pod prozore. Tj, jesam napravio par štampi za na laser, ali na
> ruke.
Moja je nezgoda što sam do sada i pravio štampe isključivo za lasere (uglavnom
HP familija, ekstra jedan Epson), naravno - iz DOS-a. Smanjim slovca na
najsitnije, pa kad pogura izveštaj stane pola megabajta na stranu :) Zaista
nisam imao nikakvih problema sa dužinom strane i sličnim zezalicama, a da ručno
pravim neke izveštaje ne da mi se ne dopada, nego nemam iskaza (silna
grupisanja i tomu nalik).
Šta najzad bi sa onim FoxFire! add-in-om? Ima li ko info. o čemu se radi?
fox.227max.headroom,
> Drugar ima jedan problem: u FoxPro 2.6 4Win je napravio
> aplikaciju i koristeci FoxPro Distribution Kit napravio
Najverovatnije je nije dobro debugovao. Neka pogleda SKIP FOR uslove u glavnom
meniju, ako ih ima, kao i definicije PAD-ova, i tome slično. Da li je probao sa
prethodnim startovanjem aplikacije iz Fox-a? :)
fox.228nkbog,
> Objektni programeri, help. Nisam u stanju da ukapiram značenje pojma klase
> (Class). Ako sam dobro shvatio, to je programski kod koji određuje skup
> metoda koje se mogu izvršiti nad objektom. Klasa može naslediti određene
> osobine od neke druge klase, koja se naziva predak (Ancestor). Pročitao sam
> i sledeće: "The term Class is interchangeable with the term Object Type" -
> to znači da se klasom može smatrati i opšti tip nekog objekta (?)
Klasa je pojam. Objekat je pojava.
Klasa je čovek. Objekat je Max.Headroom.
Klasa je, upravo, opšti tip nekog objekta.
> Objekat - nešto što se vidi (ako nije hidden tipa) na ekranu (button,
> polje za unos teksta...);
To je tzv. "vizuelni" objekat. Objekat nije dugme, već dugme "OK". Nije
polje za unos teksta, već "polje za unos imena i prezimena". Ono prvo
su klase, ovo drugo su objekti.
> njegovu pojavu <OBJEKTA> određuje skup osobina (Properties).
> Takođe, akcije nad objektom aktiviraju određene događaje (Events).
Manje, više da. S tim da su i metode aktivirane određenom akcijom
(pozivom).
> Tip objekta definiše klasa - dakle, klasom definišemo različite objekte,
> istog tipa (ovo mi nije najjasnije - kakvi tipovi objekata, globalno, mogu
> postojati?).
Niz. Ceo broj. Push Button. čivotinja.
Sve što postoji pripada nekom tipu, a taj tip je klasa (kategorija) tog
"postojanja", odnostno tog objekta. Prozor aplikacije "Moja aplikacija"
je objekat klase prozora. On pripada vrsti objekata koja se naziva opštim
imenom "Prozor" i predstavlja jednu pojavu tog prozora.
> Klase mogu nasleđivati osobine jedna od druge, po principu više
> i niže instance (nisam shvatio - kakve, tačno, osobine?
Ne baš.
"Nasleđivanje na dole" - "pravo" nasleđivanje:
Klasa nasleđuje osobine klase iz koji je izvedena. Na primer,
čovek je nastao od neke vrste primata, neke osobine on je nasledio od
pretka, a neke ima nezavisne. Slično, list boks je prozor, pa on ima
osobine prozora (visinu, širinu, položaj, reaguje na miša i sl.), ali
ima i nove osobine (sadržaj, broj elemenata, aktivan element).
"Nasleđivanje na gore" - polimorfizam:
(Nasleđivanje na gore nije dobar termin). Stvar je u sledećem: za čoveka
kažemo da je primat (kao i gorile i lemuri). Stoga je Nenad Bogojević
instanca klase Primata. Sa druge strane klasa žovek je izvedena iz klase
Primata, pa objekat Nenad Bogojević, koji je i žovek, ako ga posmatramo
kao Primata ponaša se malo drugačije od "običnog" primata. U stvari Nenad
Bogojević se ponaša kao da pripada različitim grupama (ima više "oblika"
- polimorf): i Primat je, i žovek je. Svi prozori imaju HWND osobinu
u Windowsima koja ih jedinstveno identifikuje. Kada ti dobiješ HWND,
možeš da pomisliš da je to ordinarni prozor, a to je u stvari dijalog,
ili lista ili dugme. Prozor definisan sa HWND ponaša se i kao prozor
i kao ono što jeste.
> Da li je i prozor objekat?
Prozor je klasa. Prozor na ekranu je objekat (čak i ako je nevidljiv).
> Ako jeste, da li se kroz njega npr. definiše font koji će se uopšte
> prikazivati u njemu? Ako da, da li je to primer nasleđivanja osobina?).
Nije. To je definisanje osobine. Nasleđivanje je pravljenje nove klase
koja ima osobine Prozora, ali dodaje i druge osobine (npr. smer ispisa
teksta).
> Dalje, metoda (Method) - za nju piše da je to "Procedure or a Function
> associated with particular object". Dakle, objekat je multifunkcionalan
> entitet -
Tačno!
> ali neznam gde se definišu metodi jednog objekta (da li su i oni
> nasledni? Da li se nalaze u definiciji klase, tj. tipa jednog objekta?)
Do skoro je su oni bili nepromenljivi (VB do 3.0, Access), ali izgleda da
su se promenili.
> Da li se Method može tretirati kao Property?
Ne. Metod je interfejs prema objektu. To je postupak za programsku
interakciju sa objektom. Osobina je osobina. Na primer, plave oči su
osobina. Poznavanje jezika i razumevanje i reakcija na komandu "Gledaj
pravo!" je metod.
NB.
fox.229nkbog,
*> Objekat - nešto što se vidi (ako nije hidden tipa) na ekranu (button,
*> polje za unos teksta...); njegovu pojavu određuje skup osobina
*> (Properties). Takođe, akcije nad objektom aktiviraju određene događaje
*> (Events).
> Ne, ni blizu.
Naprotiv, vrlo blizu (bar drugi deo). Svaki objekat ima osobine opisane
podacima i određene metode koji predstavljaju interfejs prema spoljašnjosti
(programerskoj ili korisničkoj). U Microsoftovim Visual jezicima postoje dve
grupe metoda: metode koje služe za programski pristup (Methods) i metode
kojima se opisuje ponašanje pri interakciji sa korisnikom (Events). Prve
su do skora bile bogom dane, a druge su se mogle menjati.
> Osobine objekta su definisane ISKLJUžIVO sadržajem njegovih polja,
Properties u Visual Basicu, Fox, Accessu, Delphiu predstavljaju jedan
"prijateljskiji" način za predstavljanje javnih "polja" objekta. Jer zaista,
šta jesu javna "polja" ako ne "osobine" objekta koje mozemo menjati. Šta
se unutar objekta zaista zbiva, za programera nije bitno. On ima unapred
zadat programerski interfejs, a da li je Property polje ili niz polja,
to programera ne mora (a i ne treba da interesuje).
> a akcije
> objekta se aktiviraju SAMO ako se pozove neki od njegovih metoda (kaže se
> "objektu se uputi poruka". Npr. ako napišeš NekaForma.Show; ti si objektu
> NekaForma (čija je deklaracija VAR NekaForma : TForm; ) uputio poruku Show,
> tj. pozvao si metod NekaForma.Show.).
Događaji su metode koje se pozivaju kad se objektu uputi poruka,
pri čemu konkretnu poruku upućuje operativni sistem (npr. WM_SHOW,
WM_SETFOCUS).
NB.
fox.230nlazic,
*> U Microsoftovim Visual jezicima
*> postoje dve grupe metoda: metode koje služe za programski pristup
*> (Methods) i metode kojima se opisuje ponašanje pri interakciji sa
*> korisnikom (Events). Prve su do skora bile bogom dane, a druge su se
*> mogle menjati.
OOP je nastao mnogo pre Windows-a, Microsoft-a i njegovih Visual
jezika. Identifikovati pojam objektnog programiranja sa Visual jezicima, pa
i sa Win-om uopšte, je u najmanju ruku pogrešno. Evo primera: sam si rekao
da su metode u V. jezicima (bile) nepromenljive. To se kosi sa jednim od
najosnovinih principa OOP-a: jedna klasa nasleđuje drugu, dodaje joj svoje
osobine (polja i metode) i modifikuje postojeće. Ako se ne varam, u VB-u
(do v.4.0) čak nije bilo moguće ni napraviti neki sopstveni objekat! Hoću
da kažem da svi ti pojmovi (properties, events, etc.) koje uvode MS i
Borland nemaju mnogo veze sa "klasičnim" shvatanjem objekata. Oni su
uvedeni samo da bi se automatizovale neke rutinske stvari. Još jedan primer
je Borlandov OWL: to je biblioteka klasa (za paskal i c) koja služi kao
interfejs ka Win okruženju. Njene klase ne poznaju ni properties-e ni
event-e, već isključivo polja i metode, ali su pravi primer objektnog
dizajna korisničkog interfejsa.
*> Properties u Visual Basicu, Fox, Accessu, Delphiu predstavljaju jedan
*> "prijateljskiji" način za predstavljanje javnih "polja" objekta. Jer
Da, ali to nisu standardne osobine objekata. Ono što objektni
kompajleri moraju da podržavaju su polja i metodi. Ostale stvarčice o
kojima ti govoriš, svaki kompajler (pa čak i svaka nova verzija istog
kompajlera, u slučaju MS-a!) tretira na drugi način. One su samo posledica
prirode Windows okruženja kojoj su dotični kompajleri prilagođeni.
*> Šta se unutar objekta zaista zbiva, za programera nije bitno. On ima
Bitno je ako piše neku novu klasu, a praktično je nemoguće
napisati (dobar) program koji koristi samo unapred definisane klase.
*> Događaji su metode koje se pozivaju kad se objektu uputi poruka,
*> pri čemu konkretnu poruku upućuje operativni sistem (npr. WM_SHOW,
*> WM_SETFOCUS).
Ne, događaji nisu metode. Reč događaj treba shvatiti u
najbukvalnijem smislu: događaj je pritisak na taster miša ili tastature,
pokret miša i sl. Kad Windows detektuje neki događaj, on generiše poruku
(poruka je samo skup podataka koji opisuju događaj, npr. koji je taster
pritisnut, gde je pomeren miš i sl.) koju upućuje ciljnoj aplikaciji i tu
se njegov posao završava (ako aplikacija "prihvati" tu poruku). Aplikacijin
posao je da analizira poruku i reaguje (ili ne reaguje) na određen način. U
slučaju objektnih Win. kompajlera (to su pre svega paskal i c kompajleri,
VB ne treba porediti sa njima (on i nije kompajler)) cela aplikacia je samo
još jedan objekat, koji onda (po prijemu poruke) aktivira odgovarajući
metod.
REZIME: :)))
Nikako ne treba posmatrati OOP "kroz prozore". OOP zaista jeste
najbolji način porgramiaranja Win-a, ali daleko od toga da mu je to jedina
svrha. Ako se na tome ostane i deo programa koji komuniciria sa Win-om
napiše "objektno", koristeći ponuđene klase, a ostatak na "standardan"
način, dobija se neka nesrećna mešavina OOP-a i strukturnog programiranja
koja retko kad urodi plodom.
Pozdrav,
:) Nebojša :)
fox.231nlazic,
*> Do skoro je su oni bili nepromenljivi (VB do 3.0, Access), ali izgleda
*> da su se promenili.
U "normalnom" OOP-u metodi nikad nisu nepromenljivi, daleko od
toga. To je bio slučaj samo u nekim MS-ovim jezicima (VB) koji
nisu imali preterane veze za objektnim programiranjem. Jedna od osobina na
kojima se temlji OOP je menjanje (redefinisanje) nasleđenih metoda.
Pozdrav,
:) Nebojša :)