AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Child-Formularbewegungen begrenzen

Ein Thema von Stinger · begonnen am 5. Nov 2003 · letzter Beitrag vom 11. Nov 2003
Antwort Antwort
Stinger

Registriert seit: 5. Nov 2003
45 Beiträge
 
Delphi 6 Professional
 
#1

Child-Formularbewegungen begrenzen

  Alt 5. Nov 2003, 14:53
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
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#2

Re: Child-Formularbewegungen begrenzen

  Alt 6. Nov 2003, 17:22
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;
  Mit Zitat antworten Zitat
Stinger

Registriert seit: 5. Nov 2003
45 Beiträge
 
Delphi 6 Professional
 
#3

Re: Child-Formularbewegungen begrenzen

  Alt 11. Nov 2003, 11:15
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
  Mit Zitat antworten Zitat
scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#4

Re: Child-Formularbewegungen begrenzen

  Alt 11. Nov 2003, 17:15
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:04 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