Forma podrzędna zawsze na wierzchu

0

Mam taki problem:

Jest aplikacja która wywołuje na drugim ekranie (ten sam komputer) nową formę w prosty sposób:

frmWyjscie.Show;
frmWyjscie.BoundsRect := Screen.Monitors[1].BoundsRect; // znam ID tego drugiego monitora

Forma ta jest oczywiście StayOnTop chociaż to bez znaczenia bo ten monitor służy tylko do wyświetlenia tej formy.
Wszystko działa do czasu aż na formie głównej nie klikniemy w minimalizuj. Oczywiście znika także forma podrzędna.

Wiem, mogę ukryć przycisk Minimize i sprawa załatwiona ale jednak wolałbym żeby można było formę główną zminimalizować, bo jest potrzebna kilka razy na dobę a forma podrzędna niech sobie będzie cały czas.

Jest to w ogóle możliwe?

3

https://stackoverflow.com/questions/60551920/main-form-minimized-while-other-form-maximized — ktoś w komentarzu twierdzi, że wystarczy nadpisać TForm.CreateParams i ustawić WndParent na 0 (dla tego dodatkowego okna). Nie wiem, nie mam jak przetestować, ale może zadziałać.

2

Coś takiego działa w lazarusie:

procedure TForm1.FormActivate(Sender: TObject);
begin
  Application.OnMinimize := @Minimize;
end;

procedure TForm1.Minimize(Sender: TObject);
begin
  inherited;
  if (Form2 <> nil) and Form2.Visible then
    PostMessage(Form2.Handle, WM_SYSCOMMAND, SC_RESTORE, 0);
  Application.OnMinimize := nil;
end;         

minus jest taki, że żeby przywrócić Form1 trzeba 3 razy kliknąć na przycisk na pasku. W rozwiązaniu podanym przez @furious programming nie udaje się przywrócić formatki nadrzędnej, przynajmniej w lazarusie.

0

zrobiłem tak:

procedure CreateParams(var Params: TCreateParams); override;

procedure TwyjscieHD.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.WndParent := 0;
  Params.Style := WS_POPUPWINDOW or WS_CAPTION or WS_CLIPCHILDREN;
end;

też jest malutki minus ale mi to nie przeszkadza.
Wcześniej po zminimalizowaniu programu wystarczyło kliknąć w kafelek programu na pasku zadań i program się od razu podnosił.
Teraz pojawia się miniatura okna głównego i okna formy drugiej. Aby "podnieść" formę główną to trzeba po prostu kliknąć na jej miniaturkę.

0

Skoro jedno okno ma być cały czas widoczne, a drugie nie, to czemu nie zrobisz tak, aby główną formą była ta z dodatkowego ekranu? Wtedy można by bez problemu minimalizować okno z głównego ekranu, bez koniecznosci kombinowania z VCL.

0

zrób 2 oddzielne programy. Pierwszym programem(forma główna) będziesz odpalał drugi program na drugim monitorze(jako forma podrzędna). a w formie pierwszej ustaw w OnClose żeby zamknęło oba programy po przez PostMessage

1 użytkowników online, w tym zalogowanych: 0, gości: 1