Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Form einblenden andere forms laden und form ausblenden (https://www.delphipraxis.net/50620-form-einblenden-andere-forms-laden-und-form-ausblenden.html)

Christian18 28. Jul 2005 14:48


Form einblenden andere forms laden und form ausblenden
 
Hallo,

wie kann ich bei einem Programm start. eine form über den alpha effekt einblenden lassen? dann sollen alle anderen forms geladen werden. der lade status soll auf einer ProgressBar angezeigt werden und dann soll die form wieder ausgeblendet werden und die haupt form angezeigt werden. wie kann ich das machen???

MFG Christian18

Ultimator 28. Jul 2005 14:51

Re: Form einblenden andere forms laden und form ausblenden
 
Meinst du sowas, wie in Sakuras Splahsscreen-Tutorial hier in der DP?
Mussts halt nur in ner Schleife und dem Alphawert einblenden lassen.

Christian18 28. Jul 2005 14:58

Re: Form einblenden andere forms laden und form ausblenden
 
Zitat:

Zitat von Ultimator
Meinst du sowas, wie in Sakuras Splahsscreen-Tutorial hier in der DP?
Mussts halt nur in ner Schleife und dem Alphawert einblenden lassen.

ja so ähnlich bloß das die erste form eingeblendet wird, dann soll die anderen forms geladen werden und dann soll die lade forn wieder ausgeblendet werden und die haupt form angezeigt werden.

BlackJack 28. Jul 2005 15:02

Re: Form einblenden andere forms laden und form ausblenden
 
du gibst an dass als erstes nur der splashscreen angezeigt wird. ist dieser fertig reingeblendet, zeigtst du die anderen forms mit Form.Show an, und dann blendest du den splashscreen wieder aus. wenn er dann ganz ausgeblendet ist schliesst du die splashscreen-form.
ach ja wenn der splashscreen die anderen forms überlagern soll stell z.b. fsStayOnTop beim FormStyle des Splashscreens ein.

MaBuSE 28. Jul 2005 16:01

Re: Form einblenden andere forms laden und form ausblenden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Christian18
ja so ähnlich bloß das die erste form eingeblendet wird, dann soll die anderen forms geladen werden und dann soll die lade forn wieder ausgeblendet werden und die haupt form angezeigt werden.

Ich habe mal schnell was gebastelt (ohne sakuras Tutorial als Grundlage, es geht ja nur um das Alphablending)

(Beispiel als *.zip im Anhang)

Delphi-Quellcode:
program Project1;
////////////////////////////////////////////////////////////////////////////////
// Splash Beispiel mit Alphablending (Ein- und Ausblenden)
// written in 2005 by MaBuSE for [url]www.delphipraxis.net[/url]
////////////////////////////////////////////////////////////////////////////////
uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1}, // Hauptformular
  Unit2 in 'Unit2.pas' {Form2}, // Dummyformular ohne Funktion
  Unit3 in 'Unit3.pas' {Form3}; // Splash

{$R *.res}

begin
  Application.Initialize;
  Form3 := TForm3.Create(nil);
  Form3.Show;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Delphi-Quellcode:
unit Unit1;
////////////////////////////////////////////////////////////////////////////////
// Splash Beispiel mit Alphablending (Ein- und Ausblenden)
// written in 2005 by MaBuSE for [url]www.delphipraxis.net[/url]
////////////////////////////////////////////////////////////////////////////////
interface

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

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

var
  Form1: TForm1;

implementation

uses unit3;

{$R *.dfm}

{$J+}
procedure TForm1.FormActivate(Sender: TObject);
const
  FirstTime: Boolean = True;
begin
  // Wenn Hautformular sichtbar (also nach Application.Run in *.dpr)
  // Splash wieder ausblenden und aus Speicher entfernen
  if FirstTime then
  begin
    FirstTime := False;
    Form3.Close;
  end;
end;
{$J-}

end.
Delphi-Quellcode:
unit Unit3;
////////////////////////////////////////////////////////////////////////////////
// Splash Beispiel mit Alphablending (Ein- und Ausblenden)
// written in 2005 by MaBuSE for [url]www.delphipraxis.net[/url]
////////////////////////////////////////////////////////////////////////////////
interface

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

type
  TForm3 = class(TForm)
    Shape1: TShape; // optisch, keine Funktion
    Label1: TLabel; // optisch, keine Funktion
    procedure FormShow(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  // Wird beim Create aufgerufen
  BorderStyle := bsNone;
  FormStyle := fsStayOnTop;
  Position := poMainFormCenter;
  Color := clRed; // :-)
end;

procedure TForm3.FormShow(Sender: TObject);
begin
  // Wird beim Show aufgerufen, aber Form ist noch nicht sichtbar
  Form3.AlphaBlendValue := 0;
  Form3.AlphaBlend := true; // Form ist nun trasparent (=unsichtbar)
end;

procedure TForm3.FormActivate(Sender: TObject);
var
  i: Integer;
begin
  // wird aufgerufen, wenn Form auf dem Schirm "sichtbar" ist. (ist ja noch transparent)

  // In Schleife einblenden
  for i := 0 to 255 do
  begin
    Form3.AlphaBlendValue := i;
    Application.ProcessMessages;
  end;
  sleep(500); // eine halbe Sek. warten (kann natürlich entfernt werden)
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: Integer;
begin
  // Wenn Form geschlossen wird, ausblenden und "Self.Free" machen
  for i := 255 downto 0 do
  begin
    Form3.AlphaBlendValue := i;
    Application.ProcessMessages;
  end;
  Action := caFree;
end;

end.

Christian18 29. Jul 2005 09:06

Re: Form einblenden andere forms laden und form ausblenden
 
Hallo,

ich habe es mal versucht in mein Programm einzubinden. Leider funktioniert es nicht. ich schicke einfach mal den Quellcode.


Delphi-Quellcode:
unit ULoad;

interface

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

type
  TFLoad = class(TForm)
    Image1: TImage;
    ProgressBar1: TProgressBar;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  FLoad: TFLoad;

implementation

{$R *.dfm}

procedure TFLoad.FormActivate(Sender: TObject);
  var i : Integer; // Schleifenvariable
begin
  for i:=0 to 25 do
    begin
      FLoad.AlphaBlendValue:=i * 10;
      Application.ProcessMessages;
    end;
end;

procedure TFLoad.FormClose(Sender: TObject; var Action: TCloseAction);
  var i : Integer; // Schleifenvariable
begin
  for i:=0 to 25 do
    begin
      FLoad.AlphaBlendValue:=255 - i * 10;
      Application.ProcessMessages;
    end;
end;

end.


program Test;

uses
  Forms,SysUtils,
...


...

{$R *.res}

begin
  Application.Initialize;
  Application.Title:='GM-Praxis2005';
  with TFLoad.Create(nil) do try
    ProgressBar1.Max:=4;

    Application.CreateForm(TFAnmeldung, FAnmeldung);

    Application.CreateForm(TFMain, FMain);

    Application.CreateForm(TDM, DM);

    Application.CreateForm(TFPatEdit, FPatEdit);
  finally
    Free;
  end;
  Application.Run;
end.

Es kommt ein Fehler:

Dieser hier:

[Fehler]
Zugriffsverletzung bei Adresse 00467D88 in Modul 'Test.exe'. Lesen von Adresse 000002E1.
[/Fehler]

Sidorion 29. Jul 2005 09:55

Re: Form einblenden andere forms laden und form ausblenden
 
Da der J-Schalter nur noch da ist, um wirklich beinalten code (object pascal u.ä.) übersetzen zu können, solltest du aber das FirstShow in den private teil deiner Form schieben und im Constructor auf true setzten.
Das hat ausserdem noch den Vorteil, dass du von überall her zugreifen kannst, um festzustellen, ob die Form schonmal gezeigt wurde.
Generell sollte man sowieso vermeiden, compilerschalter im code zu setzen.
Zitat:

Die Direktive $J legt fest, ob typisierte Konstanten geändert werden können. Im Status {$J+} ist diese Änderung möglich. Typisierte Konstanten sind in diesem Fall mit initialisierten Variablen vergleichbar. Im Status {$J-} sind typisierte Konstanten tatsächlich konstant. Jeder Versuch, sie zu ändern, führt zu einer Fehlermeldung durch den Compiler.
In früheren Versionen von Delphi und Borland Pascal konnten typisierte Konstanten immer geändert werden (wie im Status {$J+}). Deshalb muß älterer Quelltext, der änderbare typisierte Konstanten enthält, im Status {$J+} compiliert werden. Bei neuen Anwendungen sollten Sie aber initialisierte Variablen und den Status {$J-} verwenden.

MaBuSE 29. Jul 2005 10:53

Re: Form einblenden andere forms laden und form ausblenden
 
Zitat:

Zitat von Sidorion
Da der J-Schalter nur noch da ist, um wirklich beinalten code übersetzen zu können, ...Generell sollte man sowieso vermeiden, compilerschalter im code zu setzen.

Ich gebe Dir in dem Punkt Recht, das der J-Schalter nicht benutzt werde sollte.
(Ich habe es auch "Macht der Gewohnheit" benutzt.)

Ich gebe Dir nicht Recht was Compiler Schalter im Source angeht.
Wir haben hier ein Team von ca. 40 Delphi Entwicklern. Die Programme werden direkt über ReleaseLabel aus der Versionskontrolle genommen und von einem build Server übersetzt.
Der Build Server ignoriert die *.dof und *.cfg Dateien und benutzt die Firmen Vorgaben der Compilerschalter. Die einzige Möglichkeit als Programmierer Einfluss darauf zu nehmen ist ein gezieltes Setzen im Quellcode. Dazu sind die Schalter ja schliesslich da!
Man sollte Sie allerding nur Benutzen wenn man auch weiß was man da tut.
Ein [Strg+O][Strg+O] (Das ist ein o, keine Null) um Die kompletten Schalter am Dateianfang einzufügen ist nicht empfehlenswert.
Ich denke da nur an den Schalter {$I+} oder {$I-} diese machen nur im Quelltext Sinn.
oder bedingte Compilierung:
Delphi-Quellcode:
{$IFDEF BLABLA}machwas;{$ENDIF}
oder:
Delphi-Quellcode:
{$Message Hint 'Füttere die Katzen'}
Da das Compilerschalter Thema hier offtopic ist, können wir gerne für weitere Diskussion einen neuen Thread zu diesem Thema "Compilerschalter im Quelltext?" öffnen.

MaBuSE 29. Jul 2005 10:55

Re: Form einblenden andere forms laden und form ausblenden
 
Zitat:

Zitat von Christian18
Es kommt ein Fehler:
Dieser hier:
[Fehler]
Zugriffsverletzung bei Adresse 00467D88 in Modul 'Test.exe'. Lesen von Adresse 000002E1.
[/Fehler]

Debugge mal und sag mir an welcher Stelle der Fehler auftritt.
(Beim Free? Wird das OnClose Ereignis noch abgearbeitet? , ...)


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