Delphi-PRAXiS

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?

mkinzler 19. Jul 2007 21:45

Re: Maximiert
 
Ich wollte nur ausdrücken, daß Alphabelnd keine Farbe hat, sondern der Inhalt des Fensters mit dem Hintergrund "gemischt" wird. Was meinst du mit schwarzen Alphablend?

Störtebeker 19. Jul 2007 21:54

Re: Maximiert
 
vielleicht funzt es schon mit dem schwarzen alphablend, wenn ich den aublitzenden (hellen) desktop verhindere.

ich meine sowas:

GTA IV Trailer

ich meine z.B. das ein- bzw ausblenden des "RATING PANDING" am anfang des trailers.

P.S.: Nicht, das jetzt was missverstanden wird: Ich möchte es für mein Prog. nicht für Internet, ich glaube das funzt ein bisschen anders. Aber wie gesagt, sowas in der art.

mkinzler 19. Jul 2007 22:01

Re: Maximiert
 
Du brauchst halt einen schwarzen Hintergrund (z.B. andere Form dahinter)

Störtebeker 19. Jul 2007 22:08

Re: Maximiert
 
das war ja auch der Vorschlag von "Arbu Man" aber meine Frage kann ich diese Hintergrundform auch nachträglich machen.

P.S.: Die bereits vorhandenen Formen "SplashScreen" und "Loginform" haben einen schwarzen Hintergrund. Nur der Desktop (heller hintergrund) blitzt zwischen beiden Formen kurz auf, wenn die erste Form zur zweiten wechselt.

mkinzler 19. Jul 2007 22:11

Re: Maximiert
 
Du könntest auch das zu Blendende auf eine Panel ablegen:
http://www.delphipraxis.net/internal...ct.php?t=59173

Störtebeker 19. Jul 2007 22:32

Re: Maximiert
 
Vielen Dank, "mKinzler". Sowohl, das alphablend, sowie auch das problem mit dem auflitzenden Desktop ist gelöst. :lol:

Und natürlich auch Thx. an "Arbu Man"

Störtebeker 19. Jul 2007 22:59

Re: Maximiert
 
sry, dass ich doch nochmal stören muss. Desktop blitzt wieder auf. :( Die Komponente, die AlphaBlend anwenden soll, muss auch AlphaBlend im OI haben? Bzw wo muss ich

Delphi-Quellcode:
var
 i: integer;
 begin
  for i := 0 to 255 do begin
    AlphaBlendValue := i;
    AlphaBlend:=true;
    Sleep(1);
    Application.ProcessMessages;
  end;
  end;
anwenden? Form, TransparentesPanel, oder Inhalt des Panels? Und

und als welches "On"-Ereignis?

OnShow??, OnActivate?? (Form)
OnEnter?? (Form, TransparentesPanel, Inhalt des Panels)

mkinzler 20. Jul 2007 06:39

Re: Maximiert
 
hallo pirat. ab zu zu könntest du ruhig mal die Beiträge, die man hier verlinkt richtig Lesen und auch die Suchfunktion des Forums und die OH von Delphi verwenden, und dies nicht andere für dich erledigen lassen. :warn:
Delphi bringt auch einige Beispiele mit.

Störtebeker 20. Jul 2007 11:23

Re: Maximiert
 
Ok. :oops:


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