Question

I try to make file manager in Delphi and there is I need to be able create new folders.

So, i got my Main Form and when I press button Create New Folder other form appears where I can type new folder name and confrim or cancel creation.

So I created new form for folder creation and make it invisible.

I made it like this - here I got procedure in Main Form

procedure TfolderFrame.CreateFolder;
begin
  newFolderDialog.Visible:=true;
end;

And here's new folder form

unit FolderDialog;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,fileOperations, StdCtrls;

type
  TnewFolderDialog = class(TForm)
    edtName: TEdit;
    lblName: TLabel;
    btnOK: TButton;
    btnCancel: TButton;
    procedure btnOKClick(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    FolderName:String;
    kindOfAction:char;
    hasUpdated:Boolean;
  end;

var
  newFolderDialog: TnewFolderDialog;

implementation

{$R *.dfm}

procedure TnewFolderDialog.btnOKClick(Sender: TObject);
begin
  FolderName:=edtName.Text;
  if CreateDir(FolderName)
  then begin
    ShowMessage('New folder created!');

  end
  else begin
    ShowMessage('Creation failed. Error : '+ IntToStr(GetLastError));
  end;
  newFolderDialog.edtName.Clear;
  newFolderDialog.Close;
  hasUpdated:=True;
end;

procedure TnewFolderDialog.btnCancelClick(Sender: TObject);
begin
  newFolderDialog.edtName.Clear;
  newFolderDialog.Close;
end;

procedure TnewFolderDialog.FormActivate(Sender: TObject);
begin
  hasUpdated:=false;
end;

end.

The problem is - when TfolderFrame.CreateFolder; called it just make new folder form visible and then procedure ends. But I need to made some other thigs after folder will be created, something like Refresh or stuff.

I've been trying to do it like this:

 procedure TfolderFrame.CreateFolder;
    begin
      newFolderDialog.Visible:=true;
     while not (newFolderDialog.hasUpdated) do begin
       if(newFolderDialog.hasUpdated) then
       RefreshAllStuff;
     end;
    end;

But programm just stuck because of it.

How could I call Refresh procedure in Form1 only after confirming of folder creation in Form2?

Was it helpful?

Solution

Redesign your code to use TForm.ShowModal() instead, eg:

procedure TfolderFrame.CreateFolder;
begin
  if newFolderDialog.ShowModal = mrOk then
    RefreshAllStuff;
end;

procedure TnewFolderDialog.btnOKClick(Sender: TObject);
begin
  FolderName := edtName.Text;
  if CreateDir(FolderName) then
  begin
    ShowMessage('New folder created!');
    ModalResult := mrOk;
  end
  else
    ShowMessage('Creation failed. Error : '+ IntToStr(GetLastError));
end;

procedure TnewFolderDialog.btnCancelClick(Sender: TObject);
begin
  ModalResult =: mrCancel;
end;

procedure TnewFolderDialog.FormShow(Sender: TObject);
begin
  edtName.Clear;
end;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top