Activex OLE Delphi

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 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 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.