Multiple forms in delphi

后端 未结 3 1494
长情又很酷
长情又很酷 2021-01-01 08:08

In my Delphi Project i want to have a \'Settings\' button that when clicked, opens a second form (i think this is the correct term, i essentially want a new window to open)

3条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-01 08:35

    I usually design the settings form and add a class function execute to it, that changes a record containing fields for the settings like this:

    Tf_MySettings = class(TForm)
      // ...
    private
      procedure SetData(const _Settings: TSettingsRec);
      procedure GetData(out _Settings: TSettingsRec);
    public
      class function Execute(_Owner: TComponent; var _Settings: TSettingsRec): boolean;
    end;
    
    implementation
    
    function Tf_MySettings.Execute(_Owner: TComponent; var _Settings: TSettingsRec): boolean;
    var
      frm: Tf_MySettings;
    begin
      frm := Tf_MySettings.Create(_Owner);
      try
        frm.SetData(_Settings);
        // for this to work, the OK button must have ModalResult=mrOK
        Result := frm.ShowModal = mrOK;
        if Result then
          frm.GetData(_Settings);
      finally
        frm.Free;
      end;
    end;
    
    procedure Tf_MySettings.SetData(const _Settings: TMySettingsRec);
    begin
      ed_Name.Text := _Settings.Name;
      // ...
    end;
    
    procedure Tf_MySettings.GetData(out _Settings: TMySettingsRec);
    begin
      _Settings.Name := ed_Name.Text;
      // ...
    end;
    

    You call it like this:

    if Tf_MySettings.Execute(self, _Settings) then begin
      // settings have been changed
    end;
    

提交回复
热议问题