Autor |
Beitrag |
galagher
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 18.11.10 11:48
Hallo!
Ich habe zwei Prozeduren geschrieben, die TForms ein- und ausblenden. Kann vielleicht jemand brauchen!
Ach ja, wenn jemand weiss, wie man das hässliche schwarze "Flackern" in Prozedur FadeFormOut wegen AlphaBlend := True wegbekommt, bitte hier posten!
Ich finde das einfacher als mit einem Timer zu arbeiten oder als das hier: www.delphipraxis.net...lenden-einfaden.html.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| procedure FadeFormIn(aForm: TForm; Slowing: Byte); var i: Integer; bBlend: Boolean; iValue: Byte; begin with aForm do begin Hide; bBlend := Alphablend; iValue := TransparentColorValue;
Alphablend := True; TransparentColorValue := 0;
for i := 0 to 255 do begin AlphablendValue := i; Sleep(Slowing); Refresh; if not Visible then Visible := True; end;
Alphablend := bBlend; TransparentColorValue := iValue; end; end;
procedure FadeFormOut(aForm: TForm; Slowing: Byte; doClose: Boolean); var i: Integer; bBlend: Boolean; iValue: Byte; begin with aForm do begin bBlend := Alphablend; iValue := TransparentColorValue;
TransparentColorValue := 0; Alphablend := True; Update;
for i := 255 downto 0 do begin AlphablendValue := i; Sleep(Slowing); Refresh; end;
Alphablend := bBlend; TransparentColorValue := iValue;
if doClose then Close; end; end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.11.10 12:33
galagher hat folgendes geschrieben : | Ach ja, wenn jemand weiss, wie man das hässliche schwarze "Flackern" in Prozedur FadeFormOut wegen AlphaBlend := True wegbekommt, bitte hier posten! |
Vermutlich liegts am Refresh. Als ich das gemacht habe, hats jedenfalls nicht geflackert.
Ich habe das aber auch non-blocking gemacht, da ich derweil auch gleich vorbereitende Sachen gemacht habe... was ich sinnvoller finde als mit Sleep die Zeit zu vertun. Statt Sleep + Refresh sollte Delay reichen.
|
|
Holg_i
      
Beiträge: 79
|
Verfasst: Do 18.11.10 12:35
Auch immer wieder klasse ist aufzuzeigen ab welcher Delphi Version und ab welcher Windows Version das ganze geht 
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Do 18.11.10 12:57
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 18.11.10 13:33
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: So 21.11.10 14:17
_________________ Salus populi suprema lex esto
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 21.11.10 14:36
Da ist noch zweimal ein Form1 zu viel, so dass du damit ggf. die falsche Instanz des Formulars erwischst. 
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: So 21.11.10 15:24
Vor der repeat-Schleife muss AlphaBlend := True stehen, wenn das nicht bereits im OI eingestellt ist, doch dann wird Form1 wieder kurz schwarz, bevor es ausgeblendet wird.
Und warum nicht in der IE? Geht doch unter Delphi genauso!
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: So 21.11.10 20:39
galagher hat folgendes geschrieben : | Vor der repeat-Schleife muss AlphaBlend := True stehen, wenn das nicht bereits im OI eingestellt ist, doch dann wird Form1 wieder kurz schwarz, bevor es ausgeblendet wird.
Und warum nicht in der IE? Geht doch unter Delphi genauso! |
Weil es mir beim arbeiten/testen in der IDE auf den Keks geht..  Aber bei mir wird die Form weder in der IDE noch als EXE gestartet kurzzeitig schwarz. Und warum sollte man Einstellungen aus dem OI im Programm wiederholen- entweder oder und ich habe eben alle (möglichen) Grundeinstellungen im OI.
@jaenicke: Ja, stimmt. Hatte es nur wie ich meinte der Vollständigkeit halber eingetragen.
_________________ Salus populi suprema lex esto
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: So 21.11.10 20:54
Also ich bekomme ein kurzzeitiges Flackern hin, wenn ich vor einem Programmende eine Abfrage setze in der Form:
if messagebox(application.Handle,'Wirklich beenden?', 'Bestätigung', MB_IconWARNING + MB_yesno) = mryes then.Lasse ich die raus gehts ganz sanft ohen Flackern, probier mal.
_________________ Salus populi suprema lex esto
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Mo 22.11.10 18:23
delphi10 hat folgendes geschrieben : | Weil es mir beim arbeiten/testen in der IDE auf den Keks geht.. |
Ist ein Argument!
delphi10 hat folgendes geschrieben : | Und warum sollte man Einstellungen aus dem OI im Programm wiederholen- entweder oder und ich habe eben alle (möglichen) Grundeinstellungen im OI. |
Ist ebenfalls ein Argument!
delphi10 hat folgendes geschrieben : | Also ich bekomme ein kurzzeitiges Flackern hin, wenn ich vor einem Programmende eine Abfrage setze in der Form:
if messagebox(application.Handle,'Wirklich beenden?', 'Bestätigung', MB_IconWARNING + MB_yesno) = mryes then.Lasse ich die raus gehts ganz sanft ohen Flackern, probier mal. |
Wird immer ganz kurz schwarz, praktisch 1x flackern, vor dem Ausblenden, mit und ohne MessageBox! Wenn ich das erste Refresh rausnehme, wird das Programmfenster sogar deutlich sichtbar schwarz, bevor es ausgeblendet wird:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| for i := 255 downto 0 do begin AlphablendValue := i; Sleep(Slowing); end; |
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Mo 22.11.10 23:57
Ich habe in diesem System eine NVidia 7600GS, wenn ich jetzt mit den Einstellungen "Vertikal Synchronisierung(EIN); Antialiasing(8xS); Transparenz-Aliasing(Multisampling)" jongliere, kriege ich ein Flackern, bzw schwarzschalten einer Form hin. Die Werte in () bewirken ein sanftes IN- Out-Fading ohne Störungen, zumindest bei meiner Karte. Vielleicht guckst Du mal in Deinen Grafikkartentreiber. Nur so ne Idee, klappt ja vielleicht.
_________________ Salus populi suprema lex esto
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 23.11.10 18:38
delphi10 hat folgendes geschrieben : | Vielleicht guckst Du mal in Deinen Grafikkartentreiber. Nur so ne Idee, klappt ja vielleicht. |
Das ändert nichts, es wird immer zuerst schwarz. Aber natürlich nur dann, wenn im OI zunächst Alphablend := False eingestellt ist. Wenn True, flackert auch nichts.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
delphi10
      
Beiträge: 447
Erhaltene Danke: 2
W2K, XP, Vista64, Win7 64
RAD-Studio 2010
|
Verfasst: Di 23.11.10 20:13
Wenn im OI Alphablend = false und in der Procedure auf true gesetzt ist, kann ich das schwarzschalten nachvollziehen. Meine Lösung dafür getestet: Die Zeit zwischen true und der Schleife zum Ausblenden ist zu kurz. Aber da hilft natürlich kein delay oder sowas. Alphablend = true gleich ganz zu Anfang des Programmes einsetzen, hat bei mir die Lösung gebracht. Also zwischen true-setzen und Blendoff max. Zeit hinkriegen.
_________________ Salus populi suprema lex esto
|
|
galagher 
      
Beiträge: 2556
Erhaltene Danke: 45
Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
|
Verfasst: Di 23.11.10 22:14
delphi10 hat folgendes geschrieben : | Alphablend = true gleich ganz zu Anfang des Programmes einsetzen, hat bei mir die Lösung gebracht. |
Das weiss ich, dass das so funktioniert, ich wollte Alphablend := True halt in der Prozedur drin haben, weil es ohne ja nicht ausblendet und man so unabhängig von den Einstellungen im OI ist und das auch nicht extra im Create angeben muss.
_________________ gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
|
|
|