![]() |
Child-Formularbewegungen begrenzen
Hi,
ich hab folgendes Problem: Ich möchte verhindern das ein MDIChild über den Rand des übergeordneten Formulars hinaus verschoben wird und somit teilweise verschwindet. Ich hab schon versucht das Ganze so zu lösen indem ich bei Mausbewegungen die aktuelle Position des Childs abfrage und dieses dann wieder an den Rand zurück setze, das Problem hierbei ist jedoch dass die Aktualisierung eine Weile dauert (bei meinem System teilweise bis zu 5 Sekunden!). Mich interessiert jetzt ob es eine Möglichkeit gibt die Rahmen des Containerformulars so zu verschließen dass das Child da nicht mehr drüber hinauskommt. Gruß Stinger |
Re: Child-Formularbewegungen begrenzen
Das hier dauert ein paar Milisekunden:
Delphi-Quellcode:
type
TForm1 = class(TForm) private { Private-Deklarationen } procedure WMMove(var Message: TWMMove); message WM_MOVE; public { Public-Deklarationen } end; procedure TForm1.WMMove(var Message: TWMMove); begin If (Message.XPos < 0) then Left := 0; If (Message.YPos < GetSystemMetrics(SM_CYCAPTION)) then Top := 0; If Assigned(Parent) then begin If (Message.XPos > (Parent.Width - Width)) then Left := Parent.Width - Width; If (Message.YPos > (Parent.Height - Height - GetSystemMetrics(SM_CYCAPTION))) then Top := Parent.Height - Height; end else begin If (Message.XPos > (Screen.Width - Width)) then Left := Screen.Width - Width; If (Message.YPos > (Screen.Height - Height - GetSystemMetrics(SM_CYCAPTION))) then Top := Screen.Height - Height - GetSystemMetrics(SM_CYCAPTION); end; Message.result := 0; end; |
Re: Child-Formularbewegungen begrenzen
Danke.
Es funktioniert bei mir leider nur beim linken oder oberen Rand, nach rechts und unten kann ich noch immmer drüber hinaus. Gruß Stinger |
Re: Child-Formularbewegungen begrenzen
So gehts jetzt, habs auch mit MDI getestet:
Delphi-Quellcode:
procedure TForm1.WMMove(var Message: TWMMove);
var ParentWnd : HWND; ParentCRect : TRect; begin ParentWnd := GetParent(Handle); If (Message.XPos < 0) then Left := 0; If (Message.YPos < GetSystemMetrics(SM_CYCAPTION)) then Top := 0; If (ParentWnd <> 0) then begin Windows.GetClientRect(ParentWnd, ParentCRect); If (Message.XPos > (ParentCRect.Right - Width)) then Left := ParentCRect.Right - Width; If (Message.YPos > (ParentCRect.Bottom - Height - GetSystemMetrics(SM_CYCAPTION))) then Top := ParentCRect.Bottom - Height; end else begin If (Message.XPos > (Screen.Width - Width)) then Left := Screen.Width - Width; If (Message.YPos > (Screen.Height - Height - GetSystemMetrics(SM_CYCAPTION))) then Top := Screen.Height - Height - GetSystemMetrics(SM_CYCAPTION); end; Message.result := 0; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz