| Autor |
Beitrag |
lexmy3
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mo 12.12.05 16:27
Hey habe mein Programm fast fertig und dann sowas
Habe mehrere Forms die ich mit Visible/Anvisible auf und zumache. Am Ende wird das Prog. mit SaveDialog abgeschlossen.
Jetzt habe ich bemerkt, dass Nach dem Beenden Im Taskmanager unter Prozesse mein Projekt noch läuft. Warum das denn????
Wie komme ich aus diese Lappalie ??
Hat vieleicht einer eine Idee??
Mfg
|
|
Ironwulf
      
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: Mo 12.12.05 16:31
du musst die erste form mit close schließen, also z.b. form1.close
|
|
azubi_20
      
Beiträge: 593
WinXP SP2, Ubuntu 8.4
D7 Enterp., D2005 Prof., Java (Eclipse 3.4.0)
|
Verfasst: Mo 12.12.05 16:35
So kann man auch eine Anwendung beenden :
Delphi-Quelltext
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mo 12.12.05 16:39
Ironwulf hat folgendes geschrieben: | | du musst die erste form mit close schließen, also z.b. form1.close |
Ja aber dan ist doch nur die erste Form geschlossen und ich habe noch 9 andere!!
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 12.12.05 16:45
Wenn die Hauptform eines Programms geschlossen wird, dann werden die anderen automatisch mit geschlossen. Ein Form1.close beendet das komplette Programm (wenn Form1 die Mainform ist).
_________________ We are, we were and will not be.
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mo 12.12.05 16:51
azubi_20 hat folgendes geschrieben: | So kann man auch eine Anwendung beenden :
Delphi-Quelltext |
Hey, ein Guter Anfang!!
Damit klappt es zwar aber nur wenn ich das Prog. bis zum Schluss durchjage.
Was ist wenn ich zwischen der Forms abbreche?
Dann läuft es immer noch im Taskmanager.
Mfg
aus Frankfurt
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 12.12.05 17:05
Irgendwie hast Du was Falsch gemacht:
Du definierst diverse Forms, eines davon ist dein Hauptformular. Das ist sichtbar, sobald Du das Programm startest. Per Definition ist es das erste Formular, das im Hauptprogramm per Application.CreateForm erzeugt wird.
Normalerweise muss man sich überhaupt nicht darum kümmern, wer was wann wo und wieso geschlossen, terminiert etc. wird...
Also denke ich, Du hast dein Hauptprogramm zerballert (Projekts->View Source).
Poste mal
_________________ Na denn, dann. Bis dann, denn.
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Mo 12.12.05 17:31
alzaimar hat folgendes geschrieben: | Irgendwie hast Du was Falsch gemacht:
Du definierst diverse Forms, eines davon ist dein Hauptformular. Das ist sichtbar, sobald Du das Programm startest. Per Definition ist es das erste Formular, das im Hauptprogramm per Application.CreateForm erzeugt wird.
Normalerweise muss man sich überhaupt nicht darum kümmern, wer was wann wo und wieso geschlossen, terminiert etc. wird...
Also denke ich, Du hast dein Hauptprogramm zerballert (Projekts->View Source).
Poste mal |
Nabend,
Ich habe 10 Forms und habe jetzt in jeder Form unter OnClose Procedur mit Form1.Close gesetzt. Doch irgendwie schließt mein 9 Form das 10 mit ab !!??? Ohne auf Close zu klicken!!! Wohlgemerkt
Mfg
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mo 12.12.05 17:37
10 Formulare? Alle auf einmal sichtbar? Aha.
Und welches ist das Hauptformular, also das mit dem Menü etc.? Die Anderen kannst Du öffnen, schliessen, wie's beliebt, aber wenn Du das Hauptformular schliesst, dann wird die Anwendung auch beendet.
Normalerweise ist es doch so:
Hauptformular wird sichtbar. Nun klickst Du irgendwo rauf oder rufst eine Funktion ab (per Menü oder so) und dann wird ein weiteres Fenster sichtbar, z.B. ein Dialog. Hier füllst Du datenfelder aus oder machst sonstwas. Irgendwann klickst Du auf OK oder Abbruch und landest wieder im Hauptformular, wie FireFox, Word, eigentlich *jedes* Programm. WEnn Du dann das Hauptformulat schließt, dann ist eben Schluss...
Was machst Du anders?
Ohne Code o.ä. ist es schwer, da, wie heisst es so schön, meine Glaskugel heute nicht will...
_________________ Na denn, dann. Bis dann, denn.
|
|
r2c2
      
Beiträge: 324
Erhaltene Danke: 2
Linux
|
Verfasst: Mo 12.12.05 18:31
lexmy3 hat folgendes geschrieben: | azubi_20 hat folgendes geschrieben: | So kann man auch eine Anwendung beenden :
Delphi-Quelltext |
Hey, ein Guter Anfang!!
Damit klappt es zwar aber nur wenn ich das Prog. bis zum Schluss durchjage.
Was ist wenn ich zwischen der Forms abbreche?
Dann läuft es immer noch im Taskmanager.
|
Öhm... funktioniert vielleicht, is aber nicht Sinn und Zweck dieser Funktion. Guck mal in die Delphi-Hilfe. Terminate is sowas wie der Not-Aus-Schalter, wenn sonst nix mehr geht...
Machs so, wie das hier schon n paar Mal steht:
Delphi-Quelltext 1: 2: 3:
| Form1.Close; Application.MainForm.Close, |
Ansonsten:
| Zitat: |
Ohne Code o.ä. ist es schwer, da, wie heisst es so schön, meine Glaskugel heute nicht will...
|
dito
mfg
Christian
_________________ Kaum macht man's richtig, schon klappts!
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Di 13.12.05 09:16
Ansonsten:
| Zitat: |
Ohne Code o.ä. ist es schwer, da, wie heisst es so schön, meine Glaskugel heute nicht will...
|
dito
mfg
Christian[/quote]
Moijen Moijen,
Also momentan habe ich es so, dass wenn ich auf WEITER klicke um zum letzten Fenster zu kommen, macht er mir das letzte fenster auch aus. Wenn ich aber die OnClose Prozedur rausmache, macht es wie gewünscht. Aber wenn ich auf close klicke laüft das Prog noch im Taskmanager.
hier mein Quelltext vieleicht wir einer schlau daraus:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127:
| procedure TFormCosts.ButtonWeiterClick(Sender: TObject); var lCounter: Integer; begin RichEditCosts.Lines.Delete(0);
with RichEditCosts do begin SetFocus; SelStart := Length(Text); SelAttributes.Style := [fsBold]; Lines.Add ('9 Costs'#13#10); SelAttributes.Style := SelAttributes.Style-[fsBold]; end; lCounter := 0; while lCounter < CheckListBoxCosts.Items.Count do begin if CheckListBoxCosts.Checked[lCounter] then begin RichEditCosts.Lines.Add (CheckListBoxCosts.Items.Strings[lCounter]); end; inc(lCounter); end; FormCosts.Close; FormFinal.Show;
FormFinal.Report.Lines. Delete(0); FormFinal.Report.Lines.AddStrings (Form1.RichEdit1.Lines );
FormFinal.Report.Lines.Add (#13#10); FormGeneral.RichEditGeneral.SelectAll; FormGeneral.RichEditGeneral.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormSewage.RichEditSewage.SelectAll; FormSewage.RichEditSewage.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormHeating.RichEditHeating.SelectAll; FormHeating.RichEditHeating.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormAir.RichEditAir.SelectAll; FormAir.RichEditAir.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormElectro.RichEditElectro.SelectAll; FormElectro.RichEditElectro.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormLifts.RichEditLifts.SelectAll; FormLifts.RichEditLifts.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormBuilding.RichEditBuilding.SelectAll; FormBuilding.RichEditBuilding.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormDefaults.RichEditDefaults.SelectAll; FormDefaults.RichEditDefaults.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
FormFinal.Report.Lines.Add (#13#10); FormCosts.RichEditCosts.SelectAll; FormCosts.RichEditCosts.CopyToClipBoard; FormFinal.Report.PasteFromClipBoard;
end;
procedure TFormCosts.ButtonClearClick(Sender: TObject); var lCounter: integer; begin for lCounter:=CheckListBoxCosts.Items.Count-1 downto 0 do begin if CheckListBoxCosts.Checked [lCounter] then begin CheckListBoxCosts.Items.Delete (lCounter); end; end; CheckListBoxCosts.Items.SaveToFile ('C:Word\Costs.doc'); CheckListBoxCosts.Items.LoadFromFile ('C:Word\Costs.doc'); EditCosts.Clear; end;
procedure TFormCosts.FormClose(Sender: TObject; var Action: TCloseAction); begin Form1.Close end;
end. |
Mfg
Lexmy3
|
|
chriss1988
      
Beiträge: 389
windows xp prof,home,windows98
delphi5
|
Verfasst: Di 13.12.05 09:23
wenn ich das richtig verstanden hab whast du mehrere formen und du willst alle zusammen beenden oder willst du wenn du auf form 4 bist nur form4 beenden und zu form 3 zurückkehren oder wie
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Di 13.12.05 09:33
chriss1988 hat folgendes geschrieben: | | wenn ich das richtig verstanden hab whast du mehrere formen und du willst alle zusammen beenden oder willst du wenn du auf form 4 bist nur form4 beenden und zu form 3 zurückkehren oder wie |
Moijen,
Habe in jedem Fenster einen WEITER und einen ZURÜCK Buttons um fom Fenster zu Fenster zu springen, doch wenn ich auf einmal das Prog. beenden muss möchte ich es durch klicken auf OnClose =>(X) in jedem Fenster bewerkstelligen.
Darum auch das mit:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TFormCosts.FormClose(Sender: TObject; var Action: TCloseAction); begin Form1.Close end;
end. |
Mfg
Lexmy3
|
|
chriss1988
      
Beiträge: 389
windows xp prof,home,windows98
delphi5
|
Verfasst: Di 13.12.05 09:37
warum machst du es net mit nem button click
Delphi-Quelltext 1: 2: 3:
| procedure TForm2.Button2Click(sender: TObject); form2.close; end; |
und fürs weiter
Delphi-Quelltext 1: 2: 3:
| procedure TForm2.Button2Click(sender: TObject); form3.showmodal; end; |
so funktionierts bei mir
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Di 13.12.05 09:49
[quote=" chriss1988"]warum machst du es net mit nem button click
Ja ich verstehe, doch wenn der Anwender auf Close drückt was dann??? Das muss ich doch auch irgendwie ordentlich beenden lassen.
Frage: Werden durch die Anwendung ShowModal die restlichen Fenster im Hintergrund aufbleiben? Das muss nömlich so sein , denn ich mus durch ZURÜCK Sachen nachkorrigieren könen.
Mfg
|
|
chriss1988
      
Beiträge: 389
windows xp prof,home,windows98
delphi5
|
Verfasst: Di 13.12.05 09:59
hier ma en beispiel
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm2.Button2Click(Sender: TObject); begin form3.showmodal; form3.close; end;
procedure TForm2.Button3Click(Sender: TObject); begin form1.close; form2.close; end; |
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Di 13.12.05 10:22
TForm.ShowModal führt bereits ein Close aus. Das braucht man nicht nochmal explizit
Zum entgültigen Beenden der Anwendung sollte Application.Terminate verwendet werden.
Ein Close-Aufruf in FormClose ergibt keinen Sinn 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
chriss1988
      
Beiträge: 389
windows xp prof,home,windows98
delphi5
|
Verfasst: Di 13.12.05 10:30
warum sinnlos das sin 2 verschiedene button der eine beendet das programm
der andere wechelt nur auf ne andere form
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Di 13.12.05 10:35
BenBE hat folgendes geschrieben: | TForm.ShowModal führt bereits ein Close aus. Das braucht man nicht nochmal explizit
Zum entgültigen Beenden der Anwendung sollte Application.Terminate verwendet werden.
Ein Close-Aufruf in FormClose ergibt keinen Sinn  |
Hallo,
Jetzt bin ich total verirrt habe gerade festgestellt das mit OnClose das Prog. immer Beendet wird. Delphi-Quelltext 1: 2: 3: 4: 5:
| procedure TFormGeneral.FormClose(Sender: TObject; var Action: TCloseAction); begin Application.Terminate end; |
Also das hier macht alles aus
Kann mir einer erklären was jetzt denn dieses OnClose genau bewirkt??!!
Mfg
|
|
lexmy3 
      
Beiträge: 140
WIN 2000 Prof. + Office 2000
Delphi 5 Enterprise
|
Verfasst: Di 13.12.05 12:07
 Habe mein Problem jetzt entdeckt und bin wohl selbst schuld. Die Befehle oben ergeben alle ihren Sinn.
Also alles im Grünnen Bereich
Mfg
from Fraport
|
|