Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Maximiert (https://www.delphipraxis.net/96176-maximiert.html)

Störtebeker 19. Jul 2007 20:40


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.

arbu man 19. Jul 2007 20:51

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.

Störtebeker 19. Jul 2007 20:57

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:

procedure TForm2.FormShow(Sender: TObject);
begin
AlphaBlend:=255;
end;
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
Delphi-Quellcode:
begin
Sleep(?)
end;
nehme ich da am besten?

mkinzler 19. Jul 2007 21:02

Re: Maximiert
 
Die Eigenschaft .AlphaBlend gibt an ob geblendet wird.
Delphi-Quellcode:
AlphaBlendValue:=255;
AlphaBlend := True;

Störtebeker 19. Jul 2007 21:11

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:
begin
Sleep(?);
end;
nehme ich da am besten?

mkinzler 19. Jul 2007 21:14

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;

arbu man 19. Jul 2007 21:16

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.

Störtebeker 19. Jul 2007 21:28

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?

mkinzler 19. Jul 2007 21:30

Re: Maximiert
 
Alphablend verschmilzt mit dem Hintergrund

Störtebeker 19. Jul 2007 21:38

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.
Seite 1 von 2  1 2      

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