AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Doublebuffered im WM_NCPAINT

Ein Thema von Gruber_Hans_12345 · begonnen am 7. Mai 2005 · letzter Beitrag vom 7. Mai 2005
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#1

Doublebuffered im WM_NCPAINT

  Alt 7. Mai 2005, 11:19
Ich zeichne im WM_NCPAINT meinen eigenen Border samt Caption Bereich.
Ist es eigentlich sinnvoll, dafür auch Dobulebufferd (natürlich selbstgeschreiben, da ja das Standard Doublebuffered hier nicht greifen würde) zu verwenden ?
Der Rahmen hat eine Briete von 4 Pixeln und oben von 24 Pixeln, es sind chon etwas aufwendige Effekte dabei, das es sich auszahlen könnte, aber wie sollte das Bitmap dann aussehen, wie der Bereich, wo später dann mit WM_PAINT gzeiechnet wird, damit das nicht zu flackern anfängt ?

Gibt es eigentlich eine Message, die ein neues WM_NCPAINT aufruft, für ein WM_PAINT brauche ich ja nur ein Invalidate. Und ein Invalidate ignoriert ja das WM_NCPAINT.
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von BenBE
BenBE

Registriert seit: 3. Apr 2005
Ort: Jahnsdorf
48 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: Doublebuffered im WM_NCPAINT

  Alt 7. Mai 2005, 14:10
Die Art, wie der Bereich des NCPaint aussieht, ist in der Region des übergebenen DCs festgelegt. Frag einfach die Dimensionen dieses Canvas ab und richte dein DoubleBuffer-Bitmap entsprechend ein.

Das NCPaint kannnst Du über SendMessage realisieren. Du bist dann aber auch für die Parameter der Message verantwortlich. Nativ gibt es aber dafür keine Prozedure.
Benny Baumann
Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Doublebuffered im WM_NCPAINT

  Alt 7. Mai 2005, 15:01
Zitat von BenBE:
Die Art, wie der Bereich des NCPaint aussieht, ist in der Region des übergebenen DCs festgelegt. Frag einfach die Dimensionen dieses Canvas ab und richte dein DoubleBuffer-Bitmap entsprechend ein.
Das weiß ich, aber ist es klug ein Bitmap mit 1500*1100 Pixel zu erzeugen, wo eigentlich 1492*1072 Pixel nicht verwendet werden, da diese ja dann im WM_Paint vom Formular selbst gezeichnet werden.
Bzw. wird es da nicht flackern ?

Ich überlege, ob ich nicht für jeden Rand (also 4 mal ) ein eigenes Bitmap verwende ....
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#4

Re: Doublebuffered im WM_NCPAINT

  Alt 7. Mai 2005, 17:12
Nur nebenbei: du beachtest aber, daß die Dimensionen komplett systemabhängig sind?! Du mußt dazu die Dimensionen jeweils vom System ermitteln. Also mit 4px hier und Xpx da hast du vielleicht auf deinem System ein Ergebnis, aber wenn wir schonmal sowas wie XP vs. 2000 vs. 95 betrachten, dann merkt man, daß es da Unterschiede gibt.
Selbst auf einem System kann ein Benutzer theoretisch sehbehindert sein und sich deshalb für ein anderes Format und andere Färbung entschieden haben. Wenn deine Anwendung also irgendwann den Entwicklerrechner verläßt (also nicht nur ein Prototyp bleibt), solltest du all das beachtet haben.

Nachtrag: Wenn der Rand nix sonderlich extravagantes ist, sondern ein gleichmäßiges Muster, kannst du mit verschobenen Blits das ganze in einer Schleife über die Länge hinkopieren. Es wird ja nicht immer bei dieser Größe der Anwendung bleiben. Theoretisch kann der Bildschirm auch mal aus heutiger Sicht überdimensional groß sein, oder eben kleiner. Programmieren ist eben die Kunst etwas zu verallgemeinern um es danach wieder auf Spezialfälle herunterzubrechen.
  Mit Zitat antworten Zitat
Benutzerbild von BenBE
BenBE

Registriert seit: 3. Apr 2005
Ort: Jahnsdorf
48 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: Doublebuffered im WM_NCPAINT

  Alt 7. Mai 2005, 19:26
2MB haben einem heutigen System doch nicht mehr an

Ne, mal im Ernst: GetSystemMetrics nutzen und auslesen und für Teilbereiche den DoubleBuffer erzeugen\Resizen nach abschluss eines Bereichs.
Benny Baumann
Je komplexer das System, desto kleiner die Fehler; je kleiner die Fehler, desto häufiger ihr Auftreten!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:45 Uhr.
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