Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Child-Formularbewegungen begrenzen (https://www.delphipraxis.net/11381-child-formularbewegungen-begrenzen.html)

Stinger 5. Nov 2003 13:53


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

scp 6. Nov 2003 16:22

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;

Stinger 11. Nov 2003 10:15

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

scp 11. Nov 2003 16:15

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 00:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz