![]() |
Fenster "unverschiebbar" machen
hiho leute, ich hab ein fenster, das hat ne titelleiste, und ich will verhindern, dass es der user rumschieben kann. geht das irgendwie? die form muss noch auf ereignisse reagieren und geschlossen werden können muss sie auch. und die titelleiste würde ich auch gern behalten ;). hat jemand ne lösung?
|
Re: Fenster "unverschiebbar" machen
du kannst im on (wenn ich jetzt wüsste welches...) dnigsbums ereignis die position des fensters zurücksetzten. aber mir will nicht einfallen wie das eriegnis heist das ausgelöst wird wenn das fenster verschoben wird :roll:
|
Re: Fenster "unverschiebbar" machen
Zitat:
aber wenns wirklich nich anders geht, werd ichs wohl so machen... |
Re: Fenster "unverschiebbar" machen
hab ne lösung gefunden. align auf alCustom stellen ;).. das funktioniert, is aber irgendwie auch keine gescheite lösung.. jemand ne idee, wie mans "richtiger" macht? :mrgreen:
|
Re: Fenster "unverschiebbar" machen
a jetzt hab ichs. ich habs mal mit nem timer gelöst, der einfach alle 10 millisecs die position zurücksetzt. ist halt auch net grad die feine art...
|
Re: Fenster "unverschiebbar" machen
Zitat:
wie wärs wenn du nur nach einem WM_MOVE die position zurücksetzt? |
Re: Fenster "unverschiebbar" machen
Nimm WM_MOVING und gib via Message.Result := 0 zurück.
|
Re: Fenster "unverschiebbar" machen
Zitat:
Zitat:
|
Re: Fenster "unverschiebbar" machen
ich denke mal das wäre das beste. was hast du dagegen?
|
Re: Fenster "unverschiebbar" machen
ich möchte nix nach dem moven zurücksetzen, da sträubt sich mein unterbewusstsein, ich möchte, dass sich die form erst gar nich rührt ;)
|
Re: Fenster "unverschiebbar" machen
Zitat:
|
Re: Fenster "unverschiebbar" machen
Zitat:
|
Re: Fenster "unverschiebbar" machen
Zitat:
2tens): bei mir will die funktion nich ;)
Delphi-Quellcode:
geht leider nich. form kann man trotzdem noch verschieben. :/
procedure WMMoving(var msg : TMessage); message WM_MOVING;
procedure TFormMain.WMMoving(var msg : TMessage); begin msg.Result := 0; end; |
Re: Fenster "unverschiebbar" machen
Moin phXql,
fang doch WM_NCHITTEST ab, und für den Fall, das jemand in die Titelleiste klickt wird zurückgegeben, dass es im Clientbereich war ;-)
Delphi-Quellcode:
PS:
type
TForm1 = class(TForm) private public procedure WMNCHITTEST(var msg : TMessage); message WM_NCHITTEST; end; implementation procedure TForm1.WMNCHITTEST(var msg: TMessage); begin inherited; if msg.Result = HTCAPTION then msg.Result := HTCLIENT; end; Über das Systemmenü des Formulares geht es dann allerdings immer noch :? Seltsamer Weise funktioniert
Delphi-Quellcode:
nämlich nicht. Mit SC_CLOSE ginge es :gruebel:
EnableMenuItem(GetSystemMenu(self.Handle,false),SC_MOVE,MF_BYCOMMAND or MF_GRAYED);
|
Re: Fenster "unverschiebbar" machen
wenn es über das systemmenü noch geht, isses nich so schön. aber trotzdem danke :) ich hab jetzt vorrübergehend mal das align auf alCustom gestellt, bis mir entweder einfällt, wie mans lösen könnte, oder mir einfällt, wieso das WM_MOVING-dings nich will... :)
|
Re: Fenster "unverschiebbar" machen
Erstmal muss ich mich Entschuldigen:
Weise bitte Result bei WM_MOVING eine 1 zu. Zu der WM_NCHITTEST Variante: Die gefällt mir nicht. Da dadurch auch der Rechtsklick nicht mehr das Popup-Fenster anzeigt. |
Re: Fenster "unverschiebbar" machen
Moin Neolithos,
Zitat:
Das funktioniert dann noch. |
Re: Fenster "unverschiebbar" machen
Zitat:
Du sagst doch, wenn die Titelleiste angeklickt wird, dass die Titelleiste Client-Area ist. Dadurch sollte doch das Systemmenu nicht mehr durch Rechtsklick auf die Titelleiste angezeigt werden. Ein weiterer Nachteil ist, dass du nicht auf die Verschiebungen mittels Tastatur reagierst. Ein Nachteil meiner Variante ist, dass dieses graue Rechteck, eventuell angezeigt werden könnte. |
Re: Fenster "unverschiebbar" machen
Moin Neolithos,
Zitat:
Wenn mir mal jemand verraten könnte, wo ich beim EnableMenuItem mit SC_MOVE den Denkfehler mache (zumal es mit SC_CLOSE einwandfrei funktioniert). :gruebel: |
Re: Fenster "unverschiebbar" machen
Zitat:
OT: wie kann man denn nun ein fenster mit der tastatur verschieben? :mrgreen: |
Re: Fenster "unverschiebbar" machen
Moin phXql,
Zitat:
Jetzt ist der Cursor ein Kreuz mit Pfeilspitzen, und das Fenster lässt sich mit den Cursortasten bewegen. Analog funktionier das auch mit dem Ändern der Grösse. BTW: Das EnableMenuItem funktioniert nur mit SC_CLOSE :? |
Re: Fenster "unverschiebbar" machen
Zitat:
Delphi-Quellcode:
procedure TForm1.WMInitMenu(var Message: TWMInitMenu);
begin EnableMenuItem(Message.Menu, SC_MOVE, MF_BYCOMMAND or MF_GRAYED); DrawMenuBar(Handle); end; |
Re: Fenster "unverschiebbar" machen
Moin Nico,
danke, man muss es natürlich auch an der richtigen Stelle machen :wall: :wall: :wall: Stellt sich mir nur noch die Frage, warum es mit dem SC_CLOSE auch an anderer Stelle funktioniert. |
Re: Fenster "unverschiebbar" machen
Also ich würd bei WM_WINDOWPOSCHANGING ansetzen und dort die aktuelle Fensterposition als neue Fensterposition festlegen...
|
Re: Fenster "unverschiebbar" machen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:16 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