Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Wie Hauptfenster in Vordergrund bringen? (https://www.delphipraxis.net/156134-wie-hauptfenster-vordergrund-bringen.html)

iphi 21. Nov 2010 10:34

Wie Hauptfenster in Vordergrund bringen?
 
Hallo,

bei mir wird bei Programmstart im OnCreate Event zuweilen ein Warnungsfenster erzeugt. Wird dieses weggeklickt, so landet das Hauptfenster im Hintergrund hinter anderen Anwendungen versteckt.
Wie und wo bringe ich das Hauptfenster bei Programmstart in so einem Fall automatisch in den Vordergrund?

Beispielcode zur Demonstration des Effektes:
Delphi-Quellcode:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
With Application do
  begin
   NormalizeTopMosts;
   MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
   RestoreTopMosts;
  end;
end;

end.

toms 21. Nov 2010 10:38

AW: Wie Hauptfenster in Vordergrund bringen?
 
Hallo,

Die MessageBox könntest du in der Projektdatei anzeigen.


Delphi-Quellcode:
...
  Application.Initialize;
  Application.MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
  Application.CreateForm(TForm1, Form1);
  Application.Run;
...

iphi 21. Nov 2010 10:50

AW: Wie Hauptfenster in Vordergrund bringen?
 
Zitat:

Die MessageBox könntest du in der Projektdatei anzeigen.
Das möchte ich vermeiden. Im OnCreate lese ich Ini-Files und falls die inkonsistent sind, soll die Warnung erscheinen.

Gibt es da keine andere Möglichkeit?
Warum geht denn das Hauptfenster überhaupt in den Hintergrund?

Sir Rufo 21. Nov 2010 11:00

AW: Wie Hauptfenster in Vordergrund bringen?
 
Was spricht denn dagegen?

Du kannst die Initialisierung doch auch von der MainForm trennen.

Delphi-Quellcode:
...
  Application.Initialize;
  if not MeineInitialisierung then
    begin
      Application.MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
      Halt;
    end;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
...

Bummi 21. Nov 2010 11:04

AW: Wie Hauptfenster in Vordergrund bringen?
 
Hilft Dir das?
Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
 If not FAllreadyActivated then
   begin
    FAllreadyActivated := true;
    MessageBox(handle,'Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
   end;
end;

wolfgang_SV 21. Nov 2010 11:27

AW: Wie Hauptfenster in Vordergrund bringen?
 
so geht es auch...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
formstyle:=fsstayontop;
With Application do
  begin
   NormalizeTopMosts;
   MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
   RestoreTopMosts;
  end;
end;

iphi 21. Nov 2010 12:21

AW: Wie Hauptfenster in Vordergrund bringen?
 
Zitat:

Die MessageBox könntest du in der Projektdatei anzeigen.
Da habe ich dasselbe Problem wie im OnCreate-Event.

Wenn ich das Warnfenster VOR dem OnActivate oder OnShow Event erzeuge, dann kommt das Hauptfenster ohne Fokus hoch. Das lässt sich auch im OnShow nicht reparieren. Nach Wegklicken der Warnung geht der Fokus auf das ursprünglich aufrufende Programm über (IDE oder File Browser).

Zitat:

formstyle:=fsstayontop;
Hilft auch nichts. Das Fenster ist dann zwar oben, besitzt aber nicht den Fokus.

Ich wollte zwar keinen größeren Programmumbau machen, weil mein Programm riesig ist, aber falls keiner eine einfache Lösung für dieses Problem hat, dann muss ich wohl.

wolfgang_SV 21. Nov 2010 13:03

AW: Wie Hauptfenster in Vordergrund bringen?
 
versuch es mal so...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
With Application do
   begin
   NormalizeTopMosts;
   MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
   RestoreTopMosts;
   end;
windows.SetForegroundWindow(handle);
end;

DeddyH 21. Nov 2010 13:10

AW: Wie Hauptfenster in Vordergrund bringen?
 
Eine Idee hätte ich auch noch (ungetestet):
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
With Application do
   begin
   NormalizeTopMosts;
   MessageBox('Hello', 'IMPORTANT NOTICE!', MB_OKCANCEL);
   RestoreTopMosts;
   end;
PostMessage(handle,WM_ACTIVATE,WA_CLICKACTIVE,0);
end;

wolfgang_SV 21. Nov 2010 13:17

AW: Wie Hauptfenster in Vordergrund bringen?
 
@DeddyH

deine Lösung geht auch nicht.

setforegroundwindow sagt ja schon genau das, was gewünscht wird.

manchmal sind die Lösungen recht trivial...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
Seite 1 von 3  1 23      

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