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  Controale ActiveX  Verificare exis...
 Verificare existenta/inregistrare OCX
 
 9/19/2007 11:27:04 AM
User is offlineLucian Ilea
110 posts
5th


Verificare existenta/inregistrare OCX
 (Germany)
Buna ziua,

Am un program in care folosesc un OCX (cel richtx32.ocx). As dori sa verific (prin program) daca acest OCX este inregistrat in Windows, iar daca nu sa il inregistrez. Cum pot face asta? O alta intrebare ar fi daca pot face inregistrarea si daca nu am drepturi de administrator pe calculator.

Multumesc mult.

Cu stima,
Lucian Ilea
 9/19/2007 2:47:51 PM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Sau macar cum pot intercepta eroarea pe care mi-o da (Class not registered) si sa pot face modificarile necesare pe form...

Multumesc mult
 9/19/2007 2:58:23 PM
User is offlineCostel
227 posts
www.adrisoft.ro
4th




Re: Verificare existenta/inregistrare OCX
 (Romania)
Incearca  aici :

http://www.tek-tips.com/viewthread.cfm?qid=1391594

Nu munci atit de mult incit sa nu-ti mai ramina timp ca sa cistigi bani. (proverb evreiesc)
 10/9/2007 12:19:09 PM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Am incercat sa instantiez obiectul la pornirea aplicatiei si sa vad daca apare vreo eroare sau ceva de genul acesta.

Am pus urmatoarele 3 linii. Inainte de a crea obiectul vartype returneaza U, iar dupa aceea O. De aici am dedus ca creaza obiectul fara probleme.

MESSAGEBOX(VARTYPE(xxx),0+64+0,'Info')
xxx=CREATEOBJECT('richtext.richtextctrl.1')
MESSAGEBOX(VARTYPE(xxx),0+64+0,'Info')

Face treaba asta si pe un sistem pe care am inregistrat richtx32.ocx si pe unul pe care nu am facut-o. Pe cel din urma, in momentul in care deschid form-ul pe care folosesc acel control, imi da eroarea:

OLE error code 0x80040154: Class not registered. OLD Object is being ignored. Record number 44.

Apare eroarea pentru toate controalele de tipul respectiv de pe form, dupa care se deschide form-ul, fara controlalele RTF.

Cum pot face sa anticipez eroarea asta si sa dau un mesaj utilizatorului? In cazul in care nu are clasa instalata, voi inlocui controlul RTF cu un EditBox.

Multumesc anticipat.
 10/9/2007 12:49:46 PM
User is offlineanonymous
0 posts


Re: Verificare existenta/inregistrare OCX
 (N/A)
    Nu poti sa scapi de eroarea aia daca ai controalele adaugate pe forma.
Va trebui sa le scoti de pe forma din design si sa le adaugi dinamic la init-ul formului de exemplu. Incerci sa creezi un obiect de acel tip si daca reusesti atunci le creezi pe toate pe forma, altfel adaugi editbox-urile.
 10/9/2007 3:14:17 PM
User is offlineneagu_laurentiu
101 posts
5th


Re: Verificare existenta/inregistrare OCX
 (N/A)

  As dori sa verific (prin program) daca acest OCX este inregistrat in Windows, iar daca nu sa il inregistrez

Verifici daca ai in registri acele inregistrari specifice controlului...

  daca pot face inregistrarea si daca nu am drepturi de administrator pe calculator.

Rulezi aplicatia de inregistrare ca si "Administrator" cu o functie WinAPI... dar trebuie sa stii parola !

 10/15/2007 10:32:29 AM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Am incercat sa fac urmatorul lucru: in metoda Load de pe form-ul pe care pun controlul din richtx32.ocx am incercat sa creez un obiect din acel OCX. Daca TYPE de acel obiect ar fi fost "O" atunci totul ar fi ok. Daca nu, atunci as fi inlocuit controlul RichText cu un EditBox obisnuit. Din pacate, type returneaza "O" indiferent daca OCX-ul este inregistrat in Windows sau nu. Mai jos e codul pe care l-am pus in Load. Am atasat si un mic proiect care sa arate ce am facut...

oTest=EVALUATE("createobject('richtext.richtextctrl.1')")
MESSAGEBOX(TYPE("otest"),0+64+0,'Info')

Multumesc.
Test_OCX.zip 
 10/15/2007 11:12:51 AM
User is offlineanonymous
0 posts


Re: Verificare existenta/inregistrare OCX
 (N/A)
    Nu fa asa. Fa asa:
local lEroare
lEroare = .F.
TRY
    oTest = createobject('richtext.richtextctrl.1')
CATCH
    lEroare = .T.
ENDTRY

IF lEroare
*--Nu ai ActiveX-ul inregistrat
ELSE
*--Ai ActiveX-ul inregistrat
ENDIF
 10/15/2007 4:46:44 PM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Nu se schimba nimic. Imi spune ca e inregistrat indiferent de situatie...
 10/15/2007 4:54:07 PM
User is offlineanonymous
0 posts


Re: Verificare existenta/inregistrare OCX
 (N/A)
    Cum adica? Pai daca a reusit sa creezi obiectul inseamna ca e ok. Nu?
Nu inteleg care e problema.
 10/15/2007 5:15:04 PM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Poate am pus eu problema gresit. Sa o detaliez: pe form vreau sa pun obiectul pe care l-am creat. Daca il pun in Design Mode, la pornirea form-ului (pe un calc. care nu are inregistrat OCX-ul) imi da urmatoarea eroare:

OLE error code 0x80040154: Class not registered. OLE Object is being ignored. Record number 44.

Prin urmare am incercat sa creez obiectul la rulare. Daca il crea insemna ca totul e ok si il puneam pe form. Daca nu, insemna ca OCX-ul nu e inregistrat, deci nu pot folosi controlul, asa ca puneam pe form un EditBox. Din pacate, nici varianta mea nici cea pe care mi-ati dat-o dvs. nu face diferenta intre cele doua situatii (cand e inregistrat si cand nu).

Pe de alta parte, nu stiu cum sa pun acel control pe form in runtime. Dupa ce creez obiectul, cum procedez?

Multumesc...
 10/15/2007 5:28:30 PM
User is offlineanonymous
0 posts


Re: Verificare existenta/inregistrare OCX
 (N/A)
    Pai dece nu zici asa. Ca sa adaugi oebiectul dinamic faci asa:

THISFORM.ADDOBJECT( 'oRTextBox', 'OleControl', 'richtext.richtextctrl.1')

THISFORM.oRTextBox.TOP = 5
THISFORM.oRTextBox.LEFT = 5
THISFORM.oRTextBox.HEIGHT = 50
THISFORM.oRTextBox.WIDTH = 200

THISFORM.oRTextBox.VISIBLE = .T.


Mai poti subclasa din Design Time clasa si adauga clasa Fox pe form tot folosind AddObject.
 10/15/2007 5:37:46 PM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Poti sa imi explici mai detaliat partea cu subclasarea? Cand ai timp...
 10/15/2007 5:47:53 PM
User is offlineanonymous
0 posts


Re: Verificare existenta/inregistrare OCX
 (N/A)
    In proiect te duci la Classes.
Apesi butonul New. Se deschide forma  de adaugare clasa noua.
Completezi numele noii clase. In combo-ul "Based On" selectezi Ole Control. Apesi Ok.
Se deschide o lista cu toate obiectele ActiveX de la tine din sistem. Selectezi Microsoft Rich Textbox si dai Ok.
Salvezi si asta e tot, ai subslasat controlul ActiveX.

Acum, pe forma: testezi in acelasi fel, daca reusesti sa creezi obiectul cu TRY...CATCH, si daca reuseste adaugi obiectul pe forma asa:
THISFORM.AddObject( 'oRTextBox', 'MyRTextBoxClass')
MyRTextBoxClass este clasa care ai creeat-o mai devreme.

Ai grija sa ai SET CLASSLIB TO catre fisier-ul in care ai creeat noua clasa.
 10/17/2007 10:00:45 AM
User is offlineLucian Ilea
110 posts
5th


Re: Verificare existenta/inregistrare OCX
 (Germany)
Ceva tot nu imi este clar... Am creat clasa pe care am pus-o in atasament. Numele ei este RTextBox (fisierul este richtx.vcx). In Load pe form am pus urmatorul cod:

local lEroare
lEroare = .F.
TRY
oTest = createobject('RTextBox')
CATCH
lEroare = .T.
ENDTRY

IF lEroare
MESSAGEBOX('Nu e inregistrat',0+64+0,'Info')
ELSE
MESSAGEBOX('E inregistrat!',0+64+0,'Info')
ENDIF

Imi spune ca nu este inregistrat indiferent daca este sau nu adevarat. Merg mai departe si, pe langa codul de mai sus, pun urmatoarele linii, asa cum mi-ai explicat:

THISFORM.ADDOBJECT( 'oRTextBox', 'RTextBox')
THISFORM.oRTextBox.TOP = 5
THISFORM.oRTextBox.LEFT = 5
THISFORM.oRTextBox.HEIGHT = 50
THISFORM.oRTextBox.WIDTH = 200
THISFORM.oRTextBox.VISIBLE = .T.

Le-am pus din curiozitate fara sa aiba legatura cu conditia de mai sus. Ei bine, la rularea aplicatiei, cand deschid form-ul, imi spune ca obiectul nu este inregistrat, dar apoi, cand ajunge la partea de cod de mai sus, il pune totusi pe form (daca in realitate este inregistrat, daca nu, nu il pune si da eroare la AddObject). Care este explicatia? Ce gresesc?

O solutie ar fi sa pun ThisForm.AddObject intr-un TRY....ENDTRY. Am incercat asa si merge. Dar vreau sa inteleg... de ce CreateObject nu merge corect si cu AddObject e ok? Codul este asa:

local lEroare
lEroare = .F.
TRY
THISFORM.ADDOBJECT( 'oRTextBox', 'RTextBox')
CATCH
lEroare = .T.
ENDTRY

IF lEroare
MESSAGEBOX('Nu e inregistrat',0+64+0,'Info')
ELSE
MESSAGEBOX('E inregistrat!',0+64+0,'Info')
THISFORM.oRTextBox.TOP = 5
THISFORM.oRTextBox.LEFT = 5
THISFORM.oRTextBox.HEIGHT = 50
THISFORM.oRTextBox.WIDTH = 200
THISFORM.oRTextBox.VISIBLE = .T.
ENDIF

Am pus SET CLASSLIB TO richtx.vcx ADDITIVE.


Multumesc si scuze pentru insistenta... Dar as vrea sa inteleg...
richtx.zip 
  Visual FoxPro  Controale ActiveX  Verificare exis...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement