Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi 2 Fenster verschieben (https://www.delphipraxis.net/96171-2-fenster-verschieben.html)

Starworld1000 19. Jul 2007 18:55


2 Fenster verschieben
 
Hallo alle zusammen

Ich hoffe ihr könnt mir weiterhelfen

Ich will mit Form1 die Form2, andocken und mitverschieben können.
Die Lösung die ich gefunden habe funktioniert auch,
jedoch erhalte ich beim Ausführen jedesmal eine Zugriffverletzung :(

Vielleicht könnt ihr mir ja weiterhelfen



Hier der Code:

Delphi-Quellcode:
  public
    { Public-Deklarationen }
    procedure WndProc(var Message: TMessage); override;
  end;

procedure TFORM1.WndProc(var Message: TMessage);
begin
 if (Message.msg = WM_Move) then
 begin
  Form2.left := Form1.left;
  Form2.top := Form1.Top+183;
 end;
inherited WndProc(Message);

end;

Wäre echt Dankbar für eure Hilfe :angel2:
Grüße Starworld

s-off 20. Jul 2007 13:51

Re: 2 Fenster verschieben
 
Hallo,

wenn das Event zum ersten Mal auftritt, gibt es Form2 noch gar nicht!

Edit: Was ist das denn für eine Aussage?!
Zitat:

Zitat von Starworld1000
Die Lösung die ich gefunden habe funktioniert auch,
jedoch erhalte ich beim Ausführen jedesmal eine Zugriffverletzung

Ändere mal die Erzeugungsreihenfolge und ruf Form1 aus Form2 auf. Dann siehst Du, dass es grundsätzlich erstmal funktioniert. Meintest Du vielleicht das mit Deiner widersprüchlichen Aussage?

SirThornberry 20. Jul 2007 14:38

Re: 2 Fenster verschieben
 
und dann nicht so:
Delphi-Quellcode:
procedure TFORM1.WndProc(var Message: TMessage);
begin
if (Message.msg = WM_Move) then
begin
  Form2.left := Form1.left;
  Form2.top := Form1.Top+183;
end;
inherited WndProc(Message);

end;
sondern mindestens so
Delphi-Quellcode:
procedure TFORM1.WndProc(var Message: TMessage);
begin
if (Message.msg = WM_Move) then
begin
  Form2.left := Self.left;
  Form2.top := Self.Top+183;
end;
inherited WndProc(Message);

end;
Ansonsten kannst du gleich den Objectteil weg lassen und zur völlig zur globalen Programmierung übergehen.
Richtig/Perfekt wäre es dann wenn Form2 auch weg kommt (sofern Form2 die globale Instanzvariable ist) und dafür eine klassenvariable dafür verwendet wird.

Starworld1000 20. Jul 2007 17:19

Re: 2 Fenster verschieben
 
Hubs :angel:

Naja da haben wohl meine Hände schneller getippt wie ich gedacht :zwinker:

Ja Danke, hat funktioniert.

Nun ist die Form2 aber die Hauptform, aber wie sag ich der Form nun, das wenn
ich auf Schliessen Klicke, das Programm nicht beenden soll,
und umgekehrt die Form1 das Programm aber beenden soll ? :wall:

zb:
Form2.Visble:=False

Grüße
Starworld


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:20 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