Maximiert
Ich habe ein Programm, das maximiert startet und einen schwarzen Background hat.
Die erste Form ist ein SplashScreen, die zweite eine "Login"-Form. Beide haben einen schwarzen Hintergrund. Wenn der SplashScrenn nach erfolgreichem Laden zur zweiten Form wechselt, funktioniert das nicht ganz so, wie das mir vorstelle. Zum einen, blitzt zwischen den beiden Formen, kurz der Desktop auf und wie kann ich es realisieren, dass die Formen praktisch seicht eingeblendet werden, wie man das zum Beispiel von "GTA San Andreas" kennt. Also quasi einen Einblendeffekt. |
Re: Maximiert
Nun ich nehme mal an beide Formen gehen ganzen Bildschirm (Titel). Mach doch einfach ein schwarzes Hintergrund Formular. Darauf erstellst du dann den SplashScreen und danach die Login-Form.
Für einen Slide Effekt musst du AlphaBlending benutzen, du setzt AlphaBlendValue auf 0, nach dem Erstellen der Form, also wenn die Form angezeigt wird (OnShow), setzt du in einer Schleife AlphaBlendValue auf 255. In der Schleife ein Sleep nicht vergessen sonst siehst du nichts. |
Re: Maximiert
deinen ersten text zu meinem Problem des aublitzenen desktops verstehe ich nicht ganz, denn ich glaube so wie du es meinst habe ich es gemacht und zu dem zweiten meckert er mit wenn ich OnShow:
Delphi-Quellcode:
eingebe mit >>incompatible types 'boolean' and 'integer'<< und zu dem sleep, muss ich das über AlphaBlend setzen? Ich bin zwar kein Delphi-Neuling, dennoch hbae ich bis jetzt auf Schleifen verzichten können, und habe daher leider nich so den Schimmer, wie ich das in ne Schleife packen könnte. Und welches procedure TForm2.FormShow(Sender: TObject); begin AlphaBlend:=255; end;
Delphi-Quellcode:
nehme ich da am besten?
begin
Sleep(?) end; |
Re: Maximiert
Die Eigenschaft .AlphaBlend gibt an ob geblendet wird.
Delphi-Quellcode:
AlphaBlendValue:=255;
AlphaBlend := True; |
Re: Maximiert
Und zu dem sleep, muss ich das über AlphaBlend setzen? Ich bin zwar kein Delphi-Neuling, dennoch hbae ich bis jetzt auf Schleifen verzichten können, und habe daher leider nich so den Schimmer, wie ich das in ne Schleife packen könnte. Und welches
Delphi-Quellcode:
nehme ich da am besten?
begin
Sleep(?); end; |
Re: Maximiert
Sleep hält das Programm für eine bestimmte Zeit an. Ein Timer wäre besser.
Delphi-Quellcode:
For i := 0 to 255
begin AlphaBlendValue := i; Sleep(100); end; |
Re: Maximiert
Also du erstellst eine kleine Schwarze Form die du anzeigst. Danach erstellst deinen SplashScreen du zeigt diesen auf der ersten Form an. Danach erstellst du deine LoginForm und zeigst auch diese auf der ersten Form an. Somit siehst du denn Desktop nicht mehr.
Zum Alpha Blending: hier mal meine Klasse dazu:
Delphi-Quellcode:
unit uBlendForm;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TBlendForm = class(TForm) private { Private-Deklarationen } FBlendValue: Byte; FFirstShow: Boolean; FBlendTimer: TTimer; FBlendOut: Boolean; procedure TimerProc(Sender: TObject); procedure SetBlendOut(const Value: Boolean); public { Public-Deklarationen } constructor Create(AOwner: TComponent); override; procedure DoClose(var Action: TCloseAction); override; procedure DoShow; override; published property BlendOut: Boolean read FBlendOut write SetBlendOut; end; var BlendForm: TBlendForm; implementation {$R *.dfm} constructor TBlendForm.Create(AOwner: TComponent); begin inherited; FBlendOut := false; FBlendValue := 0; FFirstShow := true; FBlendTimer:= TTimer.Create(Self); FBlendTimer.Enabled := false; FBlendTimer.Interval := 1; FBlendTimer.OnTimer := TimerProc; end; procedure TBlendForm.DoClose(var Action: TCloseAction); var i: integer; begin inherited; if FBlendOut then begin for i := 255 downto 0 do begin AlphaBlendValue := i; Sleep(1); Application.ProcessMessages; end; end; end; procedure TBlendForm.DoShow; begin inherited; if FFirstShow then begin FBlendTimer.Enabled := true; end; end; procedure TBlendForm.SetBlendOut(const Value: Boolean); begin FBlendOut := Value; end; procedure TBlendForm.TimerProc(Sender: TObject); begin if FBlendValue < 255 then begin inc(FBlendValue); if FBlendValue = 255 then begin FBlendTimer.Enabled := false; end; AlphaBlendValue := FBlendValue; end; end; // oder das Ganze in FormActivate // //procedure TBlendForm.FormActivate(Sender: TObject); //var // i: integer; //begin // for i := 0 to 255 do begin // AlphaBlendValue := i; // Sleep(1); // Application.ProcessMessages; // end; //end; end. |
Re: Maximiert
thx. arbu man. hat mir schon weitergeholfen dein text zum AlphaBlend. Jetz noch die Frage, kann man die Farbe des AlphaBlend beeinflussen. Ist ja so ein weißes Alphablend. geht das auch in schwarz?
|
Re: Maximiert
Alphablend verschmilzt mit dem Hintergrund
|
Re: Maximiert
zu deinem Vorschlag wegen des aufblitzenden Desktops:
das mit dieser schwarzen hintergrund form, kann ich das auch nachträglich machen? oder meinst du Frames? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 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