[Delphi 2009]Druga forma - wyświetlenie

0

Witam :)
Mam banalne, wręcz głupie pytanie. Mam Delphi 2009 i w nim jest chyba wszystko troszkę inaczej... Mianowicie w przycisku chcę zrobić, aby zniknęła forma 1, a pojawiła 2. No to robię:

    Form2.Show;
    Form1.Hide;

I działa, tylko, że tej 2 formy nie widzę na pasku zadań (tu gdzie są nazwy programów [na dole :P]). Gdy ją zamknę - program się nie zamyka (chowa się tylko 2 forma). Więc dalej, kod:

    Form2.ShowModal;
    Form1.Hide;

No i tu już się pojawia program na pasku zadań, jednak nie mogę zamknąć 2 formy, bo 1 forma jest za nią i gdy chcę wyłączyć program, muszę pomniejszyć 2 formę i kliknąć na close w 1. No, a to niestety mi nie pasuje. Próbowałem zamieniać (czyli najpierw chowa się 1 forma, później 2), jednak bez skutku. Próbowałem w 2 formie dać w onClose "Application.Terminate;", jednak to nic nie pomoga... Ma ktoś jakieś pomysły? Chodzi mi tylko o delphi 2009, gdyż w wersji 7 mi wszystko ładnie chodziło :)

0

Spróbuj Halt; w OnClose Form2

0

A co to da? Nic.. Dodałem - dalej to samo.

0

Spróbuj tego:

One side affect to the code introduced in the original article for fixing window animations and previews is that a form beneath another modal form can become visually active if its taskbar button is clicked. Note that this is just a visual discrepancy; you cannot actually interact with anything on the covered form. Max Pyatnitsky brought up this problem on the CodeGear newsgroups, and I thought I'd share a slightly modified version of his solution (this is also now included in the updated sample and compiled executable):

dodaj do private WMActivate i CreateParams

procedure TMainForm.WMActivate(var Message: TWMActivate);
begin
  if (Message.Active = WA_ACTIVE) and not IsWindowEnabled(Handle) then
  begin
    SetActiveWindow(Application.Handle);
    Message.Result := 0;
  end else
    inherited;
end;

procedure TMainForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle and not WS_EX_TOOLWINDOW or
    WS_EX_APPWINDOW;
end;

Thanks to Max Pyatnitsky for his solution to this problem. This passes the activation on to the hidden application form when our form is activated, ensuring any modal forms get focus properly.

0

Nic nie daje. Tak jak pisałeś dałem do private::

procedure WMActivate(var Message: TWMActivate);
procedure CreateParams(var Params: TCreateParams);

I później ten kod niżej, i nic. To samo. Próbowałem dać w formę 1 i formę 2 - nic się nie dzieje, dalej nie mam formy 2 na pasku zadań, gdy ukryję formę 1. Ehh, niby Delphi 2009 i nowsze (powinno być lepsze :P), a tu takie problemy... Ma ktoś inny pomysł?

0

Widze że metody poyższe nie działają, a samo wstawienie do OnShow takiego kodu tęz nie pomaga na to?

  SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW and WS_EX_APPWINDOW);
0

cytujac za pl.comp.lang.delphi

Spróbuj:

procedure TForm.CreateParams(Var params: TCreateParams);
begin
inherited CreateParams( params );
params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
end;

0
olesio napisał(a)

Widze że metody poyższe nie działają, a samo wstawienie do OnShow takiego kodu tęz nie pomaga na to?

  SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW and WS_EX_APPWINDOW);

Dałem to do formy 2 i nie działa.

Maximus Marius napisał(a)

cytujac za pl.comp.lang.delphi

Spróbuj:

procedure TForm.CreateParams(Var params: TCreateParams);
begin
inherited CreateParams( params );
params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
end;

Gdzie to mam wstawić? Dałem gdzieś, i dalej nie pomoga.

Ja nie wiem, to delphi 2009 jest aż tak inne? :-/

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