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 Fensterposition anzeigen? (https://www.delphipraxis.net/84351-fensterposition-anzeigen.html)

mlspider 15. Jan 2007 20:33


Fensterposition anzeigen?
 
Mein Problem wird im nachhinein sich als ziehmlich simpel erweisen. Trotzdem funktionieren meine bis jetzt unternommenden Versuche nicht.

Ich habe ein Formular, was folgende Eigenschaften hat:

BorderStyle: None;
TransparentColor: True;

Auf dieser Form liegt eine Image-Kompe, dessen Picture die Form des Fensters bestimmt. Im MouseDown-Ereignis der Image-Kompo befindet sich folgender Code zum Positionswechsel des unsichtbaren Fensters:

Delphi-Quellcode:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if ssLeft in Shift then begin
  ReleaseCapture;
  Self.Perform(WM_NCLBUTTONDOWN, HTCAPTION, varEmpty);
end;
end;
Soweit so gut.

Jetzt habe ich ein Label auf die Form gesetzt, was mir die aktuelle Position des Fensters anzeigen soll.

Im Image-Ereignis MouseUp habe ich folgenden Code festgelegt:

Delphi-Quellcode:
Label1.Caption:=IntToStr(Form1.Top);
Eigentlich müßte das Label jetzt die aktuelle Position des Fensters anzeigen. Leider Fehlanzeige.

Sinn und Zweck der Übung ist lediglich der, dass beim nächsten Start der Anwendung die gewählte Position automatisch festgelegt wird.

mkinzler 15. Jan 2007 20:35

Re: Fensterposition anzeigen?
 
Zeigt es was Falsches an oder wird es nur nicht upgedatet?
Wo rufst du den Code auf?

mlspider 15. Jan 2007 20:37

Re: Fensterposition anzeigen?
 
Es wir kein Fehler vom Compiler gefunden. Auch wird nich geupdatet.

mkinzler 15. Jan 2007 20:39

Re: Fensterposition anzeigen?
 
Wo steht den der Code mit dem Label bzw wo wird er aufgerufen?

Blackheart 15. Jan 2007 20:41

Re: Fensterposition anzeigen?
 
Packs mal ins OncanRisize.

mlspider 15. Jan 2007 20:42

Re: Fensterposition anzeigen?
 
Im Image-Ereignis MouseUp:

Delphi-Quellcode:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Label1.Caption:=IntToStr(Form1.Top);
end;

Nils_13 15. Jan 2007 20:42

Re: Fensterposition anzeigen?
 
@mkinzler:
Wenn ich mich nicht vollkommen täusche, glaube ich, das im Post zu sehen:
Delphi-Quellcode:
Im Image-Ereignis MouseUp habe ich folgenden Code festgelegt:
[...]

mlspider 15. Jan 2007 20:44

Re: Fensterposition anzeigen?
 
Zitat:

Zitat von Blackheart
Packs mal ins OncanRisize.

Hat das nicht ws mit der Größenveränderung zu tun?

mkinzler 15. Jan 2007 20:45

Re: Fensterposition anzeigen?
 
Bau mal ein
Delphi-Quellcode:
Form.Update;
ein

mlspider 15. Jan 2007 20:49

Re: Fensterposition anzeigen?
 
Form.Update; Keine Änderung im Label. Leider.

mkinzler 15. Jan 2007 20:51

Re: Fensterposition anzeigen?
 
Delphi-Quellcode:
Application.ProcessMessages;

mlspider 15. Jan 2007 20:54

Re: Fensterposition anzeigen?
 
Keine Änderung im Label.

mkinzler 15. Jan 2007 20:56

Re: Fensterposition anzeigen?
 
Pack es zum Test mal in einen anderen Event

Blackheart 15. Jan 2007 20:59

Re: Fensterposition anzeigen?
 
Zitat:

Zitat von mlspider
Zitat:

Zitat von Blackheart
Packs mal ins OncanRisize.

Hat das nicht ws mit der Größenveränderung zu tun?

Schon Probiert ?

mlspider 15. Jan 2007 21:00

Re: Fensterposition anzeigen?
 
Leichter gesagt als getan, da ich lediglich zur Laufzeit nur mein Image und mein Label sehe. An welches Event der beiden Kompos dachtes Du denn?

mkinzler 15. Jan 2007 21:02

Re: Fensterposition anzeigen?
 
Z.B. .onClick

mlspider 15. Jan 2007 21:04

Re: Fensterposition anzeigen?
 
@Blackheart, ebenfalls keine Änderung im Label.

mlspider 15. Jan 2007 21:12

Re: Fensterposition anzeigen?
 
Auch das bringt leider keine Änderung. Anstandslos wird mir beim Starten der APP der Top-Wert des Form im Create-Event von Form1 angezeigt:

Delphi-Quellcode:
Label23.Caption:=IntToStr(Player.Top);

Hawkeye219 15. Jan 2007 21:14

Re: Fensterposition anzeigen?
 
Hallo,

mit ReleaseCapture beendest du die Verarbeitung der Mausnachrichten bis zum nächsten Capture, das MouseUp-Ereignis dürfte also nicht ausgelöst werden. Du könntest aber die Nachricht WM_WINDOWPOSCHANGING im Formular abfangen:

Delphi-Quellcode:
type
  TForm1 = class (TForm)
  private
    procedure WMWindowPosChanging (var Message: TWMWindowPosChanging);
      message WM_WINDOWPOSCHANGING;
  end;

procedure TForm1.WMWindowPosChanging (var Message: TWMWindowPosChanging);
begin
  inherited;
  Label1.Caption:=IntToStr(Top);
end;
Gruß Hawkeye

mlspider 15. Jan 2007 21:23

Re: Fensterposition anzeigen?
 
Es änder sich zwar der Wert im Label, allerdings vermute ich mal, dass der Left und der Top-Wert irgendwie gemischt wird.

Blackheart 15. Jan 2007 21:27

Re: Fensterposition anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei Mir funzt es hab mal die Exe angehangen.

mlspider 15. Jan 2007 21:32

Re: Fensterposition anzeigen?
 
Erst mal Danke für Deine Mühen, nur leider ändert sich auch nichts in Deinem Label. Du könntest ja mal das uncompilierte Beispiel posten. Dann wäre es vielleicht eher nachvollziehbarer, wie Du es realisierst.

Danke.

Blackheart 15. Jan 2007 21:36

Re: Fensterposition anzeigen?
 
Dann weiss Ich auch nicht, bei mir funktioniert das tadellos und auch mit den Richtigen Koordinaten.
Wunder :roll:

mlspider 15. Jan 2007 21:38

Re: Fensterposition anzeigen?
 
Poste doch bitte mal das Nicht-Compilierte Projekt. Ich möchte mir mal den Trick von Dir ablauschen.

Blackheart 15. Jan 2007 22:01

Re: Fensterposition anzeigen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Vieleicht hab Ich auch was missverstanden, beim Verschieben der Form sollen die Top Koordinaten der Form im Label angezeigt werden.

mlspider 15. Jan 2007 22:26

Re: Fensterposition anzeigen?
 
Du hast es völlig richtig verstanden. Jetzt läuft es und kann es nun auch vielmehr für den Left-Wert festlegen, in eine INI speichern. Beim nächsten Start erscheint das Fenster an der verschobenen Position.

Danke an alle. War ja wieder eine schwere Geburt und doch so simpel die Lösung.

Sir Rufo 25. Jan 2007 19:42

Re: Fensterposition anzeigen?
 
Zitat:

Zitat von Hawkeye219
Hallo,

mit ReleaseCapture beendest du die Verarbeitung der Mausnachrichten bis zum nächsten Capture, das MouseUp-Ereignis dürfte also nicht ausgelöst werden. Du könntest aber die Nachricht WM_WINDOWPOSCHANGING im Formular abfangen:

Delphi-Quellcode:
type
  TForm1 = class (TForm)
  private
    procedure WMWindowPosChanging (var Message: TWMWindowPosChanging);
      message WM_WINDOWPOSCHANGING;
  end;

procedure TForm1.WMWindowPosChanging (var Message: TWMWindowPosChanging);
begin
  inherited;
  Label1.Caption:=IntToStr(Top);
end;
Gruß Hawkeye

Also da würde ich ja eher die Nachricht WM_WINDOWPOSCHANGED benutzen, also wenn die Änderung abgeschlossen ist.
Dann ist Formular am Bestimmungsort angekommen und die Werte sind auch verfügbar.

cu

Oliver

xZise 25. Jan 2007 20:53

Re: Fensterposition anzeigen?
 
Zitat:

Zitat von Hawkeye219
Hallo,

mit ReleaseCapture beendest du die Verarbeitung der Mausnachrichten bis zum nächsten Capture, das MouseUp-Ereignis dürfte also nicht ausgelöst werden. Du könntest aber die Nachricht WM_WINDOWPOSCHANGING im Formular abfangen:

Delphi-Quellcode:
type
  TForm1 = class (TForm)
  private
    procedure WMWindowPosChanging (var Message: TWMWindowPosChanging);
      message WM_WINDOWPOSCHANGING;
  end;

procedure TForm1.WMWindowPosChanging (var Message: TWMWindowPosChanging);
begin
  inherited;
  Label1.Caption:=IntToStr(Top);
end;
Gruß Hawkeye


Wegen eines anderen Threads wurde ich hierher gelinkt (thx Hawkeye)...
Dumm nur, dass ich ein Fehler bekomme:
"Nicht deklarierter Bezeichner 'TWMWindowPosChanging'"

Matze 25. Jan 2007 20:56

Re: Fensterposition anzeigen?
 
Ich vermute mal, dass dies in der Unit "Messages" deklariert ist. Hast du diese eingebunden?

xZise 25. Jan 2007 21:03

Re: Fensterposition anzeigen?
 
Ne ^^
Nun funzt es wunderbar! Danke Hawkeye und Matze!


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