Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eventhandling problem/ahnungslosigkeit (https://www.delphipraxis.net/184173-eventhandling-problem-ahnungslosigkeit.html)

Lyan 4. Mär 2015 23:03

Delphi-Version: XE7

Eventhandling problem/ahnungslosigkeit
 
Hallo ;)

Delphi-Quellcode:
procedure TFormSplash.OnLoop(sender:TObject);
begin
  //splash screen zu ende
end;

procedure TFormSplash.FormCreate(Sender: TObject);
begin
  //Application.CreateForm(TFormMain, FormMain);
  (ImageSplash.Picture.Graphic as TGIFImage).Animate := True;
  (ImageSplash.Picture.Graphic as TGIFImage).OnLoop := OnLoop;
end;
Ich habe ein animiertes gif als splashscreen das sobald es einmal durchlaufen ist die mainform laden soll.
Ich kenne mich mit eventhandlich in delphi nicht aus, daher bin ich ratlos was daran falsch ist. Kann ich prozeduren so nicht dem event zuweisen?

Danke

baumina 5. Mär 2015 06:55

AW: Eventhandling problem/ahnungslosigkeit
 
Das stimmt schon so. Evtl. hast du oben das hier vergessen:

Delphi-Quellcode:
type
  TFormSplash = class(TForm)
    ...
  private
    procedure OnLoop(sender:TObject);
  end;

himitsu 5. Mär 2015 07:07

AW: Eventhandling problem/ahnungslosigkeit
 
Zitat:

Zitat von Lyan (Beitrag 1292379)
Kann ich prozeduren so nicht dem event zuweisen?

Ja, kann man.

ABER, auch wenn da Property OnLoop deklariert ist, so wird es intern scheinbar niemals aufgerufen ... da kannst'e also lange warten. :stupid:



Bug an Emba melden
und TTimer nehmen (du weißt ja, wie lang das GIF ist)

Sir Rufo 5. Mär 2015 09:56

AW: Eventhandling problem/ahnungslosigkeit
 
Also für eine simple Splash-Form genügt das hier:

Die Projekt-Datei (nichts Auffälliges dort):
Delphi-Quellcode:
program dp_184173;

uses
  Vcl.Forms,
  Form.MyMainForm in 'Form.MyMainForm.pas' {MyMainForm},
  Form.MySplashForm in 'Form.MySplashForm.pas' {MySplashForm};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TMyMainForm, MyMainForm);
  Application.Run;
end.
Die MainForm
Delphi-Quellcode:
unit Form.MyMainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TMyMainForm = class( TForm )
  private

  public
    procedure AfterConstruction; override;

  end;

var
  MyMainForm: TMyMainForm;

implementation

{$R *.dfm}

uses
  Form.MySplashForm;

{ TMyMainForm }

procedure TMyMainForm.AfterConstruction;
var
  LSplash : TMySplashForm;
begin
  inherited;
  // Die MainForm soll NICHT angezeigt werden
  Application.ShowMainForm := False;

  // Eine Splash-Form erzeugen und anzeigen
  LSplash := TMySplashForm.Create( Application );
  LSplash.Show;
end;

end.
Die Splash-Form:
Delphi-Quellcode:
unit Form.MySplashForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMySplashForm = class( TForm )
    Button1: TButton;
    procedure Button1Click( Sender: TObject );
  private
  protected
    procedure DoClose( var Action: TCloseAction ); override;

  public

  end;

var
  MySplashForm: TMySplashForm;

implementation

{$R *.dfm}

procedure TMySplashForm.Button1Click( Sender: TObject );
begin
  Self.Close;
end;

procedure TMySplashForm.DoClose( var Action: TCloseAction );
begin
  // Diese Form-Instanz zerstören
  Action := caFree;

  // Die MainForm sichtbar machen
  Application.MainForm.Visible := True;
  inherited;

end;

end.

Lyan 5. Mär 2015 17:34

AW: Eventhandling problem/ahnungslosigkeit
 
Zitat:

Zitat von himitsu (Beitrag 1292392)
Zitat:

Zitat von Lyan (Beitrag 1292379)
Kann ich prozeduren so nicht dem event zuweisen?

Ja, kann man.

ABER, auch wenn da Property OnLoop deklariert ist, so wird es intern scheinbar niemals aufgerufen ... da kannst'e also lange warten. :stupid:



Bug an Emba melden
und TTimer nehmen (du weißt ja, wie lang das GIF ist)

Ja tatsache :D Ein Glück dass ichs gestern Abend sein gelassen habe mit debugging.

@Sir Rufo:

Ja danke, ist bestimmt hilfreich für Leute die nicht wissen wie man eine Splashform erstellt/handled.
Aber mein Problem bestand ja nicht darin eine Splashfrm zu erstellen sondern mit dem Eventhandling des events "onloop" von TGIFImage.

Aber wie himitsu bereits feststellte: Das event wird intern niemals gecallt, d.h. meine Funktion zum handlen wird auch nie aufgerufen -> Bug.

MfG


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