AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anwendung ausserhalb des Hauptfensters beenden

Ein Thema von Jumpy · begonnen am 27. Apr 2011 · letzter Beitrag vom 28. Apr 2011
Antwort Antwort
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#1

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 27. Apr 2011, 17:24
Wie wäre es, wenn du im OnClose-Event der Form einfach Application.Terminate schreibst - und sonst nichts?!
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 27. Apr 2011, 17:26
Rufe Close der Hautform auf.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#3

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 27. Apr 2011, 17:27
Rufe Close der Hautform auf.
Cellulite.Close; SCNR^^
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 27. Apr 2011, 18:17
Rufe Close der Hautform auf.
Cellulite.Close; SCNR^^
Jede zweite Frau würde sich über diese Zeile Code maßlos freuen

Um aber auch was zum Thema beizusteuern: ich würde das ganze etwas anders handhaben und das in etwa so gestalten:

Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas{Form1},
  WindowManager;

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  //
  //
  //Application.CreateForm(TForm1, Form1);
  
  WindowManager := TWindowManager.Create();
  try
    WindowManager.ShowMainForm();
    Application.Run;
  finally
    WindowManager.Free();
  end;
end.
In der Methode WindowManager.ShowMainForm(); würde ich dann je nach Startparameter die passende Form anzeigen.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (27. Apr 2011 um 18:21 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 27. Apr 2011, 22:43
Danke schon mal für die Antworten:

@Luckie:
TMain ist die Hauptform. Im acBeenden steht dann auch nur self.close.

@Deep-Sea:
Application.Terminate kann ich mal versuchen. Muss dazu sagen, dass ich nur das wie ich dachte nötigste gepostet habe. Im OnClose-Event der Main-Form passiert noch einiges (Objekte freigeben usw.) - würde das noch ausgelöst?

@s.h.a.r.k:
Werd ich mal überlegen, doch das bedeutet eine größere Umstellung, da mit dem Start der Hauptform auch noch einige andere Objekte erstellt werden (die wie bereits oben erwähnt daher im OnClose auch dringend wieder geschl. werden müssen), die z.B. das Loging starten, den Programstart in einer DB vermerken usw.

Hab es auch schon so versucht, sprich das Hauptform noch im OnCreate zu killen, ging (logischerweise?) auch nicht.
Delphi-Quellcode:
procedure TMain.FormCreate(Sender: TObject);
begin
   if UpperCase(paramstr(1)) = UpperCase('EINGABE')then
     begin
     self.Visible:=false;
     acMeldedaten_EingabeExecute(nil);
     self.Close;
     end;
end;

Das Hauptform einfach nur wieder sichtbar machen und dann per Hand schließen (X-Button) funktioniert dagegen, sprich das Programm wird rückstandslos beendet.
Delphi-Quellcode:
procedure TMain.FormCreate(Sender: TObject);
begin
   if UpperCase(paramstr(1)) = UpperCase('EINGABE')then
     begin
     self.Visible:=false;
     acMeldedaten_EingabeExecute(nil);
     self.Visible:=true;
     end;
end;
Könnte es sein, dass das programmatische schließen einfach zu schnell ist?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 28. Apr 2011, 05:44
Ein PostMessage(Form1.Handle, WM_CLOSE, 0, 0); käme erst an die Reihe, wenn alles andere korrekt abgearbeitet ist. Dann noch ein caFree im OnClose und das Fenster ist weg vom Fenster. Vllt vor dem (zu vermeidenden) Anzeigen noch ein SetBounds(Screen.Width + 16, 0, 1, 1); ... und keiner hat's gesehen.
Das zur schnellen Lösung des akuten Problems.

Davon abgesehen kann man sich überlegen, wozu das Fenster notwendig ist und wozu nicht. Funktionelle Dinge ohne GUI kannst Du auslagern und einfach aufrufen, eben wie Initialisierungen und Aufräumen. Dann sparst Du Dir das Fenster vllt komplett.

HTH
  Mit Zitat antworten Zitat
FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#7

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 28. Apr 2011, 08:02
Ich hab auch immer wieder Probleme damit. Gehabt. Mittlerweile mach ich das so im Hauptprogramm

Delphi-Quellcode:
Begin
  Application.Initialize;
  If ParamStr(1)='EINGABEThen
    With TEingabeformular.Create(nil) Do Begin
      ShowModal;
      Release;
    End
  Else Begin
    Applicatio.CreateForm(TMainForm, MainForm);
    Application.Run;
  End;
End.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 28. Apr 2011, 09:02
Im OnClose-Event der Main-Form passiert noch einiges (Objekte freigeben usw.) - würde das noch ausgelöst?
Das kommt drauf an, ob die Form vorher angezeigt war (wobei angezeigt hier nicht unbedingt sichtbar heißt, siehe TForm.Hide).
Aber etwas anderes: Wann werden denn die Objekte erzeugt, die du freigeben willst? Im OnCreate? Dann sollten die auch im OnDestroy freigegeben werden. Wenn sie aber im OnShow erzeugt werden, sollte das mit OnClose auch gehen.


Die *.dpr enthält ja auch nur Quellcode. Wenn man weiß, was man tut, kann man sie natürlich bearbeiten (Rechtsklick in der Projektverwaltung auf das Projekt -> "Quelltext anzeigen").
Stimmt. Aber ich habe die Erfahrung gemacht, dass Delphi es zum Teil nicht gerne sieht, wenn man die dpr per Hand bearbeitet und gerne mal selbst geschriebenen Code zerstört. Seit dem halte ich mich eher raus aus der dpr, sofern es denn geht
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.739 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 28. Apr 2011, 09:44
Aber etwas anderes: Wann werden denn die Objekte erzeugt, die du freigeben willst? Im OnCreate? Dann sollten die auch im OnDestroy freigegeben werden. Wenn sie aber im OnShow erzeugt werden, sollte das mit OnClose auch gehen.
Ich glaub dann mach ichs falsch: Die Objekte werden im OnCreate erzeugt und im OnClose wieder freigegeben (action=canone, dann Objekte freigeben, action =cafree). Warum ist das nicht so gut? Ich muss mir das nochmal genau angucken, wann welches Ereignis genutzt werden sollte.

Danke
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz