Der SetRect macht immer noch Probleme.
Deine Bereinigung hat leider nicht funktioniert.
Trotzdem Danke für deine Hilfe einiges habe ich nun beheben können.
Demnächst lass ich die Bereichsprüfung immer an nachträglich beheben ist schlecht.
Delphi-Quellcode:
var
KlugbenanntesRect: TRect;
RectCount: DWORD;
...
begin
SetRect(KlugbenanntesRect, M, J, I, J + 1);
RectCount := pData^.rdh.nCount;
if (RectCount > 0) and (RectCount < Length(pr^)) then
begin
pr^[RectCount] := KlugbenanntesRect;
end;
end;
Delphi-Quellcode:
type
TRectArray = array[0..0] of TRect;
var
pr: ^TRectArray;
//---------
if I > M then
begin
if integer(pData^.rdh.nCount) >= MaxRegions then
begin
hRgn2 := ExtCreateRegion(nil, sizeof(RGNDATAHEADER) +
(sizeof(TRECT) * pData^.rdh.nCount), PRGNDATA(pData)^);
if hRgn1 = 0 then
begin
hRgn1 := hRgn2;
end
else
begin
CombineRgn(hRgn1, hRgn1, hRgn2, RGN_OR);
skDeleteObject(hRgn2);
end;
pData^.rdh.nCount := 0;
end;
pr := @pData^.Buffer;
SetRect(pr^[pData^.rdh.nCount], M, J, I, J + 1); //<< macht ärger
if M < lpRect.Left then
lpRect.Left := M;
if I > lpRect.Right then
lpRect.Right := I;
if J < lpRect.Top then
lpRect.Top := J;
if J > lpRect.Bottom then
lpRect.Bottom := J + 1;
Inc(pData^.rdh.nCount);
Inc(lpRect);
end;
gruss