![]() |
fade via sleep
Warum bleibt der gewünschte Einblend-Effekt aus?
Delphi-Quellcode:
Stattdessen wird nach kurzer Verzögerung das ganze
procedure TForm1.einblenden;
begin alphablend:=true; alphablendvalue:=0; repeat alphablendvalue:=alphablendvalue+3; sleep(10); until alphablendvalue >= 250; alphablendvalue:=255; alphablend:=false; end; Fenster eingeblendet. |
Re: fade via sleep
Setze in die Schleife ein Application.ProcessMessages;
...:cat:... |
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. |
Re: fade via sleep
Wo ist alphablendvalue denn definiert?
|
Re: fade via sleep
"definiert"?
Das ist ein Property von TForm. Wenn ich nur schreibe
Delphi-Quellcode:
Dann klappt das ja auch wunderbar, aber es soll ja nicht
procedure Form1.einblenden;
begin alphablend:=true; alphablendvalue:=125; end; halb transparent sein, sondern einblenden. |
Re: fade via sleep
Delphi-Quellcode:
So etwa hab ichs gemacht...
procedure TForm2.Timer2Timer(Sender: TObject);
begin if Alphablendvalue < 255 then begin inc(Alphablendvalue); //bzw AlphaBlendvalue := AlphaBlendValue + 1; end; end; bzw ich hatte es eigentlich so:
Delphi-Quellcode:
Aus der CodeLib oder sonstwo aus der DP ^^ und dann:
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 *)
Delphi-Quellcode:
end;
procedure TForm2.Timer2Timer(Sender: TObject);
begin if Alpha < 255 then begin MakeWindowTransparent(Form1.Handle,Alpha); inc(Alpha); end; |
Re: fade via sleep
Zitat:
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. |
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.
|
Re: fade via sleep
Zitat:
|
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 19:53 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 by Thomas Breitkreuz