![]() |
Verhindern das Fenster verschoben wird
Hallo,
ich möchte verhindern das, dass Fenster seine Position verändert. Ein Ereignis wie OnMove gibts nicht und mit einem Timer ist es wohl doch sehr unschön. Das Fenster bekommt als Parent eine Scrollbox und soll da drin (wie in der RAD von Delphi) nicht verschoben werden können. Der Rahmen muss aber sichtbar bleiben, also kann ich nicht einfach Borderstyle auf bsNone stellen. Irgendwelche Ideen? EDIT: Das Form.Enabled auf False bringt zwar den gewünschten Effekt (kein verschieben, keine Funktion von Minimieren,etc) aber ich kann dann logischerweise keine Controls mehr drauf verschieben (ich verwende dazu TControlSizer). |
Re: Verhindern das Fenster verschoben wird
Nach ca. 13,7 Sekunden Suche:
![]() |
Re: Verhindern das Fenster verschoben wird
Ich wollte dasjetzt testen und hab fix eine neue Komponente erzeugt.
Delphi-Quellcode:
Leider bekomme ich zur Laufzeit folgende Fehler:
unit FormEditor;
interface uses SysUtils, Classes, Controls, Forms, Messages, Windows; type TEditableForm = class(TCustomForm) private // public procedure WMNChittest(var msg:TWMNChittest); Message WM_NChittest; end; TFormEditor = class(TScrollBox) private FWindow: TEditableForm; protected { Protected-Deklarationen } public constructor Create(AOwner: TComponent); override; destructor Destroy; override; published { Published-Deklarationen } end; procedure Register; implementation procedure Register; begin RegisterComponents('CapSystems', [TFormEditor]); end; { TEditableForm } procedure TEditableForm.WMNChittest(var msg: TWMNChittest); begin DefaultHandler(Msg); if Msg.result = HTCAPTION then Msg.result := HTCLIENT; end; { TFormEditor } constructor TFormEditor.Create(AOwner: TComponent); begin inherited Create(AOwner); if not (csDesigning in ComponentState) then begin FWindow := TEditableForm.Create(Self); with FWindow do begin Parent := Self; Visible := True; end; end; end; destructor TFormEditor.Destroy; begin if not (csDesigning in ComponentState) then FWindow.Free; inherited Destroy; end; end. Zitat:
|
Re: Verhindern das Fenster verschoben wird
OK, man muss anstatt Create einfach CreateNew verwenden. Warum das so ist verstehe ich aber nicht ganz.
|
Re: Verhindern das Fenster verschoben wird
Hallo,
nein, du musst ganz einfach nur die Message WM_MOVING abfangen. Ist wirklich ein Kinderspiel. Bei Google wirst du sofort fündig. Edit: Ach was solls, hier die Lösung.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TWMMoving = record Msg: Cardinal; fwSide: Cardinal; lpRect: PRect; Result: Integer; end; type TForm1 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } procedure OnMoving(var Msg: TWMMoving); message WM_MOVING; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.OnMoving(var Msg: TWMMoving); begin inherited; Msg.lpRect^ := BoundsRect; // Neue Position ist die aktuelle Position Msg.Result := 1; end; end. |
Re: Verhindern das Fenster verschoben wird
genau das hab ich auhc gebraucht, danke Macci :stupid:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 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 by Thomas Breitkreuz