AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verhindern das Fenster verschoben wird

Ein Thema von Andreas L. · begonnen am 9. Apr 2008 · letzter Beitrag vom 12. Aug 2008
Antwort Antwort
Andreas L.
(Gast)

n/a Beiträge
 
#1

Verhindern das Fenster verschoben wird

  Alt 9. Apr 2008, 16:03
Hallo,
ich möchte verhindern das, dass Fenster seine Position verändert. Ein Ereignis wie OnMove gibts nicht und mit einem Timer ist es wohl doch sehr unschön. Das Fenster bekommt als Parent eine Scrollbox und soll da drin (wie in der RAD von Delphi) nicht verschoben werden können. Der Rahmen muss aber sichtbar bleiben, also kann ich nicht einfach Borderstyle auf bsNone stellen.

Irgendwelche Ideen?

EDIT: Das Form.Enabled auf False bringt zwar den gewünschten Effekt (kein verschieben, keine Funktion von Minimieren,etc) aber ich kann dann logischerweise keine Controls mehr drauf verschieben (ich verwende dazu TControlSizer).
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Verhindern das Fenster verschoben wird

  Alt 9. Apr 2008, 16:10
Nach ca. 13,7 Sekunden Suche: klick
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#3

Re: Verhindern das Fenster verschoben wird

  Alt 9. Apr 2008, 16:41
Ich wollte dasjetzt testen und hab fix eine neue Komponente erzeugt.
Delphi-Quellcode:
unit FormEditor;

interface

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

type
  TEditableForm = class(TCustomForm)
  private
    //
  public
    procedure WMNChittest(var msg:TWMNChittest); Message WM_NChittest;
  end;

  TFormEditor = class(TScrollBox)
  private
    FWindow: TEditableForm;
  protected
    { Protected-Deklarationen }
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('CapSystems', [TFormEditor]);
end;

{ TEditableForm }
procedure TEditableForm.WMNChittest(var msg: TWMNChittest);
begin
  DefaultHandler(Msg);
  if Msg.result = HTCAPTION then
    Msg.result := HTCLIENT;
end;

{ TFormEditor }
constructor TFormEditor.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if not (csDesigning in ComponentState) then
  begin
    FWindow := TEditableForm.Create(Self);
    with FWindow do
    begin
      Parent := Self;
      Visible := True;
    end;
  end;
end;

destructor TFormEditor.Destroy;
begin
  if not (csDesigning in ComponentState) then
    FWindow.Free;
  inherited Destroy;
end;

end.
Leider bekomme ich zur Laufzeit folgende Fehler:
Zitat:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt Project1.exe ist eine Exception der Klasse EResNotFound mit der Meldung 'Ressource TEditableForm wurde nicht gefunden' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
An was könnte das liegen?
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: Verhindern das Fenster verschoben wird

  Alt 9. Apr 2008, 16:54
OK, man muss anstatt Create einfach CreateNew verwenden. Warum das so ist verstehe ich aber nicht ganz.
  Mit Zitat antworten Zitat
Macci

Registriert seit: 31. Mai 2007
129 Beiträge
 
#5

Re: Verhindern das Fenster verschoben wird

  Alt 9. Apr 2008, 18:46
Hallo,

nein, du musst ganz einfach nur die Message WM_MOVING abfangen. Ist wirklich ein Kinderspiel. Bei Google wirst du sofort fündig.

Edit: Ach was solls, hier die Lösung.

Delphi-Quellcode:
unit Unit1;

interface

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

type TWMMoving = record
    Msg: Cardinal;
    fwSide: Cardinal;
    lpRect: PRect;
    Result: Integer;
  end;


type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure OnMoving(var Msg: TWMMoving); message WM_MOVING;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.OnMoving(var Msg: TWMMoving);
begin
inherited;
Msg.lpRect^ := BoundsRect; // Neue Position ist die aktuelle Position
Msg.Result := 1;

end;



end.
  Mit Zitat antworten Zitat
Benutzerbild von Spiderpig_GER_15
Spiderpig_GER_15

Registriert seit: 17. Mär 2008
298 Beiträge
 
Delphi 7 Personal
 
#6

Re: Verhindern das Fenster verschoben wird

  Alt 12. Aug 2008, 14:24
genau das hab ich auhc gebraucht, danke Macci
---Zufall ist das Inkognito Gottes---
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 17:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf