AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form darf nicht verschoben werden

Ein Thema von Martin K · begonnen am 17. Nov 2006 · letzter Beitrag vom 18. Nov 2006
Antwort Antwort
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

Form darf nicht verschoben werden

  Alt 17. Nov 2006, 19:07
Hi,

hätte nicht gedacht, dass ich mal vor so einem Problem stehen würde

Also folgendes:
Ein Form darf nicht verschoben werden!
Aber wie ist das zu machen?

- WindowState = wsMaximized, aber man kann ja ganz leicht das Fenster wieder verkleinern und dann verschieben.
- WindowState = wsMaximized und dann biMaximize aus den BorderIcons rausnehmen -> geht auch nicht, weil sich Fester dann doch wieder verschieben lässt
- in OnResize WindowState auf wsMaximized zu setzen klappt leider auch nicht
- BorderStyle = bsNone, wäre möglich, Fenster soll aber normale Titelleiste haben
- leider keine Prozedur wie OnMove gefunden, bei der man Left und Top wieder zurücksetzen könnte

Das Form ist generell im maximierten Zustand und soll dies auch bleiben.
Dass man die Größe nicht ändern kann, lässt sich ja einfach per Constraints festlegen, aber leider nicht Left und Top.
Richtig wäre eigentlich, biMaximize aus den BorderIcons rauszunehmen, aber wie gesagt: dann kann man das Fenster trotzdem verschieben.

Wenn jemand eine Idee hat, bitte posten.
Danke!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Form darf nicht verschoben werden

  Alt 17. Nov 2006, 19:17
WM_WINDOWPOSCHANGING ist die Antwort.

Delphi-Quellcode:
unit Unit12;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    Procedure WMWindowPosChanging(Var Message: TWMWindowPosChanging); Message WM_WINDOWPOSCHANGING;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
  With Message Do
  Begin
    WindowPos.x := 0; // Left
    WindowPos.y := 0; // Top
    WindowPos.cx := 1280; // Width
    WindowPos.cy := 1024; // Height

    Result := 0; // handled
  End;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Left := 0; // nur dazu da, die Form einmalig in den Verschiebungsprozess zu bekommen
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Form darf nicht verschoben werden

  Alt 17. Nov 2006, 19:29
Danke, genau das isses
Allerdings ist Left und Top bei wsMaximized -4, weil ja die Ränder des Forms abgeschnitten werden.
Reicht aber, das so zu machen:
Delphi-Quellcode:
  with Message do
  begin
    WindowPos.X := Left;
    WindowPos.Y := Top;

    Result := 0;
  end;
Denn wenn im OI WindowState auf wsMaximized steht wird das Form beim Programmstart ja automatisch maximiert und Left/Top auf -4 gesetzt, somit muss Left und Top nur noch beibehalten werden.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#4

Re: Form darf nicht verschoben werden

  Alt 18. Nov 2006, 02:47
Zitat von Martin K:
Hi,

hätte nicht gedacht, dass ich mal vor so einem Problem stehen würde :wall:

Also folgendes:
Ein Form darf nicht verschoben werden!
Aber wie ist das zu machen?

- WindowState = wsMaximized, aber man kann ja ganz leicht das Fenster wieder verkleinern und dann verschieben.
- WindowState = wsMaximized und dann biMaximize aus den BorderIcons rausnehmen -> geht auch nicht, weil sich Fester dann doch wieder verschieben lässt
- in OnResize WindowState auf wsMaximized zu setzen klappt leider auch nicht
- BorderStyle = bsNone, wäre möglich, Fenster soll aber normale Titelleiste haben
- leider keine Prozedur wie OnMove gefunden, bei der man Left und Top wieder zurücksetzen könnte

Das Form ist generell im maximierten Zustand und soll dies auch bleiben.
Dass man die Größe nicht ändern kann, lässt sich ja einfach per Constraints festlegen, aber leider nicht Left und Top.
Richtig wäre eigentlich, biMaximize aus den BorderIcons rauszunehmen, aber wie gesagt: dann kann man das Fenster trotzdem verschieben.

Wenn jemand eine Idee hat, bitte posten.
Danke!
Hallo,

ich hatte sowas mal auf Basis von WM_MOVE. Der Benutzer kann dann zwar das Window wegschieben, aber auf die Msg WM_MOVE werden die alten Werte wieder gesetzt und das Window schnappt wie von einem Gummi gezogen zurück an die gewünschte Position. Da der Computer viel sturer ist, gibt der Benutzer bald auf.

Gruss Reinhard
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Form darf nicht verschoben werden

  Alt 18. Nov 2006, 05:18
Moin Martin,

Zitat von Martin K:
Allerdings ist Left und Top bei wsMaximized -4, weil ja die Ränder des Forms abgeschnitten werden.
aber auch nur dann, wenn die Bordersize = 2 ist (siehe MSDN-Library durchsuchenGetSystemMetrics)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Form darf nicht verschoben werden

  Alt 18. Nov 2006, 14:26
@Reinhard Kern:
Danke, aber habe es schon mit WM_WINDOWPOSCHANGING gelöst.

@Christian Seehase:
Das ist schon klar, dass sich so absolute Werte wie -4 ändern können, je nach Theme oder was auch immer.
Deswegen verwende ich ja auch einfach den unrsprünglichen Wert von Left und Top, der ist nicht absult sondern eben der Wert, den Left und Top bei wsMaximized haben und den man wahrscheinlich auch über GetSystemMetrics erhalten würde.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#7

Re: Form darf nicht verschoben werden

  Alt 18. Nov 2006, 14:34
Zitat von Reinhard Kern:
Da der Computer viel sturer ist, gibt der Benutzer bald auf.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
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