Przechodzenie między formami

Przechodzenie między formami
0

Witam, mam problem: powiedzmy że mam formę główną, z której odpalam formę drugą, jednocześnie ukrywając tą główną. Chciałbym uzyskać efekt w którym po zamknięciu tej drugiej formy, znów pokazała się ta pierwsza. Czy da się to jakoś zrobić? Próbowałem wielu rzeczy ale efekt zawsze ten sam - po zamknięciu drugiej formatki ta pierwsza jest nadal ukryta, a program działa w tle. POMOCY!

KR
naczytalem sie wlasnie basha i myslalem przez chwile ze maszynaz wymyslil jakas nowa teorie spiskowa - dopiero jak spojrzalem na dzial to dotarlo do mnie o co chodzi
pelsta
  • Rejestracja:około 19 lat
  • Ostatnio:około miesiąc
  • Postów:819
0

Pokaż jak ukrywasz tą główną i jak próbujesz ją znów pokazać.

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

Sprawa jest banalnie prosta przy czym 2 formę najlepiej tworzyć dynamicznie (choć nie jest to konieczne).

W Unit1 (z deklaracją Form1):

Kopiuj
implementation
uses Unit2; //dla Form2
{$R *.dfm}

procedure TForm1.btnShowForm2Click(Sender: TObject); //przykladowo po kliknieciu tego przycisku pojawia sie Form2
begin
  if not Assigned(Form2) then
    Form2:= TForm2.Create(Self);
  Form1.Hide;
  Form2.Show;
end;

w Unit2 (z deklaracją Form1)

Kopiuj
implementation

{$R *.dfm}

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:= caFree;
  Application.MainForm.Show;
end;

procedure TForm2.FormDestroy(Sender: TObject);
begin
  Form2:= nil;
end;

No i albo ręcznie w pliku projektu trzeba usunąć lub wykomentować:

Kopiuj
//Application.CreateForm(TForm2, Form2);

zamiast tego można to zrobić w opcjach projektu w auto-create forms.


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
0

W zasadzie *Application.Mainform.Show; * działa i problem byłby rozwiązany, ale zapomniałem dodać że program będzie miał docelowo 10 form, i chciałbym żeby będąc np. w 5 formie, po naciśnięciu jakiegoś przycisku pojawiła się forma 4, albo 8, czy jakaś inna dowolna forma, a nie główna. Aa, i dodam że dynamiczne tworzenie form raczej nie wchodzi w grę. Dzięki za pomoc!

KA
  • Rejestracja:prawie 20 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Gorlice
0

Jeżeli dobrze rozumiem to trzeba by zapamiętywać która forma wywołała daną formę tak aby po jej zamknięciu pokazało poprzednią czyli robisz sobie dla wszystkich form coś takiego:

Kopiuj
  private
    { Private declarations }
    fLastForm: TForm;
  public
    { Public declarations }
    procedure ShowForm(LastForm: TForm);
  end;

var
  Form1: TForm1;

implementation

uses Unit2, Unit3, Unit4; //dla Form2, Form3, Form4

{$R *.dfm}

procedure TForm1.ShowForm(LastForm: TForm);
begin
  fLastForm:= LastForm;
  if Assigned(fLastForm) then
    fLastForm.Hide;
  Show;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if Assigned(fLastForm) then
    fLastForm.Show;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2.ShowForm(Self); //przyklodowo otwiera Form2
end;

A później otwierasz formy za pomocą publicznej procedury ShowForm której parametrem jest forma wywołująca (ta która będzie pokazana po jej zamknięciu)


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
0

Oo, o to mi chodziło, taki system 'wstecz' i 'dalej'. Wszystko działa jak natura chciała :D Bardzo proste rozwiązanie, nie wiem czemu sam na to nie wpadłem ... Może dlatego że dopiero niedawno zacząłem obiektówkę ;) W każdym razie dzięki serdeczne masz u mnie duże jasne pełne

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:33 minuty
  • Lokalizacja:Tuchów
  • Postów:12175
0
Zełus napisał(a)

Bardzo proste rozwiązanie, nie wiem czemu sam na to nie wpadłem ... Może dlatego że dopiero niedawno zacząłem obiektówkę

To może najpierw poczytaj o tym i poćwicz, a nie leć od razu na forum... Forum służy do pomagania jeśli kandydat posiada stosowną wiedzę a mimo to nie potrafi wskazać błędu;

Poza tym tego typu rzeczy są raczej niewykorzystywane - okno główne programu nie jest ukrywane, a potomny formularz tworzony jest dynamicznie (tak, jak napisał Ci @kAzek) i wywoływany modalnie - zainteresuj się tym;


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.