Hab' die Idee gerade getestet. Leider bringt das nicht das gewünschte Ergebnis. Zum einen bekomme ich einen Stack-Overflow nach kurzer Zeit und da das zweite Fenster mit 'Show' aufgerufen wird, rennt die aufrufende Routine munter weiter und wartet nicht, bis ein Rückgabewert kommt.
Zitat von
Joe24:
Wenn du die Methode
MouseMove des "PopupForm" der folgenden
überschreibst, schließt das "PopupForm" beim Klicken außerhalb
dessen Clientrect.
Das "PopupForm"(Form2) mit
Form2.Show aufrufen.
Delphi-Quellcode:
procedure TForm2.MouseMove( Shift : TShiftState; X, Y : Integer);
begin
if ( ( ssLeft in Shift) or
( ssRight in Shift) or
( ssMiddle in Shift) or
( ssDouble in Shift)) and
not PtInRect( ClientRect, Point( X, Y)) then
begin
SetCaptureControl( nil);
Close;
end;
inherited MouseMove( Shift, X, Y);
end;
procedure TForm2.MouseUp( Button : TMouseButton; Shift : TShiftState; X, Y : Integer);
begin
if GetCaptureControl = nil then
SetCaptureControl( self);
inherited MouseUp( Button, Shift, X, Y);
end;
procedure TForm2.FormShow(Sender: TObject);
begin
SetCaptureControl( self);
end;