Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Haupt- und Nebenfenster-Problem (https://www.delphipraxis.net/96781-haupt-und-nebenfenster-problem.html)

PeterPanino 30. Jul 2007 22:46


Haupt- und Nebenfenster-Problem
 
Ich habe zusätzlich zum Hauptfenster in meinem Programm ein Fenster, das erst zur Laufzeit erzeugt wird:

Delphi-Quellcode:
Application.CreateForm(TMyForm, MyForm);
try
  MyForm.WindowState := wsMaximized;
  MyForm.ShowModal;
  MyForm.BringToFront; //hilft auch nichts
finally
  MyForm.Free;
end;
Soweit läuft alles perfekt, nur ein kleiner Schönheitsfehler tritt auf: Wenn das Fenster MyForm geöffnet ist, und ich dann wo anders hin klicke (z.B. auf die Taskleiste), und dann wieder zurück auf MyForm klicke, dann wird unerwünschterweise das Hauptfenster meines Programms angezeigt (obwohl ich auf MyForm geklickt habe). Offensichtlich ist beim Verlassen von MyForm der Fokus wieder auf das Hauptfenster übergegangen, sodass beim nochmaligen Klicken auf MyForm dann das Hauptfenster aktiviert wurde. Wie kann man das verhindern?

mkinzler 31. Jul 2007 05:39

Re: Haupt- und Nebenfenster-Problem
 
Soll das 2. Fenster bis zum Schließen oben sein? (.ShowModal)

PeterPanino 31. Jul 2007 14:39

Re: Haupt- und Nebenfenster-Problem
 
Zitat:

Zitat von mkinzler
Soll das 2. Fenster bis zum Schließen oben sein? (.ShowModal)

Ja, natürlich.

Whookie 31. Jul 2007 14:43

Re: Haupt- und Nebenfenster-Problem
 
Also bei mir geht das problemlos ...

Dein
Delphi-Quellcode:
MyForm.BringToFront
ist allerdings unnötig, weil ShowModal erst verlassen wird, wenn du das Fenster schließt!!

PeterPanino 31. Jul 2007 15:02

Re: Haupt- und Nebenfenster-Problem
 
Zitat:

Zitat von Whookie
Dein
Delphi-Quellcode:
MyForm.BringToFront
ist allerdings unnötig, weil ShowModal erst verlassen wird, wenn du das Fenster schließt!!

Ist mir klar, war ein Lapsus.
Aber, wie gesagt, wenn ich dann woanders klicke und dann auf das Nebenfenster klicke, wird das Hauptfenster angezeigt!

semo 31. Jul 2007 23:00

Re: Haupt- und Nebenfenster-Problem
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Unit2;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Application.CreateForm(TForm2, Form2);
  try
    Form2.WindowState := wsMaximized;
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;

end.
so wie du das programmiert hats, ist es das gewünschte verhalten.
grund hierfür ist das Showmodal, welche das Form2 als oberstes Fenster deiner Applikation anzeigt.
Es werden also keine Eingaben in dein Form1 zugelassen.
Da es aber das Hauptformular ist, wird es beim Reaktivieren deiner Applikation mit angezeigt.

Was hast du denn genau vor?
Für mich klingt das irgendwie als wenn du das zweite Fenster aufmachen möchtest um das erste Fenster zu verbergen?

PeterPanino 1. Aug 2007 01:27

Re: Haupt- und Nebenfenster-Problem
 
Zitat:

Zitat von computer-glossar.de
Da es aber das Hauptformular ist, wird es beim Reaktivieren deiner Applikation mit angezeigt.

Ja , genau das ist ja das Problem: Da nämlich beide Fenster - Haupt- und Nebenfenster - maximiert sind, wird beim Reaktivieren dann nur das Hauptfenster angezeigt. Stattdessen sollte aber das modale Nebenfenster angezeigt werden!

Ich habe jetzt das Problem dadurch umgangen, dass ich jetzt vor dem Aufruf von
Delphi-Quellcode:
Form2.ShowModal
Delphi-Quellcode:
Form1.WindowState := wsMinimized
aufrufe, und nach dem Schließen des Nebenfensters wieder
Delphi-Quellcode:
Form1.WindowState := wsMaximized
, also so:

Delphi-Quellcode:
procedure TForm1.NebenfensterOeffnen;
begin
  Application.CreateForm(TForm2, Form2);
  try
    Form2.WindowState := wsMaximized;
    Form2.BringToFront;
    Form1.WindowState := wsMinimized;
    Form2.ShowModal;
  finally
    Form2.Free;
    Form1.WindowState := wsMaximized;
  end;
end;
Wer weiß eine bessere Lösung?


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:54 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