Вы находитесь на странице: 1из 13

Visual commands

https://books.google.ro/books?
id=wKNfTHRNkLAC&pg=PA199&lpg=PA199&dq=valid+in+field+
+table+visual+fox&source=bl&ots=_08TkRZoYG&sig=e1UJ8XzA
60j41Vvb28jXDLQsR9o&hl=ro&sa=X&ved=2ahUKEwiT0v6ijqDeA
hXvsIsKHfJdDEQQ6AEwBnoECAQQAQ#v=onepage&q=valid
%20in%20field%20%20table%20visual%20fox&f=false

https://www.atestatelainformatica.ro/blog/tutorial-foxpro/cum-fac-
formulare-in-visual-foxpro/15
https://www.scribd.com/doc/74674396/Manual-Utilizare-Visual-
FoxPro

8 feb. 2016 - 21 de postări - 5 autori


read cycle if op1=1 sele a go bott appe blan repl cuscnt with
a sele b go bott appe blan gath memv repl cuscnt with
a loop endi if op1=2 loop

I have been trobleshooting a VFP 7 screen that converted from


FoxPro 2.6. The screen's LOAD event is calling a PRG file that
has a READ CYCLE WITH ...., to display a BROWSE screen for the
user to select the record in a table, then it will display the record
in the screen.

This screen runs fine in FoxPro 2.6 but not in VFP7. The error
occurs in the READ CYCLE WITH command.

Should I change the program to call the PRG first, then based in
the selection of the user and pass the parameter to the
screen. Please advice.

Thanks

read cycle timeout 300

I try to convert a FoxPro 2.6 application to VFP 7. One of the


error I encountered is I got a error "Feature is not available" in
READ CYCLE WITH... line. This line is in a PRG that call from a
form "Load" event (basically this PRG consist of DEFINE
WINDOW...BROWSE...and displaying the records in a table for the user to select...). Please let me know how
to get around this problem.

've been converting applications from 2.6 to VFP recently, and in


the review of my previous design, I've been reading alot about
READ EVENTS. I'm still using a foundation READ, which I
understand in VFP now gives me 10 reads instead of 5, which is
somewhat helpful, but I'd like to "Make the leap" as it were, to
the bigger perspective of no longer being concerened with READ
clauses anymore... that brings me to two questions. First, this is
how I used to establish my foundation READ, and set up my
environment:

IF NOT M.glQUITAPP
*
DEFINE WINDOW BACKGRND FROM 0,0 TO 120,340
FONT 'TimesNewRoman', 10 FILL
FILE GRAPHICS\OPENLOGO.BMP IN SCREEN
SHOW WINDOW BACKGRND

* Call root menu of application, and establish the


* Foundation read below.

DO MAINMENU.MPR
DO MENUINFO
*
DO SPLASH.SPR
=INKEY(4,'HM')
*
READ VALID M.glQUITAPP
ENDIF

This would creat a background for my application, display an


image in the background, show a splash screen (for 4 seconds),
then establish the application's foundation read.

Then, every screen thereafter, I would issue a "READ MODAL"


clause on to ensure they don't get "LOST" behind the graphic of
my screen.

I've seen some things on "MDI" forms. I don't understand them,


or how to implment them. What is the advantage/disadvantage
of them? Is it something I should use here?
Also, How, with a READ EVENTS do I manage the
creation/distruction of other screens??? For instance, I have an
error routine that captures syntax errors, and displays a window
to "Retry, Cancel, or Quit". I currently control it with:

READ CYCLE OBJECT 3 MODAL

But that keeps blowing up on me when some types of errors


occur. How would I change this to support READ EVENTS?

Thanks,
-Scott

#REGION 0
REGIONAL m.currarea, m.talkstat, m.compstat

IF SET("TALK") = "ON"
SET TALK OFF
m.talkstat = "ON"
ELSE
m.talkstat = "OFF"
ENDIF
m.compstat = SET("COMPATIBLE")
SET COMPATIBLE FOXPLUS

m.rborder = SET("READBORDER")
SET READBORDER ON

m.currarea = SELECT()

IF NOT WEXIST("_3mo10i7u5")
DEFINE WINDOW _3mo10i7u5 ;
AT 0.000, 0.000 ;
SIZE 22.000,98.400 ;
FONT "MS Sans Serif", 8 ;
FLOAT ;
NOCLOSE ;
MINIMIZE ;
SYSTEM
ENDIF

#REGION 1
IF WVISIBLE("_3mo10i7u5")
ACTIVATE WINDOW _3mo10i7u5 SAME
ELSE
ACTIVATE WINDOW _3mo10i7u5 NOSHOW
ENDIF
@ 16.615,29.200 GET foo ;
PICTURE "@*HN Draw" ;
SIZE 1.769,7.000,0.667 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "B" ;
VALID _3mo10i7ua()
@ 16.615,57.600 GET done ;
PICTURE "@*HT Exit" ;
SIZE 1.769,5.667,0.667 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "B"
@ 16.615,40.800 GET fooo ;
PICTURE "@*HN Object" ;
SIZE 1.769,8.333,0.667 ;
DEFAULT 1 ;
FONT "MS Sans Serif", 8 ;
STYLE "B" ;
VALID _3mo10i7uh()

IF NOT WVISIBLE("_3mo10i7u5")
ACTIVATE WINDOW _3mo10i7u5
ENDIF

READ CYCLE

RELEASE WINDOW _3mo10i7u5


SELECT (m.currarea)

#REGION 0

SET READBORDER &rborder

IF m.talkstat = "ON"
SET TALK ON
ENDIF
IF m.compstat = "ON"
SET COMPATIBLE ON
ENDIF

FUNCTION _3mo10i7ua && foo VALID


#REGION 1
@ 1.102,4.002 to 13.402,25.002 PATTERN 1 PEN 1, 0 COLOR RGB(,,,192,192,192)

FUNCTION _3mo10i7uh && fooo VALID


#REGION 1

* Original @..pattern..pen line:


*@ 1.102,4.002 to 13.402,25.002 PATTERN 1 PEN 1, 0 COLOR RGB(,,,192,192,192)

* Get screen coordinates


lnUlY = 1.102 * FONTMETRIC(1)
lnUlX = 4.002 * fontmetric(6)
lnLrY = 13.402 * fontmetric(1)
lnLrX = 25.002 * fontmetric(6)

IF TYPE("gnIterator") != "N"
PUBLIC gnIterator
gnIterator = 0
ENDIF

IF LEFT(VERSION(),2) >= "3."


gnIterator = gnIterator + 1
lcName = "foo" + ALLTRIM(STR(gnIterator,3,0))
k = "_screen.forms(1).addObject('" + lcName + "', 'shape')"
&k
k = "_screen.forms(1)." + lcName + ".left = lnUlX"
&k
k = "_screen.forms(1)." + lcName + ".top = lnUlY"
&k
k = "_screen.forms(1)." + lcName + ".width = lnLrX - lnUlX"
&k
k = "_screen.forms(1)." + lcName + ".height = lnLrY - lnUlY"
&k
k = "_screen.forms(1)." + lcName + ".backColor = RGB(255,255,0)"
&k
k = "_screen.forms(1)." + lcName + ".visible = .t."
&k
ENDIF
http://www.dennisallen.com/readvfp.htm

0746295847; 0332/818587;spinjobs@spingrouphr.ro
In vechiul fox, clauza cycle te tine in get-urile activate de read
atunci cand navighezi intre ele cu tab sau sageti.

Ma intereseaza cum pot obtine acelasi efect intr-un container cu


cateva textboxuri, command-uri etc. Atunci cand prin navigare cu
taste se ajunge la ultimul obiect sa sara la primul din containerul
de care apartin, nu in exterior la urmatorul obiect de dupa acesta.

O varianta ar fi enabled=.f. pe celelalte obiecte cat se opereaza in


container, insa nu-i aplicabila intotdeauna.

n evenimentul LostFocus() poti sa pui ceva de genul:


this.parent.controlul_dorit.SetFocus()
dar asta inseamna ca fortezi userul sa dea un click daca vrea sa
iasa din acel container.
n ita-te te rog aici:

http://www.profox.ro/Forum/tabid/55/forumid/12/threadid/1427/sco
pe/posts/Default.aspx.

sta poate functiona doar cu butoanele de pe toolbar, care nu iau


focusul unui control
Daca despre asta e vorba, pui cod ca mai jos in Click() la
butoanele respective

Sys(1500,'_med_copy','_medit')
sau
Sys(1500,'_med_cut','_medit')

sau
Sys(1500,'_med_paste','_medit')
Depinde ce vrei sa faca butoanele respective
Pentru o lista de submeniuri/optiuni, consulta help la sys(1500)
sau topicul System menu names

e: Cod pt ca un buton sa execute pe evenimentul clik,


CTRL+C
(N/A)
_cliptext = Transform( {alias.camp} )

Re: alegere imprimanta = GetPrinter()


(Romania)
Daca vrei sa tiparesti un report, urmatoarea comanda te lasa sa
visualizezi reportul si daca dai pe print te lasa sa-i alegu una din
inprimantele instalate pe calculatorul tau.

REPORT FORM nume_raport TO PRINTER PROMPT PREVIEW


Ajutor la help.chm in forma
(Romania)

http://support.microsoft.com/kb/q195613/

pentru printarea unei ferestre in windows poti folosi API

DECLARE INTEGER PrintWindow IN DibApi32 AS PrintWin ;


INTEGER HWnd, ;
INTEGER fPrintArea, ;
INTEGER fPrintOpt, ;
INTEGER wxScale, ;
INTEGER wyScale, ;
STRING @ szJobName

Cristian Birlea - CLASSOFT

www.classoft.ro

Cum se pot transfera date dintr-o tabela fox intr-un fisier Word .

Cu Ole Automation ceea ce presupune sa ai word-ul instalat.

Si faci asa:

oWord = CREATEOBJECT( "Word.Application")

oWord.SELECTION.typetext( ALLTRIM( cText))

De aici in colo problema devine mai stufoasa in functie de ce si


cum vrei sa pui in document. Cea mai simpla solutii este sa
folosesti Bookmark-uri.

IMPORT DIN XLS

USE cant
APPEND FROM c:\cantit2.xls DELIMITED WITH tab
brow
retu
Scopul tutorialului
Crearea unui formular in visual foxpro care sa permita adaugarea de noi date intr-o tabela. In cazul nostru adaugarea de noi
clase in baza de date, mai exact in tabela clase.dbf.

Adaugarea unui formular


Pentru a adauga un nou formular la proiect se deschide mai intai aplicatia in foxpro (deschidem fisierul cu extensia .pjx sau
.pjt) dupa care din Project Manager selectam Forms apoi apasam butonul New. In fereastra nou aparuta se alege New
Form ca in imaginea de mai jos.

Crearea unui text box intr-un fomular


Avem in acest moment creata o forma goala, fara niciun element in ea. In continuare vom adauga cateva campuri care sa ne
permita sa adaugam date in tabela.
In imaginea de mai jos va este prezentat modul in care se poate adauga un nou elemenent in formular, vom adauga un
element de tip text box. Se selecteaza elementul ca la pasul 1 apoi se face click stanga pe formular.

Ca sa putem lucra mai usor cu acest element ii vom seta niste proprietati. Se da click dreapta pe elementul de tip text box
pentru a accesa proprietatile lui si se adauga in campul control source valoarea _diriginte. In acest moment vom avea acces
foarte usor la orice text va fi introdus in text box prin simpla utilizare a variabilei _diriginte (vezi imaginea de mai jos)

Crearea unei etichete (label) intr-un fomular


Ca sa fie totul mai frumos vom adauga si o eticheta pentru acest text box. Se alege label din meniu si se adauga elementul in
forma. Este de preferat sa fie in fata text box-ului. (vedeti imaginea de mai jos)

Vom face si la elementul eticheta cateva setari pentru a arata mai bine. Pentru inceput se apasa click dreapta pe
elementrul Label1 si se alege Properties. In campul properties vom schimba cateva valori si anume:
 Caption: in loc de Label1 vom scrie Numele Dirigintelui
 AutoSize: il facem .T. - True
 ForeColor: alegem un albastru inchis
 BackStyle: se alege 0-Transparent
Exemplu cum se schimba labelul:
In continuare vom mai adauga inca doua text box-uri si doua label-uri urmand pasii de mai sus:

1. Text box la care setam control source cu valoarea _denumire


2. Un label cu proprietatea Caption setata cu valoarea Denumire iar ForeColor tot un albastru inchis.
3. Text box la care setam control source cu valoarea _sala
4. Un label cu propritatea Caption setata cu valoarea Sala iar ForeColor tot un albastru inchis.
La urmatorul pas vom mai face cateva setari, la formular de aceasta data. Se da click drepta pe spatiul gol al formularului si se
vor schimba urmatoarele proprietati dupa cum urmeaza:

 BackColor: se va alege culoara alba


 AutoCenter: se va seta pe .T. - True
 Caption: se va adauga textul Adauga o noua clasa

Crearea unui buton intr-un fomular


Pentru a crea un buton se va proceda ca in imaginea de mai jos. Dupa ce am adaugat butonul in formular vom seta cateva
proprietati ale acestuia si anume:

 Caption: punem textul Adauga clasa


 Name: schimbam din Command1 in adauga

Repetam pasii de mai sus pentru a mai adauga un nou buton la care ii vom seta valoarea Caption cu Reseteaza si valoarea Name
cu reset
Avem in acest moment un formular cu 3 campuri de tip text si doua butoane. In continuare vom implementa codul sursa ce
trebuie executat atunci cand un utilizator va apasa butonul Adauga clasa sau Reseteaza.

Codul sursa in foxpro


Pentru inceput vom seta variabilele ce le-am trecut in control source la fiecare text box. Acest lucru il vom face in functia de
initializare a fomularului. Se face dublu click pe spatiul gol al fomularului si va apare astfel un editor in care vom putea scrie
cod. Se alge functia init ca in imaginea de mai jos.

In editor vom pune urmatoarele 3 linii de cod:

_denumire=space(5)
_sala=space(10)
_diriginte=space(20)
thisform.Refresh
Aceleasi 4 linii de cod le vom copia si le vom pune in actiunea butonului Reseteaza. Pentru a accesa codul sursa al
butonului Reseteaza faceti dublu click pe butonul respectiv si va apare editorul sau. Adaugati acolo cele 4 linii de cod si din
acest moment, cand se va apasa butonul, toate cele 3 campuri ale formularului se vor goli.
Vom adauga acum codul sursa pentru butonul Adauga clasa. La fel ca butonul Reset trebuie sa faceti dublu click pe
butonul Adauga clasa si astfel va apare editorul in care trebuie sa scrieti codul sursa ce se va executa cand apasati butonul.
Codul de mai jos realizeaza stocarea informatiilor din formular in tabela clase.dbf. A fost adaugata si o validare, adica toate
campurile formularului vor trebui sa fie completate pentru a putea salva informatiile.
IF EMPTY(_diriginte) OR EMPTY(_denumire) OR EMPTY(_sala)
MESSAGEBOX("Introduceti toate datele!",48)
ELSE
USE clase
APPEND BLANK
replace denumire WITH upper(ALLTRIM(_denumire)), ;
sala WITH _sala, ;
diriginte WITH upper(ALLTRIM(_diriginte))
MESSAGEBOX("Clasa a fost adaugata cu succes!",48)

_denumire=space(5)
_sala=space(10)
_diriginte=space(20)
thisform.Refresh
ENDIF

Acum putem rula aplicatia sa vedem daca formularul nou creat functioneaza. Pentru a rula direct acest formuar procedati ca in
imaginea de mai jos. (click dreapta pe bara de sus a formularului si alegeti optiunea Run Form

Pentru intrebari sau probleme puteti posta comentari mai jos folosind contul de facebook.
Succes!

Scris de AtestateLaInformatica.ro

Вам также может понравиться