![]() |
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:
Soweit so gut.
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; 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:
Eigentlich müßte das Label jetzt die aktuelle Position des Fensters anzeigen. Leider Fehlanzeige.
Label1.Caption:=IntToStr(Form1.Top);
Sinn und Zweck der Übung ist lediglich der, dass beim nächsten Start der Anwendung die gewählte Position automatisch festgelegt wird. |
Re: Fensterposition anzeigen?
Zeigt es was Falsches an oder wird es nur nicht upgedatet?
Wo rufst du den Code auf? |
Re: Fensterposition anzeigen?
Es wir kein Fehler vom Compiler gefunden. Auch wird nich geupdatet.
|
Re: Fensterposition anzeigen?
Wo steht den der Code mit dem Label bzw wo wird er aufgerufen?
|
Re: Fensterposition anzeigen?
Packs mal ins OncanRisize.
|
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; |
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:
[...] |
Re: Fensterposition anzeigen?
Zitat:
|
Re: Fensterposition anzeigen?
Bau mal ein
Delphi-Quellcode:
ein
Form.Update;
|
Re: Fensterposition anzeigen?
Form.Update; Keine Änderung im Label. Leider.
|
Re: Fensterposition anzeigen?
Delphi-Quellcode:
Application.ProcessMessages;
|
Re: Fensterposition anzeigen?
Keine Änderung im Label.
|
Re: Fensterposition anzeigen?
Pack es zum Test mal in einen anderen Event
|
Re: Fensterposition anzeigen?
Zitat:
|
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?
|
Re: Fensterposition anzeigen?
Z.B. .onClick
|
Re: Fensterposition anzeigen?
@Blackheart, ebenfalls keine Änderung im Label.
|
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);
|
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:
Gruß Hawkeye
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; |
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.
|
Re: Fensterposition anzeigen?
Liste der Anhänge anzeigen (Anzahl: 1)
Also bei Mir funzt es hab mal die Exe angehangen.
|
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. |
Re: Fensterposition anzeigen?
Dann weiss Ich auch nicht, bei mir funktioniert das tadellos und auch mit den Richtigen Koordinaten.
Wunder :roll: |
Re: Fensterposition anzeigen?
Poste doch bitte mal das Nicht-Compilierte Projekt. Ich möchte mir mal den Trick von Dir ablauschen.
|
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.
|
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. |
Re: Fensterposition anzeigen?
Zitat:
Dann ist Formular am Bestimmungsort angekommen und die Werte sind auch verfügbar. cu Oliver |
Re: Fensterposition anzeigen?
Zitat:
Wegen eines anderen Threads wurde ich hierher gelinkt (thx Hawkeye)... Dumm nur, dass ich ein Fehler bekomme: "Nicht deklarierter Bezeichner 'TWMWindowPosChanging'" |
Re: Fensterposition anzeigen?
Ich vermute mal, dass dies in der Unit "Messages" deklariert ist. Hast du diese eingebunden?
|
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