Simply put i would like to open a new form as simply as possible using a button
i looked at this http://www.daniweb.com/forums/thread99518.html# but it confused me
i dont want any values passed on i just simply want it to hide the old form and open then new form can this be done?
And also if its possible a way to on the click of a button exit all parts of a project as im having problems when trying to destroy forms of the actual program still running with nothing to there to use
As I understood: You have a form "A" with a button to open a form"B", and also form "A" must close itself automatically.
First, you need a Application.MainForm always present, it may be a menu, a wellcome splash (make it invisible, don't free it) but anyway you NEED a mainform.
Usually this is the only autocreate form in your app. preferences, no more autocreate forms are needed as you are going to create them by code (delphi tends to autocreate one form of each type, take them out of the autocreate list).
So, the unit "A" should be like this:
1) Add in the unit A uses the unit B.
2) On the buton click, you do like this (or similar):
with TMyFormB.create(Application.MainForm) do
3) Next you must close this form with a self.close;
4) Closing is not the same a freeing, so on MyFormA.OnClose you need to add a line with "Action:= caFree;". With that line, closing a form will really kill it from memory. Ah! Add thisa to all your forms if you what not to keep them on memory after closing them!
I think it is all... it also answer your second question about closing forms.
Thanks for the help i have managed to get the forms to open but i cannot work out how to completely remove it from the memory with the .onclose bit where exactly should i put it? do i create a procedure?
It should be placed on the MyForm.FromClose event, so closing (not being show in the screen) equals freeing the object:
procedure TMyForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:= caFree; end;
The idea is that Creating is the oposite to Freeing the form, but closing is not, closing is the opposite to Showing the form. When user close the form, it is not shown, but it is not freed: You could make it visible again if you had a pointer to the form stored.
I have now got that to work and it does close it but only when i exit with the cross in the top corner, i would like to be able to use a button. i have tried a couple of ways to close the form but none have worked is their an easy way to do this?
If form is modal, just make ModalResult:= mrOK (or place a button of kind=ok, it is allready made in the standard buton properties).
If the form is not modal, just make "close" and that is all.
procedure TForm1.Button1Click(Sender: TObject); begin Visible := False; // Makes Form1 invisible try Form2.ShowModal; // Shows the Form2 finally Visible := True; // Makes Form1 visible again end; end;
If you have a button that should close the form...just add this to it...
Also look into using ActionList and use the execute...you can tie lots of code into one common action.
procedure TForm1.btnCloseClick(Sender: TObject); begin Form1.Close; //this will call your forms FormClose...which will call your caFree. end
i am trying to create a library management system which is supposed to be used to store/keep infp for the library and the library members( book title, author, name and picture for borrower and other stuffs). The app has 6 buttons, delete, save, add,previsous,next, and upload( for upload ...
Im trying to bind my custom vertical scrollbar to datagridview is this possible.. Please help Thnak you..
I have two tables, I will call them first-half and second-half (of the year)
Table: first id jan feb mar apr ----------------------- 2 80 90 70 60 3 50 40 60 30 Table: second id jan feb mar apr ----------------------- 2 50 70 60 90 3 80 60 50 ...