Thema: Delphi Topmost für Form2

Einzelnen Beitrag anzeigen

Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Topmost für Form2

  Alt 16. Feb 2007, 21:59
Hallo bitsetter.

Zitat von bitsetter:
zu 1. folgendes habe ich getestet, jedenfalls bei mir ging es.
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  ShowWindow(Application.Handle, SW_HIDE);
end;
Das geht bei mir auch. Deshalb habe ich es ja unter "Lösungen" geschrieben.

Zitat von bitsetter:
zu 2.:
ein Fenster ohne Hintergrund erzeugen
Ich weis nicht ob es eine gute Idee ist, aber folgendes funktioniert auch:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  self.Top:= self.Top- self.Height- 30;
end;
Die Idee ist nicht schlecht. Sie hat den Vorteil, dass das Formular NICHT zu sehen und trotzdem für Windows "Visible" ist. Dadurch kann es dann Ereignisse empfangen (z. B. Fokus). Aber auch hier: Das geht bei mir und steht unter "Lösungen".

Zitat von bitsetter:
Du kannst die Form ja auch erst später erstellen:
Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  Unit3 in 'Unit2.pas{Form2};

{$R *.res}

begin
  Application.Initialize;

  //Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);

  Application.Run;
end.
zu 3. also bei mir funktionierte es:
Delphi-Quellcode:
procedure TForm2.FormShow(Sender: TObject);
begin
  SetWindowPos(Form2.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOMOVE);
end;
Dieser dritte Punkt ist der, um den es geht. Bei deinem Vorschlag würde das erste Formular nicht geladen und das zweite würde geladen. Das kann ganz klar NICHT die Lösung sein, weil dann einfach das zweite Form zum ersten gemacht würde. Dennoch danke für den Vorschlag!

In meinem Programm ist es so, dass das erste Formular das eigentliche Mainform ist und entsprechend viel Code enthält. Dieses erste Form ist beim Start unsichtbar (wird später über Klick auf Form2 sichtbar).

Das zweite Form soll nach dem Programmstart gezeigt werden. Es ist mit wenigen Routinen ausgestattet und dient eigentlich nur dem Zeigen und Verstecken der Mainform. Das ist alles in Form2. Lediglich das Topmost-Setzen ist bisher nicht zu bewerkstelligen.

Das erste Formular, so wie in deinem Vorschlag aus dem Erstellen des Projektes herauszunehmen, würde somit Form2 zum ersten Form machen. Somit würde nicht wirklich die ZWEITE Form topmost gesetzt. Du würdes nur die zweite Form zur ersten Form machen und die dann topmost setzen. Und das funktioniert ja sowieso.

Die Frage bleibt: Wie setzt man eine zweite Form topmost?

Guido.
  Mit Zitat antworten Zitat