Search  
Thursday, September 21, 2017 ..:: Articole » Facilitarea proiectării formularelor cu SUPERCLASS ::.. Register  Login
 Articole Minimize

Facilitarea proiectării formularelor cu SUPERCLASS

Autor: Whil Hentzen
Notă: Expunerea care urmează şi fişierul ataşat ar trebui să facă parte din "geanta de scule" a fiecărui programator de Visual FoxPro.

Aţi avut vreodată o zi mizerabilă? Genul de zi în care orice ai face, iese rău? Lucraţi în Visual FoxPro şi trebuie să vă uitaţi în Help pentru orice comandă aţi scrie. Dintr-o cauză imposibil de determinat, nu vă puteţi aminti sintaxa corectă nici pentru cele mai simple comenzi, cum ar fi WAIT WINDOW sau SKIP. Aţi încercat chiar să adăugaţi date într-o fereastră BROWSE, dar nu reuşiţi să înţelegeţi de ce combinaţia Ctrl+Y nu adaugă înregistrări noi...

Şi bineînţeles, conform Legilor lui Murphy, aveţi o grămadă de treabă de făcut exact într-o zi din asta. Ca atare, continuaţi să lucraţi în stres şi se mai întâmplă să vă loviţi de problema aia enervantă care se manifestă prin a nu putea să lucraţi simultan cu un formular şi cu clasa din care este instanţiat unul din obiectele din formular. De obicei, se întâmplă următorul lucru:

  1. Alegeţi o bibliotecă de clase şi o plasaţi în bara de instrumente.
  2. Creaţi un formular şi plasaţi câteva controale din clasa respectivă în formular.
  3. Vă daţi seama că trebuie să faceţi modificări în clasă - o proprietate sau, poate, trebuie să adăugaţi o nouă metodă.
  4. Încercaţi să modificaţi clasa, şi vă pocneşte peste ochi mesajul: "Cannot modify a class that is in use".
  5. Închideţi formularul.
  6. Modificaţi şi salvaţi clasa.
  7. Deschideţi formularul din nou.
  8. Încercaţi să vă aduceţi aminte ce făceaţi când aţi simţit nevoia să faceţi modificări în clasă.

Mesajul apare datorită faptului că înregistrarea corespunzătoare din biblioteca de clase (fişierul .VCX) este blocată când în Form Designer este deschisă o instanţiere a ei.

SUPERCLASS este salvarea!

SUPERCLASS este un utilitar care permite vizualizarea şi/sau modificarea metodelor şi a proprietăţilor superclasei unui obiect. Veţi fi nevoit în continuare să închideţi formularul sau clasa în cazul în care doriţi să vizualizaţi şi/sau modificaţi proprietăţile şi metodele superclasei, dar SUPERCLASS vă va scuti ore de muncă petrecute închizând şi deschizând designerii.

Folosirea lui SUPERCLASS este una din acele operaţiuni care durează mai mult să o descrii decât să o execuţi. Mai întâi, trebuie să rulaţi SUPERCLS.PRG. Personal, recomand plasarea acestui program în directorul dvs. de proceduri, sau într-un loc unde poate fi găsit de Visual FoxPro, şi să-l rulaţi automat la lansarea lui Visual FoxPro. SUPERCLASS va sta ascuns până când deschideţi o fereastră de editare a codului unei metode. În acest punct va fi afişată bara de instrumente SUPERCLASS.

superclass.gif

Funcţionalitatea lui SUPERCLASS

Butonul din stânga permite vizualizarea şi/sau editarea metodei superclasei obiectului la care lucraţi (lucru pe care nu puteaţi să-l faceţi înainte). Mai mult, este doar la un click distanţă; nu mai este nevoie să închideţi Form Designer.

Totodată, trebuie să vă avertizez asupra unui lucru de care trebuie să fiţi conştient când editaţi metodele superclasei. "În spate", SUPERCLASS crează un fişier .VCX temporar, care conţine înregistrarea din câmpul METHODS. Modificările pe care le faceţi se efectuează în acest fişier temporar. Apoi fişierul temporar este închis, recompilat, şi câmpul OBJCODE rezultat este plasat în fişierul .VCX. De remarcat că instanţa obiectului la care lucraţi este încă în memorie, ca atare nu este modificată. Ca rezultat, dacă creaţi noi instanţe ale acelui obiect, ele vor conţine codul original. Pentru a împiedica acest lucru, trebuie să daţi comanda CLEAR CLASS sau CLEAR ALL, urmată de DO SUPERCLS.PRG.

Butonul din mijlocul barei de instrumente SUPERCLASS permite introducerea codului clasei părinte în fereastra de editare, la poziţia cursorului. Dacă nu citiţi documentaţia veţi pierde un truc: click cu butonul stâng al mouse-ului va introduce un apel către metoda superclasei. De exemplu, să presupunem că aveţi o clasă de butoane numită cmdBaza şi în metoda Click() a acelui buton aveţi codul:

WAIT WINDOW "Mă aflu în metoda Click()"

De asemenea, presupunem că aţi plasat o instanţă a acestui buton pe un formular. Deschiderea metodei Click() a instanţei va avea ca rezultat apariţia barei de instrumente SUPERCLASS. Click-ul cu butonul stâng al mouse-ului pe butonul din mijloc al barei de instrumente va avea ca rezultat introducerea următoarei comenzi:

cmdBaza::Click()

Această comandă va executa codul superclasei (linia aia cu WAIT WINDOW) în completarea oricărui cod plasat în metoda Click() a instanţei. Este doar o scurtătură, dar, dacă mi-aduc bine aminte, exact asta v-am promis la începutul expunerii...

Dacă faceţi click cu butonul din dreapta al mouse-ului (în aceleaşi condiţii ca mai sus), veţi introduce următoarea linie de cod:

=EVALUATE(this.ParentClass+"::Click()")

Pe de altă parte, dacă editaţi o metodă a unui obiect membru al unui container (cum ar fi un OptionButton, de exemplu), right-click va introduce următoarea linie de cod:

=EVALUATE(this.Class+"::Click()")

Dacă credeţi că o clasă sau o clasă părinte pot fi modificate, atunci este indicat să folosiţi varianta aceasta, pentru că ea este evaluată corect indiferent de modificările aduse superclasei.

În fine, butonul din dreapta barei de instrumente apelează fişierul de ajutor. Acum nu mai aveţi nici o scuză pentru a nu citi documentaţia <g>! Şi o mişcare isteaţă: Right-click pe acest buton va afişa versiunea lui SUPERCLASS (o chestie pe care sunt sigur că aţi vrea s-o aveţi şi voi în aplicaţie...)

Concluzie

SUPERCLASS este in instrument util, mai ales în perioada de început a dezvoltării unei aplicaţii, când sunt necesare modificări dese asupra claselor părinte. Pe mine m-a scutit de ore de muncă, şi sunt sigur că şi pe voi...

Descărcaţi SUPERCLASS.ZIP.


    

 Google Ads Minimize

    

Copyright 2002-2013 Profox   Terms Of Use  Privacy Statement