procedure ReplaceParentClass(DelphiClass, OldParent, NewParent: TClass); var aClassPointer: ^Byte; pVCL, pNew: ^Pointer; dwProtect: DWORD; begin if Assigned(NewParent) then if Assigned(DelphiClass) then begin // ClassParent-Zeiger suchen //Search ClassParent Pointer while (DelphiClass.ClassParent <> OldParent) do begin with DelphiClass do begin if (ClassParent = nil) or (ClassParent = NewParent) then Exit; // DelphiClass.ClassParent zuweisen // Set DelphiClass.ClassParent DelphiClass := ClassParent; end end; // Parent-Zeiger der originalen VCL-Klasse suchen // Search Parent-Pointer of original VCL-Class aClassPointer := Pointer(DelphiClass); Inc(aClassPointer, vmtParent); pVCL := Pointer(aClassPointer); aClassPointer := Pointer(NewParent); Inc(aClassPointer, vmtSelfPtr); pNew := Pointer(aClassPointer); // Schreibberechtigung holen, Zeigerwerte tauschen // Set write permission, swap pointers VirtualProtect(pVCL, SizeOf(Pointer), PAGE_READWRITE, @dwProtect); pVCL^ := pNEW; // alte Zugriffsrechte aktivieren // avtivate old access right VirtualProtect(pVCL, SizeOf(Pointer), dwProtect, @dwProtect); end end;