Delphi 10 i zamiana odtwarzania unitu jako pierwszy

0

Witam.
Po kliknięciu na project1.exe otwiera się zawsze unit1. Zależy mi na tym żeby to unit15 został otworzony pierwszy i dopiero po wciśnięciu na button 1, lub 2 pojawił się unit1 ze zmienionymi ustawieniami (przypisane ustawienia są zależne od wciśniętego buttona).

Tak wygląda Unit15:

unit Unit15;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm15 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form15: TForm15;

implementation

{$R *.dfm}

uses Unit1;

procedure TForm15.Button1Click(Sender: TObject);
begin
Form1.Show;
Form1.Edit14.Text := ('111111111');
Form1.Edit15.Text := ('3333333333');
end;

procedure TForm15.Button2Click(Sender: TObject);
begin
Form1.Show;
Form1.Edit14.Text := ('222222222');
Form1.Edit15.Text := ('44444444444');
end;

end.

Niby wszystko działa, ale po zamknięciu formy 15 zamyka się cała aplikacja, a chcę by mimo wszystko głównym oknem był unit1. Ten może się nawet zamknąć po wciśnięciu buttonu. W chwili obecnej mimo wszystko "Form15.Close" zamyka cały program.

Chyba tutaj coś trzeba zmienić:

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2},
  Unit3 in 'Unit3.pas' {Form3},
  Unit4 in 'Unit4.pas' {Form4},
  Unit5 in 'Unit5.pas' {Form5},
  Unit6 in 'Unit6.pas' {Form6},
  Unit7 in 'Unit7.pas' {Form7},
  Unit8 in 'Unit8.pas',
  Unit9 in 'Unit9.pas',
  Unit10 in 'Unit10.pas',
  Unit11 in 'Unit11.pas' {Form11},
  Unit12 in 'Unit12.pas',
  Unit13 in 'Unit13.pas' {Form13},
  Unit14 in 'Unit14.pas',
  Unit15 in 'Unit15.pas' {Form15};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm15, Form15);
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm7, Form7);
  Application.CreateForm(TForm11, Form11);
  Application.CreateForm(TForm13, Form13);

  Application.Run;
end.
0

Musisz wszystkie formularze tworzyć automatycznie? Wszystkie wyświetlasz jednocześnie na ekranie?

Aby Form1 był głównym formularzem, musi być utworzony jako pierwszy. Jeśli ma on być niewidoczny to spróbuj mu ustawić Visible na False w oknie inspektora obiektów, dla Form15 ustaw na True. W zdarzeniu Form15.OnClose aktualizuj widoczność Form1.

Z tego co widzę, Delphi nie daje możliwości nadania statusu okna głównego, podczas działania programu. Lazarus ma metodę TApplication.UpdateMainForm, a Delphi tylko właściwość TApplication.MainForm, jednak służy ona wyłącznie do odczytu. Tak więc kolejność tworzenia formularzy ma kluczowe znaczenie.

0

A wiesz może jak usunąć unit z projektu? Mam unit4, którego nie potrzebuję a jak go usunąłem to delphi mimo wszystko się go domaga. Usunąłem go w project -> remove from project... no i z folderu.

0

No tak się właśnie usuwa – za pomocą odpowiedniej opcji środowiska.

Jeśli po usunięciu modułu z projektu, jest on nadal potrzebny do kompilacji to znak, że gdzieś w innych modułach używasz go. Sprawdź więc czy w którymś module masz w uses dodany moduł unit4 (również w pliku .dpr) i wywal ten wpis.

0

Jak w form1 ustawi się visible na false to i tak się on uruchamia i jest widoczny :x

0

Ustaw Form1.Visible na False, następnie przypisz False do Application.ShowMainForm w głównym pliku projektu (przed metodami tworzącymi formularze), a po zamknięciu Form15 przywróć na True.

Może w ten sposób zatrybi. W razie czego – Vcl.Forms.TApplication.ShowMainForm.

0

Masz przykład Form4 pojawi się jako pierwsza dopiero po jej zamknięciu Form2 (główna forma):

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Form4.ShowModal;
  Application.Run;
end.

A jak chcesz dodatkowe warunki sprawdzaj co zwraca ShowModal (oprogramuj sobie na tej formie co ma zwracać) i w zależności od tego dalsze akcje.

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