Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fenster "unverschiebbar" machen (https://www.delphipraxis.net/25071-fenster-unverschiebbar-machen.html)

Tubos 30. Jun 2004 18:21

Re: Fenster "unverschiebbar" machen
 
Zitat:

Nimm WM_MOVING und gib via Message.Result := 0 zurück.
genau, WM_MOVING ist wahrscheinlich die beste Idee. Es wird VOR dem Verschieben ausgelöst.

StefanDP 30. Jun 2004 18:23

Re: Fenster "unverschiebbar" machen
 
Zitat:

Zitat von Tubos
Zitat:

Nimm WM_MOVING und gib via Message.Result := 0 zurück.
genau, WM_MOVING ist wahrscheinlich die beste Idee. Es wird VOR dem Verschieben ausgelöst.

Und mit der "Antowrt" sagst, du: NICHT verschieben :-)

phXql 30. Jun 2004 18:27

Re: Fenster "unverschiebbar" machen
 
Zitat:

Zitat von StefanDP
Zitat:

Zitat von Tubos
Zitat:

Nimm WM_MOVING und gib via Message.Result := 0 zurück.
genau, WM_MOVING ist wahrscheinlich die beste Idee. Es wird VOR dem Verschieben ausgelöst.

Und mit der "Antowrt" sagst, du: NICHT verschieben :-)

1stens): wie oft durchlaufe ich die funktion, wenn ich das fenster verschiebe? und dann jedes mal schauen, ob die form im Dock-Modus is (manchmal darf man sie verschieben)? das frisst rechenzeit, oder?

2tens): bei mir will die funktion nich ;)

Delphi-Quellcode:
    procedure WMMoving(var msg : TMessage); message WM_MOVING;

procedure TFormMain.WMMoving(var msg : TMessage);
begin
  msg.Result := 0;
end;
geht leider nich. form kann man trotzdem noch verschieben. :/

Christian Seehase 30. Jun 2004 18:38

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:
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;
PS:
Über das Systemmenü des Formulares geht es dann allerdings immer noch :?

Seltsamer Weise funktioniert

Delphi-Quellcode:
  EnableMenuItem(GetSystemMenu(self.Handle,false),SC_MOVE,MF_BYCOMMAND or MF_GRAYED);
nämlich nicht. Mit SC_CLOSE ginge es :gruebel:

phXql 30. Jun 2004 18:41

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... :)

neolithos 30. Jun 2004 19:03

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.

Christian Seehase 30. Jun 2004 20:32

Re: Fenster "unverschiebbar" machen
 
Moin Neolithos,

Zitat:

Zitat von neolithos
Die gefällt mir nicht. Da dadurch auch der Rechtsklick nicht mehr das Popup-Fenster anzeigt.

Meinst Du das Systemmenü?
Das funktioniert dann noch.

neolithos 30. Jun 2004 20:39

Re: Fenster "unverschiebbar" machen
 
Zitat:

Zitat von Christian Seehase
Meinst Du das Systemmenü?
Das funktioniert dann noch.

Ja! Sicher! *verwirrt*
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.

Christian Seehase 30. Jun 2004 21:01

Re: Fenster "unverschiebbar" machen
 
Moin Neolithos,

Zitat:

Zitat von neolithos
Ein weiterer Nachteil ist, dass du nicht auf die Verschiebungen mittels Tastatur reagierst.

leider wahr (:?), auch wenn wohl > 99% aller Anwender nicht wissen, dass das geht ;-)

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:

phXql 30. Jun 2004 21:18

Re: Fenster "unverschiebbar" machen
 
Zitat:

Zitat von Christian Seehase
Moin Neolithos,

Zitat:

Zitat von neolithos
Ein weiterer Nachteil ist, dass du nicht auf die Verschiebungen mittels Tastatur reagierst.

leider wahr (:?), auch wenn wohl > 99% aller Anwender nicht wissen, dass das geht ;-)

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:

wenn ich bei delphi das align auf alCustom stelle, kann die form nich verschoben werden, und im systemmenü sind alle einträge ausgegraut, BIS auf den Move-eintrag. kann der vll. gar nich ausgegraut werden?

OT: wie kann man denn nun ein fenster mit der tastatur verschieben? :mrgreen:


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

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz