AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult mrOK
Thema durchsuchen
Ansicht
Themen-Optionen

Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult mrOK

Ein Thema von Kidi · begonnen am 25. Jan 2017 · letzter Beitrag vom 26. Jan 2017
Antwort Antwort
a.def
(Gast)

n/a Beiträge
 
#1

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult

  Alt 25. Jan 2017, 22:34
Ich zitiere mich mal einfach selber. Man braucht kein Alt+Space und all den Quark
Die Alt+Space-Geschichte ist rein theoretisch jedem zuzutrauen. Wer es aber kennt und anwenden kann, ist die andere Frage. Ich gehe von einem Prozentsatz von <25 aus.

Guck mal hier. So kann man auch auf außerhalb-des-sichtbaren-Bereichs prüfen.

Delphi-Quellcode:
procedure checkFormPosition(aFormToSetPos: TForm);
begin
 if Screen.MonitorFromWindow(aFormToSetPos.Handle, mdNull) = nil then
  begin
   // Form is outside of any monitor. Move to center of main monitor
   aFormToSetPos.Top := (Screen.Monitors[0].Height - aFormToSetPos.Height) div 2;
   aFormToSetPos.Left := (Screen.Monitors[0].Width - aFormToSetPos.Width) div 2;
  end;
end;
  Mit Zitat antworten Zitat
Slipstream
(Gast)

n/a Beiträge
 
#2

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult

  Alt 26. Jan 2017, 01:15
Nein, da hast du was falsch verstanden. Deiner Methode in Delphi, das Erscheinen eines Formulars ausserhalb eines gültigen Bildschirmbereichs zu vermeiden, wollte ich auf keinen Fall widersprechen, das ist sinnvoll und richtig. Mir ging es nur darum zu zeigen, dass es für einen normalen Windows-Benutzer einfacher ist, mit Alt-Space (und das ist kein Quatsch, das ist ein sinnvolles Feature von Windows) eine Anwendung in den sichtbaren Bereich zu verschieben, anstatt in irgend einer Ini-Datei herumzufurwerkeln und die Struktur der Ini am Ende noch zu zerstören.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
302 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult

  Alt 26. Jan 2017, 05:58
Moin!

Das "herumfummeln" in der INI gehört genauso zu den Dingen, die aus der EDV Abteilung gemacht werden, wie die Windows Tastenkombinationen zu kennen, die Du, Slipstream, da genannt hast. Den Prozentsatz der Anwender, die das wissen, würde ich eher wesentlich kleiner als die genannten 25 % einschätzen.

Da ist die Lösung CheckFormPosition von a.def ja viel, viel besser.

@Otto: Warum sollte man das verbieten?

Gruß
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult

  Alt 26. Jan 2017, 06:47
@Otto: Warum sollte man das verbieten?
Der vorgesehene Pfad für (installierte) Programme liegt ja im Programme-Ordner. Da hat der Normalbenutzer aber standardmäßig keine Schreibrechte, von daher wird das so nicht funktionieren. Die bessere Option wäre APPDATA bzw. COMMON_APPDATA, diese Verzeichnisse lassen sich ja ermitteln.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Formular Position speichern, Generell wenn geschlossen wird oder bei ModalResult

  Alt 26. Jan 2017, 13:08
@Otto: Warum sollte man das verbieten?
Hallo Rolf,

Detlef hat das ja schon beantwortet. Doch das alleine ist es nicht, was mich an dem Beispiel etwas gestört hat.

1) Code-Optimierung: Sobald man mehrfach auf irgend etwas zugreift, in diesem Fall den Namen der INI-Datei, gehört sich dieser Teil ausgelagert. Hintergrund: Wenn man etwas ändert will/muss, dann macht man das an einer einzigen Stelle, und neben nicht an mehreren Stellen. Womöglich vergisst man dann was, und schon wundert man sich im Idealfall selber, im schlimmsten Fall der Kunde, dass irgendwas nicht funktioniert. Darum als Vorschlag mal die erste Optimierung:

Delphi-Quellcode:
function GetIniFileName: string;
begin
  Result := IncludeTrailingBackslash(UserDatenDirectory)+'MeinIniName.ini';
end;

procedure IniLesen;
begin
  With TIniFile.Create(GetIniFileName) do
  try
    // Werte lesen
  finally
    Free;
  end;
end;

procedure IniSchreiben;
begin
  With TIniFile.Create(GetIniFileName) do
  try
    // Werte schreiben
  finally
    Free;
  end;
end;
2) Code-Design: Die Werte für Top, Left, Width und Height eines Formulares setzt man nicht einzeln. Dazu verwendet man
Code:
SetBounds()
Warum ist das besser? Wenn man im Formular z.B. einen OnResize-Event hat, der schlimmstenfalls eine Positions-Neuberechnung vieler Komponenten durchführt, dann wird dieser mehrfach ausgelöst, wenn man die Werte einzeln setzt. Wenn man aber SetBounds nimmt, wird der Event nur einmal ausgelöst.

Beispiel um das nach zu vollziehen:

Delphi-Quellcode:
procedure TFrmTest.Button1Click(Sender: TObject);
begin // FormResize wird mehrfach ausgelöst
  Top := Top - 10;
  Left := Left - 10;
  Width := Width + 10;
  Height := Height + 10;
end;

procedure TFrmTest.Button2Click(Sender: TObject);
begin // FormResize wird nur einmal ausgelöst
  Self.SetBounds(Left-10, Top-10, Width+10, Height+10);
end;

procedure TFrmTest.FormResize(Sender: TObject);
begin
  Memo1.Lines.Add(DateTimeToStr(Now)+': FormResize wurde ausgelöst');
end;
Das alles ist jetzt nichts großartiges, sondern eher das kleine 1x1 der Grundausbildung (ich hab noch keine UNI von innen gesehen und mir alles selber bei gebracht) aber wenn man schon Beispiele angibt, dann sollte man es meiner Meinung nach richtig machen und sich der Verantwortung bewusst sein: Hier lesen viele mit, die von den Beispielen etwas lernen wollen/sollen/müssen.

Das ist jetzt keine Meckerei, ich will auch niemandem zu nahe treten, also versteht mich nicht falsch. Mir ging es ja auch schon so. Ich hab Beispiele meines Codes veröffentlicht, und bin dafür gesteinigt worden. Aber nur dadurch lernt man dazu. Also positiv denken
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:55 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