Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
Delphi 5 Standard
|
Re: Benötige Hilfe beim Entwickeln einer Komponente
8. Sep 2007, 14:22
Zitat von oki:
Delphi-Quellcode:
procedure TMyControl.DoInvisible;
begin
//gesamten Clientbereich erfassen
if FullRgn <> 0 then
DeleteObject(FullRgn);
FullRgn := CreateRectRgn(0, 0, Width, Height);
//'Mask' alles unsichtbar
CombineRgn( FullRgn, FullRgn, FullRgn, RGN_DIFF );
// alle sichtbaren Bereiche einblenden
PointRgn := CreateRectRgn( X, Y, Width, Hight); // das ist ein Bereich im Rect der eingeblendet wird
CombineRgn( FullRgn, FullRgn, PointRgn, RGN_OR );
DeleteObject(Pointrgn);
// alles Kombiniert und fertig
SetWindowRgn( Handle, FullRgn, TRUE);
end;
Ich weiß jetzt nicht, wo Du FullRgn deklariert hast, ich nehme mal an als Private, aber wenn Du DoInvisible mehr als 1 x aufrufst löscht Du das Region Handle nach SetWindowRgn...
Delphi-Quellcode:
// 1. Aufruf, FullRgn = 0 (vermutlich)
procedure TMyControl.DoInvisible;
begin
//gesamten Clientbereich erfassen
if FullRgn <> 0 then
DeleteObject(FullRgn);
...
// alles Kombiniert und fertig
SetWindowRgn( Handle, FullRgn, TRUE);
end;
Delphi-Quellcode:
// 2. Aufruf, FullRgn <> 0, wurde mit SetWindowRgn gesetzt, wird aber gelöscht
procedure TMyControl.DoInvisible;
begin
//gesamten Clientbereich erfassen
if FullRgn <> 0 then
DeleteObject(FullRgn);
...
// alles Kombiniert und fertig
SetWindowRgn( Handle, FullRgn, TRUE);
end;
Richtig wäre:
Delphi-Quellcode:
procedure TMyControl.DoInvisible;
var FullRgn:HRgn;
begin
FullRgn := CreateRectRgn(0, 0, Width, Height);
//'Mask' alles unsichtbar
CombineRgn( FullRgn, FullRgn, FullRgn, RGN_DIFF );
// alle sichtbaren Bereiche einblenden
PointRgn := CreateRectRgn( X, Y, Width, Hight); // das ist ein Bereich im Rect der eingeblendet wird
CombineRgn( FullRgn, FullRgn, PointRgn, RGN_OR );
DeleteObject(Pointrgn);
// alles Kombiniert und fertig
SetWindowRgn( Handle, FullRgn, TRUE);
// FullRgn nicht mehr antasten
end;
|