Explorar o código

* Patch from Martok to allow unregistering image handlers (Bug ID 32973)

git-svn-id: trunk@37953 -
michael %!s(int64=7) %!d(string=hai) anos
pai
achega
29badfe5af
Modificáronse 2 ficheiros con 25 adicións e 0 borrados
  1. 24 0
      packages/fcl-image/src/fphandler.inc
  2. 1 0
      packages/fcl-image/src/fpimage.pp

+ 24 - 0
packages/fcl-image/src/fphandler.inc

@@ -112,6 +112,30 @@ begin
     end;
 end;
 
+procedure TImageHandlersManager.UnregisterImageHandlers(const ATypeName: string; ARemoveReader: boolean = True;
+  ARemoveWriter: boolean = True);
+var r : integer;
+    ih: TIHData;
+begin
+  if not ARemoveReader and not ARemoveWriter then
+    exit;
+  r := FData.count;
+  repeat
+    dec (r);
+  until (r < 0) or (compareText (TIHData(FData[r]).FTypeName, ATypeName) = 0);
+  if r >= 0 then begin
+    ih:= TIHData(FData[r]);
+    if ARemoveReader then
+      ih.FReader:= nil;
+    if ARemoveWriter then
+      ih.FWriter:= nil;
+    if not Assigned(ih.FReader) and not Assigned(ih.FWriter) then begin
+      FData.Delete(r);
+      ih.Free;
+    end;
+  end;
+end;
+
 function TImageHandlersManager.GetCount : integer;
 begin
   result := FData.Count;

+ 1 - 0
packages/fcl-image/src/fpimage.pp

@@ -262,6 +262,7 @@ type
                    AReader:TFPCustomImageReaderClass);
       procedure RegisterImageWriter (const ATypeName,TheExtensions:string;
                    AWriter:TFPCustomImageWriterClass);
+      procedure UnregisterImageHandlers(const ATypeName: string; ARemoveReader: boolean = True; ARemoveWriter: boolean = True);
       property Count : integer read GetCount;
       property ImageReader [const TypeName:string] : TFPCustomImageReaderClass read GetReader;
       property ImageWriter [const TypeName:string] : TFPCustomImageWriterClass read GetWriter;