AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fensterposition persistent machen

Ein Thema von Codehunter · begonnen am 30. Mär 2018 · letzter Beitrag vom 31. Mär 2018
Antwort Antwort
Seite 2 von 3     12 3   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 21:31
Zitat:
ich würde die Daten im initialization Abschnitt aus der ini-Datei oder Registry einlesen und in globalen Variablen speichern.
Ich glaube einige Leute schreiben nur um des schreiben willens und lesen tun sie auch nicht.

Er hat doch geschrieben das er die werte speichert darum geht es doch gar nicht.
Sondern darum das die eingelesenen werte beim setzen in OnShow ignoriert werden und Delphi tut was es will.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
42.982 Beiträge
 
Delphi 12 Athens
 
#12

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 21:33
Neee, erstmal ist es egal wann die Daten gelesen werden, denn es hängt beim Zuweisen und nicht beim Auslesen.
Und nein, es funktioniert nicht immer.

Je nach TForm.Position werden Monitor, Größe und Top/Left zu unterschiedlichen Zeitpunkten von der VCL gesetzt.
Wenn man also seine Zuweisung macht und anschließend die VCL das wieder überschreibt, dann hat man ein Problemchen.

Einiges wird z.B. schon im Constructor ausgeführt, Anderes im OnShow (aber noch bevor das eigene Event behandelt wird) und wieder Anderes erst danach.
Und wann OnCreate ausgeführt wird, dass kann sich auch noch entscheidend auswirken. (Delphi-Referenz durchsuchenOldCreateOrder)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Mär 2018 um 21:35 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 21:38
werfe die VCL weg und mache es von Hand.

Delphi-Quellcode:
    SetRect(rc, 0, 0, XMIN_SIZE, YMIN_SIZE);
    AdjustWindowRectEx(rc, dwStyle, False, dwExStyle);

    X := MAX((GetSystemMetrics(SM_CXSCREEN) - rc.Right - rc.Left) div 2, 0);
    Y := MAX((GetSystemMetrics(SM_CYSCREEN) - rc.Bottom - rc.top) div 2, 0);

    MainHandle := CreateWindowEx(dwExStyle, myClass, myTitle, dwStyle, X, Y, rc.Right - rc.Left,
      rc.Bottom - rc.top, 0, 0, wc.hInstance, nil);
gruss

Geändert von EWeiss (30. Mär 2018 um 21:44 Uhr)
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
121 Beiträge
 
Delphi 12 Athens
 
#14

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 21:53
Ich glaube einige Leute schreiben nur um des schreiben willens und lesen tun sie auch nicht.

Er hat doch geschrieben das er die werte speichert darum geht es doch gar nicht.
Sondern darum das die eingelesenen werte beim setzen in OnShow ignoriert werden und Delphi tut was es will.

gruss
Danke gleichfalls.

Ich bin davon ausgegangen, dass man anhand des Beispiels erkennt welchen Weg man zur Lösung des Problems noch gehen könnte.
Dabei sollte die Positionszuweisung (Top und Left) in OnCreate der eigentliche Hinweis sein.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 22:01
Dabei sollte die Positionszuweisung (Top und Left) in OnCreate der eigentliche Hinweis sein.
Und eben das funktioniert ja nicht bei Ihm. Hat er ja im ersten Post geschrieben.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
121 Beiträge
 
Delphi 12 Athens
 
#16

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 22:03
Neee, erstmal ist es egal wann die Daten gelesen werden, denn es hängt beim Zuweisen und nicht beim Auslesen.
Und nein, es funktioniert nicht immer.

Je nach TForm.Position werden Monitor, Größe und Top/Left zu unterschiedlichen Zeitpunkten von der VCL gesetzt.
Wenn man also seine Zuweisung macht und anschließend die VCL das wieder überschreibt, dann hat man ein Problemchen.

Einiges wird z.B. schon im Constructor ausgeführt, Anderes im OnShow (aber noch bevor das eigene Event behandelt wird) und wieder Anderes erst danach.
Und wann OnCreate ausgeführt wird, dass kann sich auch noch entscheidend auswirken. (Delphi-Referenz durchsuchenOldCreateOrder)
OK. Wann die Daten eingelesen werden ist wirklich egal.

Zu deiner zweiten Aussage: Lässt sich das irgendwie reproduzieren?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#17

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 22:05
Zitat:
Je nach TForm.Position werden Monitor, Größe und Top/Left zu unterschiedlichen Zeitpunkten von der VCL gesetzt.
Ich sag doch wirf sie weg

Zitat:
Danke gleichfalls.
In wie fern?

Ich habe keine Probleme bei allen meinen Anwendungen die x, y Position zu setzen.
Das tue ich schon da existiert noch gar kein Window .. und bevor es angezeigt wird.

Nebenbei sag mir was du testen willst.. ich brauche keine VCL.
Um den Shot klein zu halten NUR 6 meiner Programme.
Und wunder sie sitzen da wo sie sitzen sollen.

gruss

Geändert von EWeiss (11. Jul 2019 um 16:50 Uhr)
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
121 Beiträge
 
Delphi 12 Athens
 
#18

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 22:08
Und eben das funktioniert ja nicht bei Ihm. Hat er ja im ersten Post geschrieben.
Stimmt. Sorry hatte ich falsch gelesen.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 22:16
ich würde die Daten im initialization Abschnitt aus der ini-Datei oder Registry einlesen und in globalen Variablen speichern.
Danach im FormCreate-Ereignis setzen.
Jetzt muss ich mal blöd fragen. Was hast du davon? Im OnCreate wird die Fensterposition benötigt. Dann lese ich die dort auch aus und nicht vorher in der Initialization.

Würde bei der Mainform keinen Unterschied machen. Aber in einem weiteren erzeugte Fenster (FormB) passt das irgenwie gar nicht. Du liest die Position beim Programmstart ein. Dann öffnest du das FormB schiebst es an eine andere Position und schliesst es wieder. Dann erwarte ich eigentlich, dass dieses FormB bei erneutem Aufruf an der zuletzt geschlossenen Position wieder erscheint. Wird es aber nicht, weil die Position im Initialization beim Start des Programms eingelesen wurde. Hhhmm?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
121 Beiträge
 
Delphi 12 Athens
 
#20

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 22:22
Würde bei der Mainform keinen Unterschied machen. Aber in einem weiteren erzeugte Fenster (FormB) passt das irgenwie gar nicht. Du liest die Position beim Programmstart ein. Dann öffnest du das FormB schiebst es an eine andere Position und schliesst es wieder. Dann erwarte ich eigentlich, dass dieses FormB bei erneutem Aufruf an der zuletzt geschlossenen Position wieder erscheint. Wird es aber nicht, weil die Position im Initialization beim Start des Programms eingelesen wurde. Hhhmm?
Für ein weiteres erzeugtes Fenster würde ich das auch so nicht machen. Das Beispiel sollte auch nur für die Mainform gelten.
  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 04:01 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