Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Clase - VCX si PRG  Crearea unei cl...
 Crearea unei clase si 'exploatarea' ei.
 
 3/14/2006 10:37:50 AM
User is offlineAlin Berce
371 posts
3rd




Crearea unei clase si 'exploatarea' ei.
 (Romania)
Am inceput o aplicatie multifirma, si am incercat sa creez o clasa bazata pe Form.
Procedeul a fost urmatorul: File -> New -> Class. Am facut clasa myform bazata pe Form.
In fereastra care s-a deschis in load-ul formului am scris urmatoarea secventa de cod:

thisform.dataenvironment.closetables()
local cale_date
cale_date="..\date\"+alltrim(_screen.company_id)+"_date.dbc"
endif
x=amembers(acrs,thisform.dataenvironment,2)
for i=1 to x
crsObj = EVALUATE( "THISFORM.Dataenvironment." + aCrs(i))
IF lower(crsObj.BaseClass) == "cursor" and not empty(crsObj.database)
strdbc=cale_date
if not file(strdbc)
messagebox("Fisiere lipsa in baza de date!!!")
return .f.
else
crsObj.Database=strDbc
ENDIF
endif
endfor
thisform.dataenvironment.opentables()

Multumesc inca o data lui Alex pentru acest cod. Secventa asta de cod daca o pun in load-ul unui form merge bine.
Dar, sa revin la oile mele... am creat un nou form, la view clases am ales clasa mea si am dat click pe form-ul nou, mi-a creat un formset, dupa care am sters form-ul initial si formset-ul, ramanand doar cu form-ul din clasa myform.

Acum, problema e ca daca eu scriu ceva in load-ul formului bazat pe clasa myform nu mai imi executa secventa de cod de mai sus. De ce ?
Si sunt convins ca modul de creare a unui nou form bazat pe clasa myform nu este cel folosit de mine, deci v-as fi foarte recunoscator sa ma indrumati catre carari mai bune.
Multumiri.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 3/14/2006 10:52:35 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Crearea unei clase si 'exploatarea' ei.
 (N/A)

Tools / Options / Forms / Template classes  si aici ii dai clasa din care vrei sa fie creat un form atunci cand dai comanda CREATE FORM.

 


Daniel Buduru
 3/14/2006 11:01:42 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Crearea unei clase si 'exploatarea' ei.
 (N/A)

O observatie la codul din Form.Load:
Daca  in DataEnvironment  nu ai AutoOpenTables= .F., dataenvironment.opentables se executa inainte de form.load. Ca urmare, va incarca intotdeauna tabelele din calea cu care a fost creat dataenvironment, apoi le inchizi, ceea ce consuma tiimp inutil.
Daca lucrezi cu VFP9, poti crea o clasa Dataenvironment, iar codul din form.load il pui in clasa ta dataenvironment.beforeopentables. 
In clasa formului, la memberclass, pui aceasta clasa dataenvironment.
Procedura de selectare a bazei de date ramane aceeasi, doar locul in care este apelata se schimba.

 


Daniel Buduru
 3/14/2006 11:45:29 AM
User is offlineAlin Berce
371 posts
3rd




Re: Crearea unei clase si 'exploatarea' ei.
 (Romania)
Da, foarte buna observatia dan. Nu m-am gandit. Deoarece folosesc vfp 9 o sa incerc sa fac cum ai zis. Referitor insa la prima intrebare, de ce nu imi mai executa formul creat ce e scris in load-ul clasei myform?
VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 3/14/2006 11:57:21 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: Crearea unei clase si 'exploatarea' ei.
 (N/A)

Nu m-am lamurit in ce consta problema. Inteleg ca ai creat un formset? Daca da, atunci probabil ca se executa metodele din formset, nu din form. Spun probabil, pentru ca nu am lucrat cu un formset decat la modificarea builderelor VFP. Formsetul este o reminiscenta a trecerii de la FPD/FPW la VFP, acum nu se mai justifica utilizarea lui. Dar VFP a ramas compatibil in urma pana la foxbase ...
Intra in modificare pe formul care nu executa metoda din load, mergi in load si vezi daca butonul "View Parent code" e activ. Daca nu e, inseamna ca metoda sa- pierdut in formset. Daca e activ, si ai acolo codul tau, pui in form.load :

SET STEP ON
RETURBN DODEFAULT()

Activezi debugger-ul, rulezi formul, si vezi ce se intampla acolo.


Daniel Buduru
 3/14/2006 1:03:51 PM
User is offlineAlin Berce
371 posts
3rd




Re: Crearea unei clase si 'exploatarea' ei.
 (Romania)
Uite ce am incercat eu acum. Cred ca e ceva ce eu nu inteleg:

Am facut o clasa bazata pe Form, la care in load am scris:
Messagebox('Eu sunt load de la clasa'), clasa care se numeste myform

Am mers la tools->options->Forms->Template classes si la form am pus calea catre clasa mea: myform

Buuun, acum i-am dat new form, si la properties imi arata la Class Myform. In load la form am scris
Messagebox('Eu sunt load de la form').

Acum, cand pornesc formul. n-ar trebui sa imi afiseze si
Eu sunt load de la clasa
si
Eu sunt load de la form ?

NU asta inseamna ca s-ar executa load-ul de la clasa?

Mie imi afiseaza doar:Eu sunt load de la form.

Va multumesc tuturor celor care depuneti eforturi sa ma invatati ! Multumirile mele.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 3/14/2006 1:10:16 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Crearea unei clase si 'exploatarea' ei.
 (Romania)
Daca scrii cod in subclasa, codul metodei din clasa parinte NU se executa DECAT daca dai si un DODEFAULT().
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 3/14/2006 1:12:58 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Crearea unei clase si 'exploatarea' ei.
 (N/A)

Cand ai pus cod in metoda load a formului derivata din clasa, ai oprit executarea codului clasei .

Pune asa:

form.load
DODEFAULT()
Messagebox('Eu sunt load de la form')

Functia DODEFAULT() executa metoda clasei parinte, in locul in care sete pusa.Poate fi pusa la inceputl, in interiorul codului, sau la sfarsit, dupa cum ai nevoie. Incearca, si ai sa intelegi imediat cum functioneaza.


Daniel Buduru
 3/14/2006 1:27:55 PM
User is offlineAlin Berce
371 posts
3rd




Re: Crearea unei clase si 'exploatarea' ei.
 (Romania)
Bingo! Nici prin cap nu mi-a trecut asa ceva. Am incercat si merge brici.
Inca o zi in care am invatat ceva nou si util de la voi!
Thank You.

VFP, C#, SQL Server 2005/2008
"Proud to be a ProFox member".
 3/14/2006 8:04:00 PM
User is offlineanonymous
0 posts


Re: Crearea unei clase si 'exploatarea' ei.
 (N/A)

Ar trebui cred un Dodefault() la un moment dat.

Horatiu Rotar

 3/14/2006 8:32:21 PM
User is offlineanonymous
0 posts


Re: Crearea unei clase si 'exploatarea' ei.
 (N/A)

Grig raspunsese mai devreme la intrebare, insa eu nu am vazut toate mesajele postate datorita Internet Explorer-ului. Intre timp problema s-a rezolvat.

Horatiu Rotar

  Visual FoxPro  Clase - VCX si PRG  Crearea unei cl...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement