AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fensterposition persistent machen

Ein Thema von Codehunter · begonnen am 30. Mär 2018 · letzter Beitrag vom 31. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.208 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 18:24
Ohne es ausprobiert zu haben: Versuche doch als letztes noch einmal OnActivate statt OnShow .
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 18:37
Doppelt hält in dem Fall auch nicht besser. Wird dort genauso wieder überschrieben. Wenn ich ein ShowMessage an der Stelle einbaue, so rein zu Testzwecken WANN das Ereignis kommt, dann erscheint das Meldungsfenster immer noch bevor das Hauptfenster erscheint. Daher vermute ich, dass es auf die Zuweisung von Left und Top immer noch nicht spät genug erfolgt.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.568 Beiträge
 
Delphi 7 Professional
 
#3

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 18:45
Das funtioniert nur, wenn Position auf poDesigned steht.

Dann werden die von Dir gewünschten Werte genommen, andernfalls, die jeweils entsprechend zu berechnenden Werte.

ScreenCenter widerspricht (in der Regel) nun mal Top 47 und Left 11.

Was sollte bei der Einstellung poScreenCenter denn dann genommen werden: Die Bildschirmmitte oder 47 und 11?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 18:54
Zitat:
Die werden ignoriert und im Anschluss durch die Werte überschrieben, die in der DFM hinterlegt sind bzw. falls Position = poScreenCenter eingestellt ist
Nein, wenn du etwas nach dem Auslesen der DFM überschreibst , dan ist es überschrieben,

ABER ja nach Position wird das zu unterschiedlichen Zeitpunkten ausgewertet ... Top/Left hier und Width/Height dort/dann.
Probier da mal bissl rum (hab's jetzt nicht im Kopf), aber einige der Position werden "komplett" vor dem OnShow behandelt und schon kannst du alles im OnShow überschreiben.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 19:09
ABER ja nach Position wird das zu unterschiedlichen Zeitpunkten ausgewertet ... Top/Left hier und Width/Height dort/dann.
Probier da mal bissl rum (hab's jetzt nicht im Kopf), aber einige der Position werden "komplett" vor dem OnShow behandelt und schon kannst du alles im OnShow überschreiben.
Ich habe schon jede erdenkliche Kombination von Position und OnCreate/OnShow/WM_AFTERSHOW/OnActivate durch. Das Resultat ist immer das selbe. Die persistente Position wird korrekt aus der Ini gelesen und Left/Top zugewiesen, doch anschließend "irgendwo" wieder übersteuert.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.568 Beiträge
 
Delphi 7 Professional
 
#6

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 19:25
In meinen Programmen speichere ich schon seit Jahren die Position, Breite und Höhe (und vieles andere) in der Registry. Das geht analog auch in 'ner INI.

Es funktioniert nur, wenn Position auf poDesigned steht.

Alles andere ist dauerhaft, über die Jahre und Delphiversionen, gescheitert.

Wenn Du die Position selbst bestimmen willst, ist es doch nicht erforderlich die Position automatisch bestimmen zu lassen und dann nach irgend 'nem Weg zu suchen, der die eigene Bestimmung der Position doch noch ermöglicht.

Und wenn im Objektinspektor schon unbeding Position auf poScreenCenter stehen muss, dann versuch' doch mal, ob (sinngemäß) sowas funktioniert:
Delphi-Quellcode:
  // Irgendwo 'ner Prozedur vom Formular.
  Self.Position := poDesigned;
  Self.Left := ini.ReadInteger('Left',Self.Name,Self.Left);
  Self.Top := ini.ReadInteger('Top',Self.Name,Self.Top);
  ...
  Self.Position := poScreenCenter;
  Mit Zitat antworten Zitat
Sailor

Registriert seit: 20. Jul 2008
Ort: Balaton
112 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 19:28
Setze die MainForm.Position auf einen der Defaultwerte (poDefault,..). Im erstmaligen Aufruf von FormShow werden Top, Left, Width und Height auf die Werte aus der Ini-Datei gesetzt und dann eventuell noch korrigiert, also Anpassen an Bildschirmgröße etc. Anschließend setze ich WindowState auf den gespeicherten Wert. Klappt einwandfrei mit Delphi2010 auf allen Windows-Systemen.
  Mit Zitat antworten Zitat
ghubi01

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

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 20:23
Hallo,

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.

Ich hab folgendes ausprobiert und es funktioniert:
Delphi-Quellcode:
var
  Form1: TForm1;
  x1,y1: integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Top:=x1;
  Left:=y1;
end;

initialization
// Das Einlesen aus der INI oder Registry habe ich mir hier gespart
// Die eingelesen Werte werden hier den globalen Variablen übergeben
  x1:=30;
  y1:=100;

end.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 20: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
44.483 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fensterposition persistent machen

  Alt 30. Mär 2018, 20: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)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (30. Mär 2018 um 20:35 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 05:14 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