![]() |
Re: Form soll nicht verschiebbar sein!
Delphi-Quellcode:
Form.BorderStyle := bsNone;
|
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? |
Re: Form soll nicht verschiebbar sein!
Delphi-Quellcode:
und Form.BorderStyle := bsSingle;
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; |
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:
Vielen Dank schonmal an dich und an alle anderen für ihre Antworten.
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; |
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 |
Re: Form soll nicht verschiebbar sein!
THX for the Info :)
|
Re: Form soll nicht verschiebbar sein!
Hallo,
ich muss das Thema leider wieder aufwärmen: Ich habe mittels
Delphi-Quellcode:
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.
Procedure TDiktate.WMWindowPosChanging(Var Msg: TWMWindowPosMsg);
// Message WM_WindowPosChanging; Begin Inherited; Msg.WindowPos^.flags:=Msg.WindowPos^.flags Or SWP_NoMove; End; 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 |
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; |
Re: Form soll nicht verschiebbar sein!
Zitat:
Gruß, Alex |
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. |
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