![]() |
[D2005 PE] FadeForm
Ich würde gerne eine FadeForm anfertigen.
Also folgender Code bei "OnShow":
Delphi-Quellcode:
und folgender bei "OnClose":
// AlphaBlend runtersetzen
if AlphaBlend then AlphaBlendValue := 5; // Show "ausführen" inherited Show; // Einblenden if AlphaBlend then while AlphaBlendValue < 255 do begin AlphaBlendValue := AlphaBlendValue + 10; Sleep(10); end;
Delphi-Quellcode:
Nun habe ich keine Ahnung wie ich das hinzufüge bzw. ansonsten Code!
// Ausblenden
if AlphaBlend then begin AlphaBlendValue := 255; while AlphaBlendValue > 5 do begin AlphaBlendValue := AlphaBlendValue - 10; Sleep(10); end; end; // Close "ausführen" inherited Close; Gibts da vielleicht Tutorials? PS: Wie schon gesagt: D2005 PE! |
DP-Maintenance
Dieses Thema wurde von "SirThornberry" von "Die Delphi-IDE" nach "Library: VCL / WinForms / Controls" verschoben.
|
DP-Maintenance
Dieses Thema wurde von "Daniel" von "Library: VCL / WinForms / Controls" nach "VCL / WinForms / Controls" verschoben.
|
Re: [D2005 PE] FadeForm
Delphi-Quellcode:
Das sagt schon mal das es nicht in OnShow gehört. Offenbar wurde das ganze von TForm abgeleitet.
inherited Show;
Delphi-Quellcode:
Dann einmal die Klasservervollständigung aufrufen und den Code eintragen.
type
TFadeForm = class (TForm) public procedure show;override; procedure close;override; end; Dann kanst du deine Form von TFadeForm ableiten und des sollte funktionieren. mfg, Björn |
Re: [D2005 PE] FadeForm
Okay.
Erstmal ist die Frage doof gestellt ;) Ich möchte sozusagen eine "Komponente" TFadeForm, die sich ein/ausblenden lässt. Nun habe ich folgenden Code:
Delphi-Quellcode:
Dann die Fragen:
unit UFadeForm;
interface uses Forms; type TFadeForm = class(TForm) private pFadeIn, pFadeOut : Boolean; public procedure Show; procedure Close; published property FadeIn : Boolean read pFadeIn write pFadeIn; property FadeOut : Boolean read pFadeOut write pFadeOut; end; implementation procedure TFadeForm.Show; begin // AlphaBlend runtersetzen if pFadeIn then AlphaBlendValue := 5; // Show "ausführen" inherited Show; // Einblenden if pFadeIn then while AlphaBlendValue < 255 do begin AlphaBlendValue := AlphaBlendValue + 10; Sleep(10); end; end; procedure TFadeForm.Close; begin // Ausblenden if AlphaBlend then begin AlphaBlendValue := 255; while AlphaBlendValue > 5 do begin AlphaBlendValue := AlphaBlendValue - 10; Sleep(10); end; end; // Close "ausführen" inherited Close; end; end. 1. Ist der Code funktionsfähig? 2. Ich habe in der Toolpalette "TForm"! Jetzt möchte ich auch TFadeForm dort haben... Wie geht das? @ override: Was bewirkt das "Override"? |
Re: [D2005 PE] FadeForm
zu 1)
Was spricht dagegen, dass Du es einfach probierst? Dann siehst Du quasi live obs geht oder nicht. |
Re: [D2005 PE] FadeForm
Ich müsste es in ein Projekt packen um es zu kompilieren :D
Und ansonsten kenne ich mich mit dem "Zeusg" ^^ nicht ganz so gut aus... Ich werde das mal in ein Package packen... (versuchen) und dann mal komplieren :D |
Re: [D2005 PE] FadeForm
Hi!
Zu 1) Probiers doch mal zu 2) Schau mal nach RegisterComponent zu Override: Wie der Name sagt, überschreibt es die bisherige Implementierung der Funktion/Prozedur... Ciao Frederic |
Re: [D2005 PE] FadeForm
Zitat:
|
Re: [D2005 PE] FadeForm
Mit
Delphi-Quellcode:
;)
inherited;
|
Re: [D2005 PE] FadeForm
Hi!
Das tust du doch bereits:
Delphi-Quellcode:
Ciao Frederic
inherited
|
Re: [D2005 PE] FadeForm
Liste der Anhänge anzeigen (Anzahl: 1)
Doppelt hält besser ;) Okay danke!
1. Compilieren funzt 2. Siehe Attachement: Da hin möchte ich es haben [edit] @ Override: [Fehler] UFadeForm.pas(14): E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden [Fehler] UFadeForm.pas(15): E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden [/edit] |
Re: [D2005 PE] FadeForm
Nur zum Testen, kannst Du die Unit auch in ein Projekt einbinden und händisch erstellen.
Delphi-Quellcode:
und bezüglich
uses
UFadeForm; procedure Test; var lFadeForm: TFadeForm; begin lFadeForm := TFadeForm.CreateNew(nil); lFadeForm.FadeIn := true; lFadeForm.FadeOut := true; lFadeForm.Show; sleep(10000); lFadeForm.Free; end; [Fehler] UFadeForm.pas(14): E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden [Fehler] UFadeForm.pas(15): E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden überschreibst Du am besten die Methoden DoShow bzw. DoHide, die sind in TCustomForm als Protected deklariert, kannst Du also auch in deiner TFadeForm dort deklarieren (Ich hoffe das hat sich von D7Pro zu D2005PE nicht geändert). |
Re: [D2005 PE] FadeForm
Also ich habe folgenden Quelltext:
Delphi-Quellcode:
program Project1;
uses Forms, UFadeForm in 'Codes\FadeForm\UFadeForm.pas', Unit1 in 'Unit1.pas'; {$R *.res} begin Application.Initialize; Unit1.Test; Application.Run; end.
Delphi-Quellcode:
unit Unit1;
interface uses UFadeForm, SysUtils; procedure Test; implementation procedure Test; var lFadeForm: TFadeForm; begin lFadeForm := TFadeForm.CreateNew(nil); lFadeForm.AlphaBlend := true; lFadeForm.FadeIn := true; lFadeForm.FadeOut := true; lFadeForm.Show; sleep(10000); lFadeForm.Free; end; end.
Delphi-Quellcode:
Also Fehler etc. gibts nicht, nur ist es, wie eine normale Form... "An" und "Aus" ^^
unit UFadeForm;
interface uses SysUtils, Forms; type 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; implementation procedure TFadeForm.DoShow; begin // AlphaBlend runtersetzen if pFadeIn then AlphaBlendValue := 5; // Show "ausführen" inherited Show; // Einblenden if pFadeIn then while AlphaBlendValue < 255 do begin AlphaBlendValue := AlphaBlendValue + 10; Sleep(10); end; end; procedure TFadeForm.DoHide; begin // Ausblenden if pFadeOut then begin AlphaBlendValue := 255; while AlphaBlendValue > 5 do begin AlphaBlendValue := AlphaBlendValue - 10; Sleep(10); end; end; // Close "ausführen" inherited Close; end; end. [edit]is natürlich auch AlphaBlend an :D [/edit] |
Re: [D2005 PE] FadeForm
mach mal
Delphi-Quellcode:
public procedure Show; override; procedure Hide; override; |
Re: [D2005 PE] FadeForm
Zitat:
Und mit Do: Keine Änderung! |
Re: [D2005 PE] FadeForm
Du solltest in den DoShow und DoHide Proceduren auch nicht die Show und Close Proceduren aufrufen, sondern nur die elternmethode DoShow bzw. DoHide.
|
Re: [D2005 PE] FadeForm
Hmmm auch geändert... Tut sich nix :(
|
Re: [D2005 PE] FadeForm
Ausblenden funktioniert so
Delphi-Quellcode:
Beim Einblenden ist es plötzlich da.
procedure TFadeForm.DoHide;
begin // Ausblenden if pFadeOut then begin AlphaBlendValue := 255; while AlphaBlendValue > 5 do begin AlphaBlendValue := AlphaBlendValue - 10; Refresh; Sleep(10); end; end; inherited; end; |
Re: [D2005 PE] FadeForm
Oder man macht das ganze als Komponente
![]() Auch wenn man die Massages Abfragt SHOWWINDOW funktioniert es beim starten nicht. Aber mit dem Timer geht es bei mir. |
Re: [D2005 PE] FadeForm
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 ![]() gleich Sleep(10) und ProcessMessages. |
Re: [D2005 PE] FadeForm
Zitat:
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...) |
Re: [D2005 PE] FadeForm
Also weder ein noch ausblenden funzt :( Schade :(
|
Re: [D2005 PE] FadeForm
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Re: [D2005 PE] FadeForm
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. |
Re: [D2005 PE] FadeForm
Zitat:
Delphi-Quellcode:
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).
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. |
Re: [D2005 PE] FadeForm
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... |
Re: [D2005 PE] FadeForm
Zitat:
Zitat:
|
Re: [D2005 PE] FadeForm
Zitat:
Zitat:
![]() |
Re: [D2005 PE] FadeForm
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz