Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi fade via sleep (https://www.delphipraxis.net/56678-fade-via-sleep.html)

TheAn00bis 9. Nov 2005 17:48


fade via sleep
 
Warum bleibt der gewünschte Einblend-Effekt aus?

Delphi-Quellcode:
procedure TForm1.einblenden;
begin
alphablend:=true;
alphablendvalue:=0;
repeat
  alphablendvalue:=alphablendvalue+3;
  sleep(10);
until alphablendvalue >= 250;
alphablendvalue:=255;
alphablend:=false;
end;
Stattdessen wird nach kurzer Verzögerung das ganze
Fenster eingeblendet.

sakura 9. Nov 2005 17:49

Re: fade via sleep
 
Setze in die Schleife ein Application.ProcessMessages;

...:cat:...

TheAn00bis 9. Nov 2005 17:52

Re: fade via sleep
 
So:

Delphi-Quellcode:
procedure TMainForm.einblenden;
begin
alphablend:=true;
alphablendvalue:=0;
repeat
  alphablendvalue:=alphablendvalue+3;
  Application.ProcessMessages;
  sleep(10);
until alphablendvalue >= 250;
alphablendvalue:=255;
alphablend:=false;
end;
?

Scheint keinen Unterschied zu machen.

moritz 9. Nov 2005 18:10

Re: fade via sleep
 
Wo ist alphablendvalue denn definiert?

TheAn00bis 9. Nov 2005 18:21

Re: fade via sleep
 
"definiert"?

Das ist ein Property von TForm. Wenn ich nur schreibe

Delphi-Quellcode:
procedure Form1.einblenden;
begin
alphablend:=true;
alphablendvalue:=125;
end;
Dann klappt das ja auch wunderbar, aber es soll ja nicht
halb transparent sein, sondern einblenden.

Neutral General 9. Nov 2005 18:26

Re: fade via sleep
 
Delphi-Quellcode:
procedure TForm2.Timer2Timer(Sender: TObject);
begin
if Alphablendvalue < 255 then begin
  inc(Alphablendvalue); //bzw AlphaBlendvalue := AlphaBlendValue + 1;
end;
end;
So etwa hab ichs gemacht...

bzw ich hatte es eigentlich so:

Delphi-Quellcode:
procedure MakeWindowTransparent(Wnd: HWND; Alpha: Byte);
const
  WS_EX_LAYERED = $80000;
  LWA_ALPHA    = $02;
type
  TSetLayeredWindowAttributes = function(const hWnd: HWND; crKey: Integer; bAlpha: Byte; dwFlags: Integer) : Integer; stdcall;
var
  SetLayeredWindowAttributes : TSetLayeredWindowAttributes;
  User32DLL                 : THandle;
begin
  User32DLL := LoadLibrary('User32.dll');
  if User32DLL <> 0 then
  begin
    @SetLayeredWindowAttributes := GetProcAddress(User32DLL, 'SetLayeredWindowAttributes');
    if @SetLayeredWindowAttributes <> nil then
    begin
      SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) or WS_EX_LAYERED);
      SetLayeredWindowAttributes(Wnd, 0, Alpha, LWA_ALPHA);
    end;
  end;
  FreeLibrary(User32DLL);
end;  (* MakeWindowTransparent *)
Aus der CodeLib oder sonstwo aus der DP ^^ und dann:

Delphi-Quellcode:
procedure TForm2.Timer2Timer(Sender: TObject);
begin
if Alpha < 255 then begin
  MakeWindowTransparent(Form1.Handle,Alpha);
  inc(Alpha);
end;
end;

TheAn00bis 9. Nov 2005 18:45

Re: fade via sleep
 
Zitat:

Zitat von Neutral General
Delphi-Quellcode:
procedure TForm2.Timer2Timer(Sender: TObject);
begin
if Alphablendvalue < 255 then begin
  inc(Alphablendvalue); //bzw AlphaBlendvalue := AlphaBlendValue + 1;
end;
end;

Das geht mit "inc"? Hatte ich auch erst,
aber da hat mein Compiler Terror gemacht.

Klar, über einen Timer gehts aber ich halte es für unelegant auf jede Form erst ein Timer
Objekt legen zu müssen.
Außerdem verstehe ich einfach nicht, warum es nicht über sleep funktioniert. Habe es auch
mit der "delay"-Funktion hier aus der Code-Libary versucht - ohne Erfolg.

Khabarakh 9. Nov 2005 19:08

Re: fade via sleep
 
Wenn du die Funktion im OnCreate aufrufst, darfst du dich nicht wundern, warum es nicht funktioniert :wink: . Im OnActivate funktioniert bei mir alles wie erwartet.

TheAn00bis 9. Nov 2005 19:20

Re: fade via sleep
 
Zitat:

Zitat von Khabarakh
Wenn du die Funktion im OnCreate aufrufst, darfst du dich nicht wundern, warum es nicht funktioniert :wink: . Im OnActivate funktioniert bei mir alles wie erwartet.

Wow, daran lag es. Warum darf ich das nicht im onCreate aufrufen?

Neutral General 9. Nov 2005 19:22

Re: fade via sleep
 
Weil die Form da nochnicht fertig ist weil sie erst erstellt wird und es noch nichts zum Alphablenden gibt :mrgreen: Naja genau weiß ichs ehrlichgesagt nicht aber jedenfalls darf man ins OnCreate oder OnShow vonner Form nichts verändern was irgendwie die Sichtbarkeit des Formulars betrifft...


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