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
Seite 1 von 2  1 2      
Jumpy

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

Anwendung ausserhalb des Hauptfensters beenden

  Alt 27. Apr 2011, 17:11
Hallo,

bei meiner Anwendung möchte ich, dass sie, wenn sie mit einem Parameter gestartet wird, nur ein bestimmtes Form (eine Eingabemaske) anzeigt, nach schließen der Eingabemaske soll auch das Programm enden. Hintergrund ist, das manche unserer User nicht mit den ganzen Aspekten des Programms verwirrt werden sollen.

Mein Ansatz unten funktioniert soweit, scheint auch die Anwendung wieder zu beenden, aber im Taskmanager sehe ich, dass der Prozess des Programmes noch läuft und muss ihn da killen.
Bei meinem Ansatz stimmt also was nicht, vllt. ist er auch völlig falsch? Wie mach ich es besser?

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;

procedure TMain.FormShow(Sender: TObject);
begin
  if UpperCase(ParamStr(1)) = 'EINGABEthen acBeendenExecute(nil);
end;

procedure TMain.acMeldedaten_EingabeExecute(Sender: TObject);
var
  m:TEingabe; //Das Form mit der Eingabemaske
begin
  m:=Teingabe.Create(self);
  m.Showmodal;
  m.Free;
end;
P.S.: Der Titel stimmt nicht so 100% aber ich wußte nicht, wie ich es sonst nennen sollte?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

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

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
 
#3

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.625 Beiträge
 
Delphi 12 Athens
 
#4

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
 
#5

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.737 Beiträge
 
Delphi 6 Enterprise
 
#6

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
 
#7

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
 
#8

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
Jumpy

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

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 28. Apr 2011, 08:30
@FredlFesl:
Versteh ich das recht, das du das bereits in dem Codeblock des Projekts machst? Kann ich mal versuchen, hab ich noch nie was drin gemacht, hab immer alles schön so gelassen, wie die IDE das erstellt hat. Problem sind da aber auch wieder diese Meta-Objekte, die erstellt werden sollen und z.Zt. noch an der Main-Form hängen.

Vllt. nur zur Erklärung nochmal ausführlicher. Normalerweise startet im Programm die Main-Form. Die ist wenn man so will die Kommandozentrale des Programms, von der aus ich die einzelnen Teile starten kann, quasi das Hauptmenü. Beim Start der Main-Form werden dann halt auch diese (nicht GUI)-Meta-Objekte erzeugt (innerhalb einer Klasse Projekt). Diese enthalten u.a. Datanbank Connections, ein Log Objekt, ..., die dann Anwendungsweit zur Verfügung stehen und melden den Start des Programms in einer DB.
Von der Main-Form aus kann man diverse Dinge starten, u.a. die besagte Eingabemaske.

Für manche User, soll nun aber nur die Eingabemaske zu sehen sein, damit sie nicht verwirrt werden. Trotzdem sollen aber auch die Meta-Objekte erzeugt werden.


So ich werd jetzt mal loslegen eure Anregungen zu probieren und mich dann bei Erfolg melden und bei Mißerfolg sowieso

Edit:
Erfolg, zumindest teiweise. Connor's Post hat mich auf die Idee gebracht, das Hauptfenster nicht unsichtbar (und später wieder sichtbar) zu machen. Ich lass es einfach sichtbar und damit klappt es. Jetzt muss ich es nur noch klein machen oder außerhalb des Screens platzieren und keiner merkt, das es je da war.
Erklärt zwar nicht, wieso es vorher nicht lief, aber erstmal egal. Vllt. lief das alles zu schnell ab und das Fenster war noch nicht sichtbar, als es schon gekillt werden sollte, oder so.

Wenn jemand noch einen Verdacht hat, her damit, will ja was lernen.
Ansonsten: Danke nochmal an alle Helfer.
Ralph

Geändert von Jumpy (28. Apr 2011 um 08:39 Uhr) Grund: Erfolgsmeldung
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Anwendung ausserhalb des Hauptfensters beenden

  Alt 28. Apr 2011, 08:36
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").
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
Antwort Antwort
Seite 1 von 2  1 2      


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 11:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz