PCPROG.5

05 Jan 1995 - 02 Oct 1995

Messages - fox

fox.1 djelovic,
Ljubitelji Lisice, Dobrodošli u najbržu temu na Sezamu.
fox.2 dr.grba, -> #1, djelovic
>> Dobrodošli u najbržu temu na Sezamu. A sad da mi svaki obeća po jedno piće (:
fox.3 sbrk, -> #2, dr.grba
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.4 djelovic, -> #2, dr.grba
> 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.5 ab.comp, -> #1, djelovic
==> Dobrodošli u najbržu temu na Sezamu. Mašala! Pozdrav █ █ █ █ ▄▄█ █ █▄▄ █▄▄
fox.6 mradic,
čiveli! Dobili smo svoju temu! Ojha! ;) Treba opravdati poverenje, pa, po protokolu, reč dajem iskusnijim Fox-ovcima od sebe... GO FOR IT! :)
fox.7 goxx, -> #6, mradic
■ č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.8 max.headroom, -> #4, djelovic
> 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.9 max.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.arj
fox.10 max.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.arj
fox.11 max.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.arj
fox.12 mradic,
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.13 mradic, -> #12, mradic
█ 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.14 nbjvsa, -> #12, mradic
> 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.15 ab.comp, -> #13, mradic
==> Ipak, ostaje pitanje: kako da mi se obriše ekran ==> po ulasku u Fox Staviš mu svič -t u (PIP) Command Line. Pozdrav █ █ █ █ ▄▄█ █ █▄▄ █▄▄
fox.19 max.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.16 max.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.17 max.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.18 max.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.22 max.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.21 max.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.20 max.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.25 max.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.24 max.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.23 max.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.26 mradic,
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.27 goxx,
■ 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.28 ab.comp, -> #27, goxx
==> 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.zip
fox.29 max.headroom, -> #26, mradic
> 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.30 max.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.31 mradic, -> #29, max.headroom
█ 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.32 djelovic, -> #30, max.headroom
> Spisak tema diskutovanih u PC.PROG.5:baze.podataka, a tiču se Fox-a: Hvala!
fox.33 ab.comp, -> #31, mradic
==> 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.34 gaston,
Evo onog mog programa i ovde, ali kao ZIP fajl, da ne trosim mgogo vremena i prostora. Nesa Gaston listzone.zip
fox.35 max.headroom, -> #33, ab.comp
> 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.36 mradic,
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.37 mradic, -> #33, ab.comp
█ Radiš LOCATE ili SEEK() ako imaš indeks sa █ sastavljenim █ ključem: Super! Koristio mi je deo koda koji si napisao, radi. Zahvaljujem! :-)
fox.38 max.headroom,
FoxPro v2.5 Win Advanced Developers' Handbook (1/5) fpadh.arj
fox.39 max.headroom,
FoxPro v2.5 Win Advanced Developers' Handbook (2/5) fpadh.a01
fox.40 max.headroom,
FoxPro v2.5 Win Advanced Developers' Handbook (3/5) fpadh.a02
fox.41 max.headroom,
FoxPro v2.5 Win Advanced Developers' Handbook (4/5) fpadh.a03
fox.42 mradic,
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.43 sbrk, -> #42, mradic
>> 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.a
fox.44 sbrk,
čao mi je zbog greške. Datoteka uz prethodnu poruku (a.a) se ustvari stvarno zove: DMETD4FP.ZIP ;)
fox.45 max.headroom,
FoxPro v2.5 Win Advanced Developers' Handbook (5/5) fpadh.a04
fox.46 djelovic, -> #45, max.headroom
> Advanced Developers' Handbook (5/5) Hvala na zanimljivom prilogu. BTW, bulajo, ovo bi moglo u dir?
fox.47 bulaja, -> #46, djelovic
│ 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.48 ddabic, -> #21, max.headroom
> 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.49 sbrk,
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.arj
fox.50 sbrk, -> #49, sbrk
>> kada se bira bilo koji POPUP BUTTON, PUSH BUTTON Sorry.
fox.51 max.headroom, -> #48, ddabic
> 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.52 sbrk, -> #51, max.headroom
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.53 bulaja,
**** 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.54 ddabic, -> #22, max.headroom
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.55 ab.comp, -> #54, ddabic
==> 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.56 mradic, -> #36, mradic
█ 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.57 max.headroom, -> #54, ddabic
> 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.58 sbrk, -> #49, sbrk
>> 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.59 ab.comp, -> #58, sbrk
==> postoji li neki Shortcut za gašenje Dos prozora u ==> Foxu? Ona Negde uspeva sa Alt+Space. Pozdrav █ █ █ █ ▄▄█ █ █▄▄ █▄▄
fox.60 mradic,
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.61 oki., -> #60, mradic
>> 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.62 mradic, -> #60, mradic
█ 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.63 oki., -> #62, mradic
>> 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.64 ab.comp, -> #62, mradic
==> znak u "w" i slično. Jasno, sve se ovo može ==> isprogramirati kroz petlju, ali ako već ==> postoji... ;) Imaš STUFF(). Pozdrav █ █ █ █ ▄▄█ █ █▄▄ █▄▄
fox.65 sbrk,
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.66 ndragan,
Izvinjotka svima, promaklo mi je svečano otvaranje. Sad ću ja da vas stignem. Max, drži tebe, dolećavam :)
fox.67 ndragan, -> #12, mradic
/ 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.68 ndragan, -> #16, max.headroom
/ 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.71 ndragan, -> #57, max.headroom
/ 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.69 ndragan, -> #17, max.headroom
/ 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.70 ndragan, -> #18, max.headroom
/ - :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.72 ndragan, -> #25, max.headroom
/ 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.74 ndragan, -> #58, sbrk
/ 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.75 ndragan, -> #62, mradic
/ 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.73 ndragan, -> #26, mradic
/ 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.76 sbrk, -> #74, ndragan
>> / 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.77 ab.comp, -> #76, sbrk
==> 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.78 gcurcic,
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.79 ndragan, -> #78, gcurcic
/ 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.81 sbrk,
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.82 ddabic, -> #71, ndragan
> 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.83 ndragan, -> #82, ddabic
/ _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.87 sbrk,
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.86 sbrk,
Da li neko ima knjigu Inside FoxPro 2.5 for Windows ? Hitno.
fox.88 sbrk,
ž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.89 m.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.90 ab.comp, -> #89, m.dzigurski
==> 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.91 ndragan, -> #88, sbrk
/ Jel vredi nešto odavde? Ako nije zglomazno, bači sve. Naročito ono u vezi sa ser Oraklom.
fox.92 sbrk, -> #91, ndragan
>> / 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.93 ndragan,
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.94 sbrk,
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.95 nbatocanin, -> #94, sbrk
> "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.96 sbrk,
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.97 sbrk, -> #96, sbrk
>> 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.98 ndragan, -> #96, sbrk
/ 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.99 nbatocanin, -> #98, ndragan
> 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.100 gcurcic, -> #98, ndragan
¨˙> Š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.101 sbrk,
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.103 ndragan, -> #100, gcurcic
/ 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.102 ndragan, -> #99, nbatocanin
/ 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 :)