Mega Code Archive

 
Categories / Delphi / Activex OLE
 

Ocxkullanimi

Programda OCX örnegin THTML kullanildiginda, programi baska bir makinede calistirmak, problem olabilir. Bunun sebebi, OCX'lerin, calisabilmeleri icin Sistem kayitlari veri tabanina kayitli olmalarinin gerekmesidir. Bu islem Regsvr32.exe kullanilarak veya programin kendi icerisinden yapilabilir. Baska bir problem nedeni ise OCX kontrolünün birden fazla dosyadan olusmasi ihtimalidir. Bunlarin tümü diger makineye tasinmalidir. OCX icin hangi dosyalarin gerekli oldugu QuickView programi kullanilarak tespit edilebilir.Asagida, kullanilan OCX'leri diger makineye kaydettiren bir yordam yeralmaktadir. function CheckOCX:Boolean; var Reg:TRegistry; begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_CLASSES_ROOT; // Kontrolün UID bilgisi windows sistem kayitlari veri //tabanindan alinmaktadir. Result:=Reg.OpenKey('CLSID\{B7FC3550-8CE7-11CF-9754-00AA00C00908}',False); if Result then Reg.CloseKey; finally Reg.Free; end; end; procedure RegisterOCX; var Lib:THandle; S:String; P:TProcedure; begin OleInitialize(nil); try S:=ExtractFilePath(Application.ExeName)+'HTML.OCX'; Lib:=LoadLibrary(PChar(S)); if Lib<HINSTANCE_ERROR then raise Exception.CreateFmt('Cannot initialize library %s. Internal Windows error %d',[S,Lib]); try P:=GetProcAddress(Lib,'DllRegisterServer'); if not Assigned(P) then raise Exception.Create('Cannot find procedure DllRegisterServer'); P; finally FreeLibrary(Lib); end; finally OleUninitialize; end; end; procedure Uninstall; var Lib:THandle; S:String; P:TProcedure; begin S:=ExtractFilePath(Application.ExeName)+'HTML.OCX'; Lib:=LoadLibrary(PChar(S)); if Lib<HINSTANCE_ERROR then raise Exception.CreateFmt('Cannot initialize library %s. Internal Windows error %d',[S,Lib]); try P:=GetProcAddress(Lib,'DllUnregisterServer'); if not Assigned(P) then raise Exception.Create('Cannot find procedure DllUnregisterServer'); P; finally FreeLibrary(Lib); end; end; Bazen, bu kayitlar diger makinede oldugu halde dosyalardan biri veya birkaci eksik olabilir.