Mega Code Archive

 
Categories / Delphi / Activex OLE
 

Ocx proplemleri

OCX'kullanımı Programda OCX örneğin THTML kullanıldığında, programı başka bir makinede çalıştırmak, problem olabilir. Bunun sebebi, OCX'lerin, çalışabilmeleri için Sistem kayıtları veri tabanına kayıtlı olmalarının gerekmesidir. Bu işlem Regsvr32.exe kullanılarak veya programın kendi içerisinden yapılabilir. Başka bir problem nedeni ise OCX kontrolünün birden fazla dosyadan oluşması ihtimalidir. Bunların tümü diğer makineye taşınmalıdır. OCX için hangi dosyaların gerekli olduğu QuickView programı kullanılarak tespit edilebilir.Aşağıda, kullanılan OCX'leri diğer makineye kaydettiren bir yordam yeralmaktadır. function CheckOCX:Boolean; var Reg:TRegistry; begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_CLASSES_ROOT; // Kontrolün UID bilgisi windows sistem kayıtları veri //tabanından alınmaktadır. 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 kayıtlar diğer makinede olduğu halde dosyalardan biri veya birkaçı eksik olabilir.