Positionierung eines Fensters

Für Fragen von Einsteigern und Programmieranfängern...
yogie
Beiträge: 8
Registriert: Di 6. Dez 2022, 11:27

Positionierung eines Fensters

Beitrag von yogie »

Hallo,
ich verwende LAZARUS Version 3.4 und habe Probleme bei der Positionierung von
untergeordneten Fenstern (forms).

poMainFormCenter funktioniert (natürlich nur mit der mainform als Aufrufer)
poOwnerFormCenter verstehe ich so, dass das aufgerufene Fenster in der Mitte
des aufrufenden (owner) Fensters plaziert wird. Das klappt nicht.
Hinweis es geht um den Aufruf eines modalen Fensters (showModal)

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1651
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Positionierung eines Fensters

Beitrag von fliegermichl »

Kann ich nicht nachvollziehen.
Im Anhang ein kleines Testprojekt mit 3 Formularen. Im ersten ein Button, der Formular2 erstellt und im zweiten ein Button der Formular 3 erstellt und öffnet.
Beide werden brav in der Mitte des vorhergehenden Formulares platziert.
Dateianhänge
project1.zip
(140.39 KiB) 60-mal heruntergeladen

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Positionierung eines Fensters

Beitrag von Zvoni »

Und wird der Owner auch gesetzt für die ChildForm?

Code: Alles auswählen

ModalForm:=TMyModalForm.Create(TheOwner: TComponent);
Was könnte blos dieser Parameter im Create sein, hmm?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

yogie
Beiträge: 8
Registriert: Di 6. Dez 2022, 11:27

Re: Positionierung eines Fensters

Beitrag von yogie »

@Zvoni
Fenster werden nicht zur Laufzeit erzeugt

yogie
Beiträge: 8
Registriert: Di 6. Dez 2022, 11:27

Re: Positionierung eines Fensters

Beitrag von yogie »

@fliegermichi
werde Dein Beispiel testen, danke.
Muß jetzt leider erstmal weg

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1651
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Positionierung eines Fensters

Beitrag von fliegermichl »

yogie hat geschrieben: Mo 30. Sep 2024, 09:39 @Zvoni
Fenster werden nicht zur Laufzeit erzeugt
Dann ist es klar. Deine Formulare werden beim Programmstart automatisch erzeugt und dann ist Application der Owner.
Das funktioniert nur dann richtig, wenn die Formulare zur Laufzeit erzeugt werden mit dem jeweils aufrufenden Formular als Owner.

Ich habe in meinen Einstellungen Projekt -> Projekteinstellungen -> Projekteinstellungen -> Formulare die Option "Neue Formulare automatisch erzeugen" immer deaktiviert.

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Positionierung eines Fensters

Beitrag von Zvoni »

yogie hat geschrieben: Mo 30. Sep 2024, 09:39 @Zvoni
Fenster werden nicht zur Laufzeit erzeugt
Mal was prinzipielles:
Es gibt (wenn überhaupt) nur ein einziges Fenster, welches bei Program-Start automatisch erzeugt wird: Die MainForm.
Punkt!
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1651
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Positionierung eines Fensters

Beitrag von fliegermichl »

Wenn die Option nicht deaktiviert wird, erzeugt Lazarus alle Formulare beim Programmstart.

Benutzeravatar
theo
Beiträge: 10922
Registriert: Mo 11. Sep 2006, 19:01

Re: Positionierung eines Fensters

Beitrag von theo »

Zvoni hat geschrieben: Mo 30. Sep 2024, 11:45 Mal was prinzipielles:
Es gibt (wenn überhaupt) nur ein einziges Fenster, welches bei Program-Start automatisch erzeugt wird: Die MainForm.
Punkt!
Achja?

Code: Alles auswählen

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1, unit2
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.     

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Positionierung eines Fensters

Beitrag von Zvoni »

theo hat geschrieben: Mo 30. Sep 2024, 11:49
Zvoni hat geschrieben: Mo 30. Sep 2024, 11:45 Mal was prinzipielles:
Es gibt (wenn überhaupt) nur ein einziges Fenster, welches bei Program-Start automatisch erzeugt wird: Die MainForm.
Punkt!
Achja?

Code: Alles auswählen

program Project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  {$IFDEF HASAMIGA}
  athreads,
  {$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms, unit1, unit2
  { you can add units after this };

{$R *.res}

begin
  RequireDerivedFormResource:=True;
  Application.Scaled:=True;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.     
Genau das meine ich: Handarbeit ist die Devise.
Entweder diesen Automatismus abschalten (siehe fliegermichl), oder nach Hinzufügen einer Form in der lpr den Kram rauslöschen (mache ich immer)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
theo
Beiträge: 10922
Registriert: Mo 11. Sep 2006, 19:01

Re: Positionierung eines Fensters

Beitrag von theo »

Zvoni hat geschrieben: Mo 30. Sep 2024, 11:56 Genau das meine ich: Handarbeit ist die Devise.
Dann musst du es aber anders formulieren. z.B. "Meiner Meinung nach sollte man alle Fenster ausser dem Mainform manuell erzeugen".
Das würde man auf Anhieb verstehen (Auch ohne "Punkt!"). :wink:

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Positionierung eines Fensters

Beitrag von Zvoni »

theo hat geschrieben: Mo 30. Sep 2024, 12:12
Zvoni hat geschrieben: Mo 30. Sep 2024, 11:56 Genau das meine ich: Handarbeit ist die Devise.
Dann musst du es aber anders formulieren. z.B. "Meiner Meinung nach sollte man alle Fenster ausser dem Mainform manuell erzeugen".
Das würde man auf Anhieb verstehen (Auch ohne "Punkt!"). :wink:
OK, Einverstanden.
Meine "Formulierung" hätte besser sein können.
Für mich war es halt immer eines meiner grundlegenden Paradigmen:
Ich bin der Programmierer, ich bestimme, was wann geschieht, und nicht irgendein von irgendjemandem festgelegter Automatismus (dem ich durchaus NICHT seine Existenzberechtigung abspreche)
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

HobbyProgrammer
Beiträge: 207
Registriert: Di 29. Okt 2019, 12:51
Wohnort: Deutschland , Baden-Württemberg

Re: Positionierung eines Fensters

Beitrag von HobbyProgrammer »

Mal eine Frage am Rande.
Gibt es eine Möglichkeit das 'Formulare automatisch erzeugen' fix zu deaktivieren ohne das man dieses jedes mal wenn man ein neues Projekt erzeugt manuell deaktivieren muß?
Ich habe es schon mit den Projekteinstellungen versucht aber die 'Vorgabeoption' bezieht sich leider nur auf die Compilereinstellungen.
Host: Core i7-12700H, NVIDIA RTX3050 6GB, 32GB Ram, 1TB NVME SSD mit KUbuntu 24.04LTS 64bit , VM KUbuntu 22.04 LTS 64bit mit Lazarus 3.6 und Cross-Platform Compiler für Linux 32/64bit und Windows 32/64bit. Wine für erste Tests der Windows Binarys.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1651
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Positionierung eines Fensters

Beitrag von fliegermichl »

HobbyProgrammer hat geschrieben: Mo 30. Sep 2024, 13:25 Mal eine Frage am Rande.
Gibt es eine Möglichkeit das 'Formulare automatisch erzeugen' fix zu deaktivieren ohne das man dieses jedes mal wenn man ein neues Projekt erzeugt manuell deaktivieren muß?
Ich habe es schon mit den Projekteinstellungen versucht aber die 'Vorgabeoption' bezieht sich leider nur auf die Compilereinstellungen.
Habe ich auch schon gesucht. Bin aber auch nicht fündig geworden.

Benutzeravatar
Zvoni
Beiträge: 396
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz 2.2.2 FPC 3.2.2)
CPU-Target: 32Bit
Wohnort: BW

Re: Positionierung eines Fensters

Beitrag von Zvoni »

fliegermichl hat geschrieben: Mo 30. Sep 2024, 14:47
HobbyProgrammer hat geschrieben: Mo 30. Sep 2024, 13:25 Mal eine Frage am Rande.
Gibt es eine Möglichkeit das 'Formulare automatisch erzeugen' fix zu deaktivieren ohne das man dieses jedes mal wenn man ein neues Projekt erzeugt manuell deaktivieren muß?
Ich habe es schon mit den Projekteinstellungen versucht aber die 'Vorgabeoption' bezieht sich leider nur auf die Compilereinstellungen.
Habe ich auch schon gesucht. Bin aber auch nicht fündig geworden.
Da das eigentlich eine Projekt-Einstellung ist, müsste das doch in irgendeiner dieser lpi, lps oder sonstwas Dateien stehen.

Hat Lazarus nicht so ne "Template"-lpi (oder welche Datei-Endung auch immer)?

Vielleicht mal zwei leere Projekte erstellen, einmal mit und einmal Automatismus abgeschaltet, und dann die ganzen lpi, lps etc. gegen ein diff werfen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten