Solch eine
Exception tritt auch auf, wenn du versuchst aus einem anderen Thread heraus zu zeichnen. Bzw wenn 2 verschiedene Threads versuchen auf den gleichen Canvas zuzugreifen. Benutzt du möglicherweise Threads?
Untersuche zb mal mit dem Process Explorer von SysInternals, ob es wirklich ein Leck der
GDI-Handles ist.
Oder prüfe kontinuierlich mit folgendem Code:
Delphi-Quellcode:
var CurrentHandles: Cardinal;
CurrentHandles := GetGuiResources(GetCurrentProcess, GR_GDIOBJECTS);
Bei 10.000 Handles ist Ende-Gelände.
Deine Zeichenroutinen kannst du auch in folgenden Code wrappen, um das Thread-Problem zu vermeiden:
Delphi-Quellcode:
if TargetCanvas.TryLock then begin
try
....
finally
TargetCanvas.Unlock;
end;
end;
Hiermit kannst du prüfen, ob aus einem anderen Thread heraus gezeichnet wird:
Assert(GetCurrentThreadId = MainThreadId, 'Falscher Thread zum zeichnen!');
Ich nutze das VST für intensives Zeichnen (massenhaft GIF-Animationen), was wunderbar funktioniert. Ich glaube kaum, dass der Fehler im VST selbst zu suchen ist.