Entwickler-Ecke

Multimedia / Grafik - Paint-Funktion des Form ausschalten?


Sledge_Hammer - Di 28.01.03 15:19
Titel: Paint-Funktion des Form ausschalten?
Moin
Ich hab grad gelesen dass man die Paint-Funktion beim Form ausschalten kann. Könnte man dann nich besser auf den canvas zeichnen, so dass das nicht immer flackert? damti könnte man dann doch auch DoubleBuffered weglassen. oder geht das nicht so einfach wie ich mir das grade denke? Das flackern tritt ja eigentlich immer dann auf, wenn das OnPaint ereignis auftritt.

Dankschön


kampfkoloss23 - Di 28.01.03 17:45

genau so mach ich es immer, soll ich dir die Funktion geben, oder kennst du sie?

Nachteil ist, dass wenn man das repaint der Form verhindert sie beim erstellen ganz durchsichtig ist, natülich nicht die darauf befindlichen Kombos. Ich decke dann die gesamte Form mit einem Image ab, was dem Vorteil hat, das man auf die gesamte Fläche zeichnen usw. kann.

Den Flimmereffekt wird "PERFEKT" abgestellt und douppel buffert hab ich nie aktiviert.

Ich weíß auch nicht, ob das noch andere Nachteile hat, das würd mich auch interesieren, weil ich es halt immer mit dem repaint der FOrm ausstellen mach,


Sledge_Hammer - Di 28.01.03 22:14

Nein, ich kenn die Funktion nicht. Poste mal bitte! Das dann alles durchsichtig ist ist nicht schlimm, man kann doch dann sicher ein rechteck mit der größe der form drübermalen oder sowas.

Danke schonmal.


kampfkoloss23 - Di 28.01.03 23:53

Was heißt Rechteck, man legt einfach ein image über die GesamteForm. Das kann man dann natürlich beliebig einfärben. Ist findig sowieso praktisch, weil du dann überall auf die Form(das Image) Bitmaps ausgeben usw kannst.

Hier die Funktion:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
//Das hier  musst du unter privat declartions im Programmkopf 
//schreiben.

  private
    { Private declarations }
    procedure WMEraseBkgnd(var m: TWMEraseBkgnd); message WM_ERASEBKGND;

...

// Das hier dann einfach zu deinen anderen Procedures

procedure Tform1.WMEraseBkgnd(var m : TWMEraseBkgnd);
begin
  m.Result := LRESULT(False);
end;

//Und schon funkzt das ganze!

An alle die noch ein bißchen mehr Ahnung haben. Gibt es einen wirklichen Nachteil hiervon?? Ich hab noch keinen entdeckt. (Dürfte sogar für delphi leichter zu verwalten sein) Ich mach dafür mal nen eigenen Thread auf.

Moderiert von user profile iconTino: Code-Tags hinzugefügt.