Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   StartForm schließen!!! (https://www.delphipraxis.net/99993-startform-schliessen.html)

snow 20. Sep 2007 16:53


StartForm schließen!!!
 
Hallo

Ich hab eine Art Startbildschirm geschrieben. der lässt einen Countdown herunterzählen und wenn er Null erreicht wird ein button freigegeben. Beim klick auf den button startet sich ein anderes Fenster. Jetzt möchte ich, dass der Startbildschrim geschlossen wird.

Wie geht dass.

Wenn ich Startbildschirm.close; benutze dann ist alles weg, und der Debugger schaltet sich wieder aus.
Wenn ich Startbildschirm.destroy; benutze dann kreig iche einen Assembler Fehler.
Wenn ich Startbildschirm.deaktivate; benutze dann hab ich das olle startbild auf dem Desktop kleben
Wenn ich Startbildschirm.enable:=false; benutze dann hab ich das selbe wie deaktivate
Wenn ich Startbildschirm.hide; benutze sieht es zwar so aus als würds klappen aber wenn ich dann das Hauptfenster schließe geht der Debugger nicht aus.



Am liebsten würd ich das fenster "wirklich schließen" also keine reste mehr im Ram hinterlassen.

MfG snow

Apollonius 20. Sep 2007 17:00

Re: StartForm schließen!!!
 
Nimm hide und stelle sicher, dass das Hauptfenster mit close geschlossen wird, wenn dein anderes Formular beendet wird (z.B. onClose).

mirage228 20. Sep 2007 17:05

Re: StartForm schließen!!!
 
Hi,

Du musst unter Projekt -> Optionen -> Formular dein eigentliches Hauptformular dort als Hauptformular festlegen!

Ansonsten ist dein Startbildschirm dein Hauptformular und wenn das Hauptformular geschlossen wird, wird auch die Anwendung geschlossen!

mfG
mirage228

snow 20. Sep 2007 17:19

Re: StartForm schließen!!!
 
Gut hab ich probiert.... Das steht jetzt in der projekt.lpr

Delphi-Quellcode:
program MBSS;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { add your units here }, startfensterunit, Hauptanzeige;

begin
  Application.Initialize;
  Application.CreateForm(Thauptfenster, hauptfenster);
  Application.Run;
end.
So aber irgendwie wills noch nicht

:gruebel:

jetzt startet nur noch das hauptfenster. Ich hab zwar probiert im Hauptfenster das startfenster einzubinden, da das hauptfenster aber im startfenster schon eingebunden ist (das startfenster schaltet das hauptfenster frei) Hab ich einen circuit gebaut.


MfG snow

Corpsman 20. Sep 2007 17:26

Re: StartForm schließen!!!
 
Blicke ich das

du willst sagen wir Form1 anzeigen dann schliesen und mit Form2 weiterarbeiten ?


Delphi-Quellcode:

begin
  Application.Initialize;
  Application.CreateForm(Tform1, form1);
  Application.CreateForm(Tform2, form2);
  Application.Run;
end.
So sah das dann mal aus

und das wird dann zu

Delphi-Quellcode:

begin
  Application.Initialize;
  Application.CreateForm(Tform2, form2);
  Application.Run;
end.
Delphi-Quellcode:
Procedure TForm2.create(Sender:Tobject);
begin
  Application.CreateForm(Tform1, form1);
// und dann irgendwann Form1.showmodal
// und nach dem Modalen kannst dann Form1.Destroy oder so aufrufen.
end;
So würde ich es mal Probieren ...

gabneo 20. Sep 2007 17:32

Re: StartForm schließen!!!
 
Hallo,
es gibt zwei verschiedene rangfolgen. Einmal Welche Form deiner Application.mainform entspricht und die rangfolge in denen die Forms Kreiert werden. Das Problem was du einerseits hast ist, das alle Forms vor deiner Mainform geladen werden sollte (project.pas Initialisierungsreinfolge) damit du von deiner Mainform aus darauf zugreifen kannst. Andererseits möchtest du aber nicht das die Mainform vor der "startform" gezeigt wird was im Compiler aber klar so vergegeben ist.
Dieses Problem hat z.b. Tuneup Utilities auch, weswegen Sie (vorsicht subjektive einschätzung) ein Extra Programm vorher laden, den sogenannten "Integrator.exe"

Es gibt 2 Lösungen für dieses Problem:

Die saubere ist die, dass du dasselbe machst wie tuneup. Eine extra exe, die dein Hauptprogramm startet. Wenn deine startexe die funktion eines nag-screens ausfüllen soll, musst du natürlich auch über die komplette palette an sicherheitsmassnahmen nachdenken und diese beachten. Übrigens Button1.enabled:=false ist innerhalb von 20sec gepatcht, sollte also mehrere mechanismen haben...egal.

Die unsaubere ist, das du beim Oncreate deiner Mainform diese auf Visible:=false stellst oder auf mainform.hide gehst und dann deine startform.showmodal; anzeigen lässt.

Ich hoffe das alles so korrekt beschrieben ist^^ , und das es weiterhilft.
greez
gabneo

snow 20. Sep 2007 18:37

Re: StartForm schließen!!!
 
ich habs jetzt mal mit showmodal gemacht. Ich habs in die onreate-procedure vom hauptfenster geschrieben. WEnn ich jetz starte kreig ich

projekt raised exeption class external SigSEGV


wenn ich es in die on show-procedure schreibe dann klappt es. aber wenn ich dann das geöffnete fenster schließe dann geht es gleich wieder auf??


wie behebe ich das?

MfG snow

gabneo 20. Sep 2007 18:56

Re: StartForm schließen!!!
 
Hi,
sorry ich hatte ganz vergessen, das man auf den Canvas eines Objektes nicht zur erstellzeit zugreifen kann, nur vorher und hinterher. Aber das stützt nur meine aussage, probiere lieber die "saubere" Variante!
Ansonsten, hat dieser Code bei mir funktioniert. Ich lasse einen Timer loslaufen, der nach dem erstellen der Form abgelaufen ist und ich somit wieder zugriff auf die Grafischen Eigenschaften der Form habe.

hoffe das hilft.
greez
gabneo

PS: unsaubere lösung:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormShow(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
 form2.show;
 Timer1.Interval:=100;
 Timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled:=false;
 form1.Hide;
end;

end.

Luckie 20. Sep 2007 19:37

Re: StartForm schließen!!!
 
In der Tutorial-Sparte gibt es ein wunderschönes Tutorial zu Splashscreen von sakura.

snow 20. Sep 2007 20:27

Re: StartForm schließen!!!
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich bin am verzweifeln!

Ich hab den Timer mal auf 2000 eingestellt.

hat auch geklapp. 2 sekunden nach dem programmstart öffnet sich mein anderes Fenster.

Bei dem fenster hab ich einen button, der Form2.close; ausführt. Doch es passiert nix


Als ob ich gar nix in das on.click ereigniss geschreiben hätte. Keine fehlermeldung GAR NIX!!


Es ist zum heulen! Warum läufts nicht!!

MfG snow

Delphi-Quellcode:
program MBSS;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { add your units here }, hauptanzeige, startfenstereinheit;

begin
  Application.Initialize;
  Application.CreateForm(THauptfenster, Hauptfenster);
  Application.Run;
end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 Uhr.
Seite 1 von 2  1 2      

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