Delphi-PRAXiS
Seite 2 von 3     12 3      

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 Form soll nicht verschiebbar sein! (https://www.delphipraxis.net/120965-form-soll-nicht-verschiebbar-sein.html)

omata 19. Sep 2008 17:52

Re: Form soll nicht verschiebbar sein!
 
Delphi-Quellcode:
Form.BorderStyle := bsNone;

richard_boderich 19. Sep 2008 18:01

Re: Form soll nicht verschiebbar sein!
 
@omata

Stimmt das wäre eine Möglichkeit, sieht aber auch nicht so toll aus.Kann man die SC Message nicht direkt abfangen?

omata 19. Sep 2008 18:10

Re: Form soll nicht verschiebbar sein!
 
Delphi-Quellcode:
  private
    { Private-Deklarationen }
    procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
:
:
procedure TForm.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  DefaultHandler(Msg);
  if Msg.Result = HTCAPTION then
    Msg.Result:=0;
end;

procedure TForm.FormCreate(Sender: TObject);
const
  MnuCommand = SC_MOVE;
var
  SysMenu : HMenu;
begin
  SysMenu := GetSystemMenu(Handle, FALSE) ;
  DeleteMenu(SysMenu, MnuCommand, MF_BYCOMMAND);
end;
und Form.BorderStyle := bsSingle;

richard_boderich 19. Sep 2008 20:29

Re: Form soll nicht verschiebbar sein!
 
@omata

Funktioniert perfekt! :)
Was ich nur nicht ganz verstehe ist, was das Menü damit zu tun hat. Konkret geht es mir um diese beiden Codezeilen. Wäre nett wenn du das noch etwas näher erläutern könntest.

Delphi-Quellcode:
const
  MnuCommand = SC_MOVE;
var
  SysMenu : HMenu;
begin
  SysMenu := GetSystemMenu(Handle, FALSE) ;       <--Holt den Handle auf das Systemmenü? Meine Anwendung hat jedoch kein menü?!
  DeleteMenu(SysMenu, MnuCommand, MF_BYCOMMAND);  <--Verhindert das ein nichtexistentes Menü verschoben werden kann?
end;
Vielen Dank schonmal an dich und an alle anderen für ihre Antworten.

rollstuhlfahrer 19. Sep 2008 20:50

Re: Form soll nicht verschiebbar sein!
 
HI,

mit den beiden Anweisungen wird das System-Menü ausgelesen. Das ist nicht etwa dein Menü wenn du es auf die Form ziehst und dann unterhalb der Titelleiste auftaucht, sondern das Menü, dass z.B. auftaucht, wenn du einen Rechtsklick auf das AnwendungsIcon in der Titelleiste machst. Dort taucht dann allerlei auf, wie auch die Option Verschieben. Da diese Option deaktiviert sein soll (du willst ja die Form nicht verschiebbar machen) wird sie aus dem Menü herausgenommen (DeleteMenu).

Bernhard

richard_boderich 19. Sep 2008 21:10

Re: Form soll nicht verschiebbar sein!
 
THX for the Info :)

Schwedenbitter 2. Nov 2009 13:46

Re: Form soll nicht verschiebbar sein!
 
Hallo,

ich muss das Thema leider wieder aufwärmen:

Ich habe mittels
Delphi-Quellcode:
Procedure TDiktate.WMWindowPosChanging(Var Msg: TWMWindowPosMsg);
   // Message WM_WindowPosChanging;
Begin
   Inherited;
   Msg.WindowPos^.flags:=Msg.WindowPos^.flags Or SWP_NoMove;
End;
die Form unverschiebbar gemacht. Im ObjektInspektor habe ich Position:=poScreenCenter gesetzt. Leider funktioniert das nun nicht mehr. Das Fenster wird ausnahmslos dort angezeigt, wo ich es erstellt habe bzw. bei 0,0 (=links oben). Vermutlich liegt es daran, dass die Position erst später angepasst und dann WMWindowsPosChanging schon ausgeführt wird.

Wie erreiche ich es, dass das Fenster wieder poScreenCenter und unverschiebbar wird?

Es gleich in der Mitte zu positionieren scheidet aus, weil die Benutzer ja unterschiedliche Auflösungen haben könnten.

Gruß, Alex

turboPASCAL 2. Nov 2009 14:12

Re: Form soll nicht verschiebbar sein!
 
Bau dir eine Variable ein die nach dem anzeigen des Fensters
das verschieben deakviert.

Delphi-Quellcode:
Procedure ...WMWindowPosChanging(Var Msg: TWMWindowPosMsg);
   // Message WM_WindowPosChanging;
Begin
   Inherited;
   if not selfmove then Msg.WindowPos^.flags:=Msg.WindowPos^.flags Or SWP_NoMove
    else selfmove := false;
End;

procedure ...FormShow(Sender: TObject);
begin
  selfmove := ture;
end;

Schwedenbitter 2. Nov 2009 15:24

Re: Form soll nicht verschiebbar sein!
 
Zitat:

Zitat von turboPASCAL
Bau dir eine Variable ein die nach dem anzeigen des Fensters
das verschieben deakviert.

Genau das hatte ich auch schon probiert. Ich hatte die Variable aber vom MainForm "gesteuert". Das klappte - warum auch immer - nicht. So wie von Dir vorgeschlagen von OnShow aus geht es jetzt. 1000 Dank!

Gruß, Alex

himitsu 2. Nov 2009 16:42

Re: Form soll nicht verschiebbar sein!
 
Das es so nicht geht, liegt wohl daran, daß die Form mehrfach verschoben wird und dann auch noch X und Y getrennt.

Und der Code hatte so nur eine Verschiebung zugelassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.
Seite 2 von 3     12 3      

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