AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[D2005 PE] FadeForm

Ein Thema von xZise · begonnen am 30. Apr 2006 · letzter Beitrag vom 1. Mai 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#21

Re: [D2005 PE] FadeForm

  Alt 30. Apr 2006, 19:06
Wenn das Programm mit Sleep() schlafen geschickt wird und dann auch kein
Application.ProcessMessages aufgerufen wird, was soll dann passieren ?

Delphi-Quellcode:
if pFadeIn then
    while AlphaBlendValue < 255 do begin
      AlphaBlendValue := AlphaBlendValue + 10;
      Application.ProcessMessages; // <--<<<
      Sleep(10);
    end;

Oder einfach mal hier in der DP nach Hier im Forum suchenDelay suchen, das ersetzt dan
gleich Sleep(10) und ProcessMessages.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#22

Re: [D2005 PE] FadeForm

  Alt 30. Apr 2006, 19:13
Zitat von turboPASCAL:
Wenn das Programm mit Sleep() schlafen geschickt wird und dann auch kein
Application.ProcessMessages aufgerufen wird, was soll dann passieren ?

Delphi-Quellcode:
if pFadeIn then
    while AlphaBlendValue < 255 do begin
      AlphaBlendValue := AlphaBlendValue + 10;
      Application.ProcessMessages; // <--<<<
      Sleep(10);
    end;

Oder einfach mal hier in der DP nach Hier im Forum suchenDelay suchen, das ersetzt dan
gleich Sleep(10) und ProcessMessages.
Leider verwendet diese zwei Delay Varianten, erst wieder ProcessMessages. Das wäre damit also nicht ersetzt.


Und was machen wir jetzt mit dieser Weisheit?

Es geht nämlich auch ohne genauso und eigentlich ist das Ausblenden an sich schon gelöst, siehe meinen Beitrag über Deinem.

Was noch nicht klappt, ist das Einblenden (mit Application.ProcessMessages einfügen ist es nicht getan...)
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#23

Re: [D2005 PE] FadeForm

  Alt 30. Apr 2006, 19:40
Also weder ein noch ausblenden funzt Schade
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: [D2005 PE] FadeForm

  Alt 30. Apr 2006, 20:03
komisch bei mir geht das ausblenden.

Delphi-Quellcode:
unit UFadeForm;

interface

uses
  SysUtils, Forms;

type
  TFadeForm = class(TForm)
  private
    pFadeIn, pFadeOut: Boolean;

  protected
    procedure DoShow; override;
    procedure DoHide; override;
  public

  published
    property FadeIn: Boolean read pFadeIn write pFadeIn;
    property FadeOut: Boolean read pFadeOut write pFadeOut;
  end;

implementation

uses Controls;

procedure TFadeForm.DoShow;
begin
  // Einblenden
  if pFadeIn then
  begin
    inherited;
    AlphaBlendValue := 5;
    while AlphaBlendValue < 255 do
    begin
      AlphaBlendValue := AlphaBlendValue + 10;
      Sleep(10);
    end;
  end
  else
    inherited;
end;

procedure TFadeForm.DoHide;
begin
// Ausblenden
  if pFadeOut then
  begin
    AlphaBlendValue := 255;
    while AlphaBlendValue > 5 do
    begin
      AlphaBlendValue := AlphaBlendValue - 10;
      Sleep(10);
    end;
  end;
  inherited;
end;


end.
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    FFadeForm: TFadeForm;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  FFadeForm.Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FFadeForm := TFadeForm.CreateNew(nil);
  FFadeForm.Visible := false;
  FFadeForm.AlphaBlend := true;
  FFadeForm.FadeIn := true;
  FFadeForm.FadeOut := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   FFadeForm.Hide;
end;

end.
Angehängte Dateien
Dateityp: zip ufadeproj_554.zip (962,0 KB, 8x aufgerufen)
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#25

Re: [D2005 PE] FadeForm

  Alt 30. Apr 2006, 20:21
Oder so:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, Variants, Classes, Graphics, Controls, Forms, StdCtrls;

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

  TFadeForm = class(TForm)
  private
    pFadeIn, pFadeOut : Boolean;
  protected
    procedure DoShow; override;
    procedure DoHide; override;
  published
    property FadeIn : Boolean read pFadeIn write pFadeIn;
    property FadeOut : Boolean read pFadeOut write pFadeOut;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TFadeForm.DoShow;
begin
  // AlphaBlend runtersetzen
  if pFadeIn then
    AlphaBlendValue := 0;

  // Show "ausführen" // <-
  inherited Show; // <-

  ShowWindow(Self.Handle, SW_SHOW); // ein Show erzwingen!

  // Einblenden
  if pFadeIn then
    while AlphaBlendValue < 255 do begin
      AlphaBlendValue := AlphaBlendValue + 5;
      Application.ProcessMessages; // Messages Verarbeiten !
      Sleep(10);
    end;
end;

procedure TFadeForm.DoHide;
begin
// Ausblenden
  if pFadeOut then begin
    AlphaBlendValue := 255;
    while AlphaBlendValue > 5 do begin
      AlphaBlendValue := AlphaBlendValue - 10;
      Application.ProcessMessages; // Messages Verarbeiten !
      Sleep(10);
    end;
  end;

  // Close "ausführen"
  inherited Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lFadeForm: TFadeForm;
begin
  lFadeForm := TFadeForm.CreateNew(nil);

  lFadeForm.Left := (Screen.Width div 2) - ((lFadeForm.Width) div 2 );
  lFadeForm.Top := (Screen.Height div 2) - ((lFadeForm.Height) div 2);

  lFadeForm.AlphaBlend := true;
  lFadeForm.FadeIn := true;
  lFadeForm.FadeOut := true;
  lFadeForm.Show;
  sleep(2000);
  lFadeForm.Hide;
  lFadeForm.Free;
  sleep(500);
end;

end.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: [D2005 PE] FadeForm

  Alt 30. Apr 2006, 21:16
Zitat von turboPASCAL:
Oder so:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, Variants, Classes, Graphics, Controls, Forms, StdCtrls;

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

  TFadeForm = class(TForm)
  private
    pFadeIn, pFadeOut : Boolean;
  protected
    procedure DoShow; override;
    procedure DoHide; override;
  published
    property FadeIn : Boolean read pFadeIn write pFadeIn;
    property FadeOut : Boolean read pFadeOut write pFadeOut;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TFadeForm.DoShow;
begin
  // AlphaBlend runtersetzen
  if pFadeIn then
    AlphaBlendValue := 0;

  // Show "ausführen" // <-
  inherited Show; // <-

  ShowWindow(Self.Handle, SW_SHOW); // ein Show erzwingen!

  // Einblenden
  if pFadeIn then
    while AlphaBlendValue < 255 do begin
      AlphaBlendValue := AlphaBlendValue + 5;
      Application.ProcessMessages; // Messages Verarbeiten !
      Sleep(10);
    end;
end;

procedure TFadeForm.DoHide;
begin
// Ausblenden
  if pFadeOut then begin
    AlphaBlendValue := 255;
    while AlphaBlendValue > 5 do begin
      AlphaBlendValue := AlphaBlendValue - 10;
      Application.ProcessMessages; // Messages Verarbeiten !
      Sleep(10);
    end;
  end;

  // Close "ausführen"
  inherited Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lFadeForm: TFadeForm;
begin
  lFadeForm := TFadeForm.CreateNew(nil);

  lFadeForm.Left := (Screen.Width div 2) - ((lFadeForm.Width) div 2 );
  lFadeForm.Top := (Screen.Height div 2) - ((lFadeForm.Height) div 2);

  lFadeForm.AlphaBlend := true;
  lFadeForm.FadeIn := true;
  lFadeForm.FadeOut := true;
  lFadeForm.Show;
  sleep(2000);
  lFadeForm.Hide;
  lFadeForm.Free;
  sleep(500);
end;

end.
Toll, damit funktionierts bei mir. Das ProcessMessages kann man aber getrost weglassen, nicht wirklich notwendig.

Delphi-Quellcode:
unit UFadeForm;

interface

uses
  SysUtils, Forms;

type
  TFadeForm = class(TForm)
  private
    pFadeIn, pFadeOut: Boolean;

  protected
    procedure DoShow; override;
    procedure DoHide; override;
  public

  published
    property FadeIn: Boolean read pFadeIn write pFadeIn;
    property FadeOut: Boolean read pFadeOut write pFadeOut;
  end;

implementation

uses Controls, Windows;

procedure TFadeForm.DoShow;
begin
  // Einblenden
  ShowWindow(Self.Handle, SW_SHOW); // <--- Das war die Lösung
  if pFadeIn then
  begin
    inherited;
    AlphaBlendValue := 5;
    while AlphaBlendValue < 255 do
    begin
      AlphaBlendValue := AlphaBlendValue + 10;
      Sleep(10);
    end;
  end
  else
    inherited;
end;

procedure TFadeForm.DoHide;
begin
// Ausblenden
  if pFadeOut then
  begin
    AlphaBlendValue := 255;
    while AlphaBlendValue > 5 do
    begin
      AlphaBlendValue := AlphaBlendValue - 10;
      Sleep(10);
    end;
  end;
  inherited;
end;


end.
turboPascal hat dieses ShowWindow(Self.Handle, SW_SHOW); noch ausgeführt, damit klappt das vorzüglich. Wieso muss man das Einblenden anders behandeln, als das ausblenden? Ohne der gewissen Zeile, kommt das Formular nach einer Weile sofort (unabhängig davon ob man ProcessMessages verwendet oder nicht).
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#27

Re: [D2005 PE] FadeForm

  Alt 1. Mai 2006, 07:47
Wenn die Function in eine OnButtonClick verfrachtet wird sollte es auch ohne SchowWindow klappen.
Der Grund liegt darin das die Form (und auch die Unterformen was ja die TFadeForm ist) einfachnoch kein Handle haben.

Was das ProcessMessages Betrift, wenn du die Form nicht nackt darstellen willst sonder noch einen Button oder eine Graphik event. auch eine Animation darauf haben möchtest müssen die Messages verarbeitet werden.

Und immer daran denken das Sleep das gesamte Programm lamlegt, abgesehen Threads in denen das Sleep den nur Thread beeinflusst...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#28

Re: [D2005 PE] FadeForm

  Alt 1. Mai 2006, 09:14
Zitat von turboPASCAL:
Wenn die Function in eine OnButtonClick verfrachtet wird sollte es auch ohne SchowWindow klappen.
Der Grund liegt darin das die Form (und auch die Unterformen was ja die TFadeForm ist) einfachnoch kein Handle haben.
Hm komisch. Ich habe die FadeForm im OnCreate der Hauptform erzeugt und per ClickEvent eines Buttons dann angezeigt. Da müßte dann eigentlich längst ein Handle da gewesen sein. ShowWindow geb ich doch das Handle mit, wie soll das gehen, wenn Sie ja wie Du sagst da noch keines haben?

Zitat von turboPASCAL:
Und immer daran denken das Sleep das gesamte Programm lamlegt, abgesehen Threads in denen das Sleep den nur Thread beeinflusst
Jup, wenn man Nebenläufigkeiten haben möchte, finde ich es besser Threads zu verwenden.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#29

Re: [D2005 PE] FadeForm

  Alt 1. Mai 2006, 09:25
Zitat von turboPASCAL:
Wenn die Function in eine OnButtonClick verfrachtet wird sollte es auch ohne SchowWindow klappen.
Der Grund liegt darin das die Form (und auch die Unterformen was ja die TFadeForm ist) einfachnoch kein Handle haben.

Was das ProcessMessages Betrift, wenn du die Form nicht nackt darstellen willst sonder noch einen Button oder eine Graphik event. auch eine Animation darauf haben möchtest müssen die Messages verarbeitet werden.

Und immer daran denken das Sleep das gesamte Programm lamlegt, abgesehen Threads in denen das Sleep den nur Thread beeinflusst...
Zitat von GuenterS:
Zitat von turboPASCAL:
Wenn die Function in eine OnButtonClick verfrachtet wird sollte es auch ohne SchowWindow klappen.
Der Grund liegt darin das die Form (und auch die Unterformen was ja die TFadeForm ist) einfachnoch kein Handle haben.
Hm komisch. Ich habe die FadeForm im OnCreate der Hauptform erzeugt und per ClickEvent eines Buttons dann angezeigt. Da müßte dann eigentlich längst ein Handle da gewesen sein. ShowWindow geb ich doch das Handle mit, wie soll das gehen, wenn Sie ja wie Du sagst da noch keines haben?

Zitat von turboPASCAL:
Und immer daran denken das Sleep das gesamte Programm lamlegt, abgesehen Threads in denen das Sleep den nur Thread beeinflusst
Jup, wenn man Nebenläufigkeiten haben möchte, finde ich es besser Threads zu verwenden.
Also ich verstehe nur Bahnhof...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#30

Re: [D2005 PE] FadeForm

  Alt 1. Mai 2006, 09:50
Hm.

Habe das ganze jetzt mit dem ProcessMessages, aber noch eine Zustandsvariable eingefügt, so dass nichts anderes mit diesem Formular passieren kann.

Solange ich es "händisch" mit TFadeForm erstelle funktioniert es wie es soll (so wollte es zumindest xZise).

Natürlich wäre es viel schöner, wenn man auch dieses Form in der Delphi IDE designen könnte, also Buttons, etc. hinzufügen.

Deshalb bin ich hergegangen und hab gesagt Neu->Formular. Habe dort ebenfalls die Methoden überschrieben und siehe da, ich kann sie jetzt bei Neu anwählen. Dann habe ich eine neue Form welche von TFadeForm abgeleitet ist, aber leider fehlt diesem wieder die Funktionalität vom Ein- bzw. Ausblenden.

Gibts da einen bestimmten Trick?

Oder wäre es gescheiter das Ein- Ausblenden über eine Procedur zu machen, der man das entsprechende Formular übergibt? (DoShow und DoHide sind ja nichts anderes als die Routinen welche aufgerufen werden, wenn das OnShow bzw. OnHide ereignis eintritt.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 17:55 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