![]() |
Flackern des Formulars verhindern
Hallo,
wenn ich mit folgendem Code mein Formular auf "AlwaysOnTop" setze, flackert es kurzzeitig auf:
Delphi-Quellcode:
nun ist mir kürzlich folgende Variante ins Auge gesprungen, bei der das Formular nicht flackert:
if CheckBox1.Checked then
Form1.FormStyle := fsStayOnTop else Form1.FormStyle := fsNormal;
Delphi-Quellcode:
if Checkbox1.Checked then
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE) else SetWindowPos(Handle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE); Nun stehe ich vor dem gleichen (flackerndem) Problem, beim setzen von AlphaBlending. Gibt es hierzu auch eine Variante das Flackern zu umgehen ? Kann mir jemand auserdem noch sagen, woran dies liegt, das es bei einer Anweisung zum flackern kommt, und bei einer anderen nicht ? gruss Christian PS: DoubleBuffered habe ich schon versucht, funktioniert nicht, und da mir die obige (nicht flackernde) Lösung nach nonVCL aussah hab ich auch schon luckie's API-Tutorial durchsucht, leider ohne Erfolg. |
Re: Flackern des Formulars verhindern
|
Re: Flackern des Formulars verhindern
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn ich es aber wie der Tipp beschreibt mache,
Delphi-Quellcode:
so bleiben überesste der "alten" Form zurück.
procedure LockControl(c: TWinControl; bLock: Boolean);
begin if (c = nil) or (c.Handle = 0) then Exit; if bLock then SendMessage(c.Handle, WM_SETREDRAW, 0, 0) else begin SendMessage(c.Handle, WM_SETREDRAW, 1, 0); RedrawWindow(c.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); end; end; procedure TForm1.Button1Click(Sender: TObject); begin LockControl(Form1, True); try Form1.AlphaBlend := true; Form1.AlphaBlendValue := 135; finally LockControl(Form1, False); end; end; [add] Das Formular ohne alpha-blending auf dem Bild exisitiert gar nocht mehr, Windows überzeichnet es nur nicht direkt. |
Re: Flackern des Formulars verhindern
Gibt es denn da wirklich keine andere Möglichkeit ?
gruss |
Re: Flackern des Formulars verhindern
Dann ruf doch mal
![]() |
Re: Flackern des Formulars verhindern
Erst verhindere ich, dass das Fenster neu gezeichnet wird, und anschliesend zwinge ich es dazu sich neuzuzeichnen :gruebel:
Ist dann nicht alles beim alten ? egal, ich werd's mal testen. |
Re: Flackern des Formulars verhindern
Was erwartest du, wenn du du verhinderst, dass das Fenster neu gezeichnet wird? Wie sollen denn dann die Überreste verschwinden? :roll:
|
Re: Flackern des Formulars verhindern
also weder
Delphi-Quellcode:
noch
procedure TForm1.Button1Click(Sender: TObject);
begin LockControl(Form1, True); try Form1.AlphaBlend := true; Form1.AlphaBlendValue := 100; finally LockControl(Form1, False); end; InvalidateRect(Form1.Handle, nil, false); end;
Delphi-Quellcode:
funktioniert :cry:
procedure TForm1.Button1Click(Sender: TObject);
begin LockControl(Form1, True); try Form1.AlphaBlend := true; Form1.AlphaBlendValue := 100; finally LockControl(Form1, False); end; InvalidateRect(Form1.Handle, nil, true); end; so hast du's doch gemeint, oder hab ich da was falsch verstanden ? Zitat:
|
Re: Flackern des Formulars verhindern
Kennt sonst noch jemand eine Möglichkeit ?
Ansonsten werd ich mich wohl mit dem Flackern abfinden müssen bzw. AlphaBlending konstant aktiviert lassen. gruss |
Re: Flackern des Formulars verhindern
doublebuffered:=true;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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