![]() |
Form darf nicht verschoben werden
Hi,
hätte nicht gedacht, dass ich mal vor so einem Problem stehen würde :wall: Also folgendes: Ein Form darf nicht verschoben werden! Aber wie ist das zu machen? - WindowState = wsMaximized, aber man kann ja ganz leicht das Fenster wieder verkleinern und dann verschieben. - WindowState = wsMaximized und dann biMaximize aus den BorderIcons rausnehmen -> geht auch nicht, weil sich Fester dann doch wieder verschieben lässt - in OnResize WindowState auf wsMaximized zu setzen klappt leider auch nicht - BorderStyle = bsNone, wäre möglich, Fenster soll aber normale Titelleiste haben - leider keine Prozedur wie OnMove gefunden, bei der man Left und Top wieder zurücksetzen könnte Das Form ist generell im maximierten Zustand und soll dies auch bleiben. Dass man die Größe nicht ändern kann, lässt sich ja einfach per Constraints festlegen, aber leider nicht Left und Top. Richtig wäre eigentlich, biMaximize aus den BorderIcons rauszunehmen, aber wie gesagt: dann kann man das Fenster trotzdem verschieben. Wenn jemand eine Idee hat, bitte posten. Danke! |
Re: Form darf nicht verschoben werden
WM_WINDOWPOSCHANGING ist die Antwort.
Delphi-Quellcode:
unit Unit12;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } Procedure WMWindowPosChanging(Var Message: TWMWindowPosChanging); Message WM_WINDOWPOSCHANGING; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} { TForm1 } procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging); begin With Message Do Begin WindowPos.x := 0; // Left WindowPos.y := 0; // Top WindowPos.cx := 1280; // Width WindowPos.cy := 1024; // Height Result := 0; // handled End; end; procedure TForm1.FormCreate(Sender: TObject); begin Left := 0; // nur dazu da, die Form einmalig in den Verschiebungsprozess zu bekommen end; end. |
Re: Form darf nicht verschoben werden
Danke, genau das isses :thumb:
Allerdings ist Left und Top bei wsMaximized -4, weil ja die Ränder des Forms abgeschnitten werden. Reicht aber, das so zu machen:
Delphi-Quellcode:
Denn wenn im OI WindowState auf wsMaximized steht wird das Form beim Programmstart ja automatisch maximiert und Left/Top auf -4 gesetzt, somit muss Left und Top nur noch beibehalten werden.
with Message do
begin WindowPos.X := Left; WindowPos.Y := Top; Result := 0; end; |
Re: Form darf nicht verschoben werden
Zitat:
ich hatte sowas mal auf Basis von WM_MOVE. Der Benutzer kann dann zwar das Window wegschieben, aber auf die Msg WM_MOVE werden die alten Werte wieder gesetzt und das Window schnappt wie von einem Gummi gezogen zurück an die gewünschte Position. Da der Computer viel sturer ist, gibt der Benutzer bald auf. Gruss Reinhard |
Re: Form darf nicht verschoben werden
Moin Martin,
Zitat:
![]() |
Re: Form darf nicht verschoben werden
@Reinhard Kern:
Danke, aber habe es schon mit WM_WINDOWPOSCHANGING gelöst. @Christian Seehase: Das ist schon klar, dass sich so absolute Werte wie -4 ändern können, je nach Theme oder was auch immer. Deswegen verwende ich ja auch einfach den unrsprünglichen Wert von Left und Top, der ist nicht absult sondern eben der Wert, den Left und Top bei wsMaximized haben und den man wahrscheinlich auch über GetSystemMetrics erhalten würde. |
Re: Form darf nicht verschoben werden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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