Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [Splashscreen] Zugriffsfehler (https://www.delphipraxis.net/118948-%5Bsplashscreen%5D-zugriffsfehler.html)

BullsEye 18. Aug 2008 13:23


[Splashscreen] Zugriffsfehler
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Leute,
ich habe für mein Programm einen Splashscreen (Ladefenster wie auch immer...) erstellt. Aber wenn ich das Programm ausführe erhalte ich immer einen Zugriffsfehler (s.Anhang)!
Funktionieren tuts trotzdem! Doch hab ich nicht immer lust erst irgendwo auf 'OK' klicken zu müssen um das Programm nutzen zu können.

Delphi-Quellcode:
program DesktopUhr6;

uses
  Forms,
  Main in 'Main.pas' {Form1},
  Einstellungen in 'Einstellungen.pas' {Form2},
  Hilfe in 'Hilfe.pas' {Form3},
  laden in 'laden.pas' {frmLaden};

{$R *.res}

begin
     frmLaden := TfrmLaden.Create(Application);
  try
    frmLaden.Show;
    frmLaden.Refresh;
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
    Application.CreateForm(TForm3, Form3);
  finally
    frmLaden.InitializationDone := True;
  end;
  while frmLaden <> nil do
  Application.ProcessMessages;
  Application.Run;
end.
Vllt ist hier ein Fehler drinne?!


Weiterer Code den ich auf dem Form zum Laden habe:
Delphi-Quellcode:
procedure TfrmLaden.SetInitializationDone(const Value: Boolean);
begin
  FInitializationDone := Value;
  Close;
end;

procedure TfrmLaden.FormCreate(Sender: TObject);
begin
frmLaden.Color := clBlack;
frmLaden.DoubleBuffered := true;
end;

procedure TfrmLaden.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  Close;
end;

procedure TfrmLaden.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := (not Timer1.Enabled) and FInitializationDone;
end;

procedure TfrmLaden.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frmLaden := nil;
end;
UNd auf dem Hauptformular ist folgendes:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Sleep(300);
  frmLaden.Refresh;
end;
Ich hab mal die (unfertige) EXE angehängt, vllt hilft euch das ja auch was.

mirage228 18. Aug 2008 13:49

Re: [Splashscreen] Zugriffsfehler
 
Delphi-Quellcode:
procedure TfrmLaden.FormCreate(Sender: TObject);
begin
 Color := clBlack;
 DoubleBuffered := true;
end;
Versuch mal die "frmLaden"-Angabe im FormCreate wegzulassen. Du solltest in der Klasse nicht auf die globale Variable zurückgreifen sondern wie hier (implizit) auf "Self"!

mfG
mirage228

alias5000 18. Aug 2008 13:57

Re: [Splashscreen] Zugriffsfehler
 
Zitat:

Zitat von BullsEye
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Sleep(300);
  frmLaden.Refresh;
end;

Mit dem Sleep(300) erreichst du vielleicht, dass dein Timer im Splashscreen ein Schließen der Form veranlasst, bevor das finally aufgerufen wird.
Allgemein würde ich versuchen zu vermeiden, diesen Bug abhängig von der Geschwindigkeit zu machen, mit dem die 3 Forms erstellt werden, da dies abhängig von der Rechnergeschwindigkeit ist!

Gruß
alias5000

BullsEye 18. Aug 2008 14:11

Re: [Splashscreen] Zugriffsfehler
 
Zitat:

Zitat von alias5000
Mit dem Sleep(300) erreichst du vielleicht, dass dein Timer im Splashscreen ein Schließen der Form veranlasst, bevor das finally aufgerufen wird.
Allgemein würde ich versuchen zu vermeiden, diesen Bug abhängig von der Geschwindigkeit zu machen, mit dem die 3 Forms erstellt werden, da dies abhängig von der Rechnergeschwindigkeit ist!

Gruß
alias5000

Hm naja es ist eig egal, ob ich da 3000 oder 300 hinmache. Aber wenn ich da 3000 bzw 5000, wie ich es vorher hatte hinschreibe, kommt die "LadeAnimation" nicht zur Geltung. Und den Zugriffsfehler macht es auch nicht weg.

Trotzdem danke!

alias5000 18. Aug 2008 14:13

Re: [Splashscreen] Zugriffsfehler
 
Und wenn du das Sleep(300) wegmachst? Das meinte ich eigentlich...

BullsEye 18. Aug 2008 14:33

Re: [Splashscreen] Zugriffsfehler
 
Zitat:

Zitat von mirage228
Delphi-Quellcode:
procedure TfrmLaden.FormCreate(Sender: TObject);
begin
 Color := clBlack;
 DoubleBuffered := true;
end;
Versuch mal die "frmLaden"-Angabe im FormCreate wegzulassen. Du solltest in der Klasse nicht auf die globale Variable zurückgreifen sondern wie hier (implizit) auf "Self"!

mfG
mirage228

-.-
So einfach ist das also... iwie bin ich in letzter Zeit darauf eingestellt, das alles kompliziert muss ^^

Zitat:

Zitat von alias5000
Und wenn du das Sleep(300) wegmachst? Das meinte ich eigentlich...

Passieren tut da 'nichts' Nur ist der Ladebalken länger da...
Ich habs nu einfach mal ganz weggelassen.
Ich danke euch beiden für die Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:00 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