Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Paint Message abfangen/Herkunft finden (https://www.delphipraxis.net/159577-paint-message-abfangen-herkunft-finden.html)

himitsu 4. Apr 2011 08:39

AW: Paint Message abfangen/Herkunft finden
 
So schwer sollte eine schnelle Änderung nicht sein.
- an der Stelle, wo gezeichnet wird, leitest du alles in ein Bitmap.Canvas um
- ans Ende der Zeichenroutine(n) hängst du noch ein Repaint deiner Anzeige
- ins WM_PAINT/OnRepaint kommt nun nur noch das Ausgeben dieses Bitmaps rein und fertig
= Problem beseitigt und ein mehrfaches Repaint stört nicht mehr, bzw. kaum noch

alfold 4. Apr 2011 11:30

AW: Paint Message abfangen/Herkunft finden
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1092710)
...Habe hier fremden Code und es passiert ein unerwünschtes Zeichnen der Form. Eigentlich ist alles fertiggezeichnet und es wird eine Usereingabe erwartet, aber auf einmal passiert besagtes WM_PAINT...

sieht ja so aus als wenn es keine standard Komponente ist! oder wie soll man das verstehen? Eine Form für Usereingaben, da kann ja im allg nicht besonderes als code sein!!??

Zitat:

Zitat von ConnorMcLeod (Beitrag 1092772)
..Es kommt einfach eine zweite WM_PAINT Message daher.
d.h. das Fenster wird gezeichnet, dann nocheinmal. Beim zweitenmal wird es falsch gezeichnet, weil die Logik, die z.B. die Farben berechnet, nicht dafür ausgelegt ist, dass die Berechnung zweimal hintereinander erfolgt (wie gesagt ... nicht mein Code ;-) )...

Kann es sein das da evtl noch ein 'Applikation.Processmessage' drin ist?

Zitat:

Zitat von ConnorMcLeod (Beitrag 1092800)
Ich weiss, wer malt und ich weiss, wie gemalt wird; ich weiss aber leider nicht, warum gemalt wird ...

Gemahlt wird aber nur mit Images oder halt mit graphic Komponenten. Standard Komponenten machen das selbst! Darum wundere ich mich über diese Aussage.

Zitat:

Zitat von ConnorMcLeod (Beitrag 1092847)
..Ich habe gefragt, wie schaffe ich *X* und bekomme als Antwort: mach lieber *Y*. Das ist zwar nett gemeint, aber keine wirkliche Hilfe.

Seit der Umstellung (von D7) auf D2010 ist Einiges anders und ein Tail davon beeinflusst scheinbar dieses Verhalten.

Meine Frage: wie kann ich feststellen, von welchem Code das Windows dazu veranlasst wird, ein WM_PAINT zu senden?

in dem Du mal ein Haltpunkt setzt und dann step by step durch gehst und Dir den Code richtig anschaust!

Ansonsten kann ich Dir nur empfehlen mal 2Bilder an Deinem ersten Post ranzuhängen damit wir sehen was Du meinst! Noch besser ist natürlich der Code für das sogenannte EingabeFenster um das es ja hier geht! Oder treten diese Fehler in Deinem ganzen Projekt auf!?

alfold

ConnorMcLeod 4. Apr 2011 13:02

AW: Paint Message abfangen/Herkunft finden
 
Danke für Euer Mitgefühl ;-)
Ich sehe, dass ich zuwenig Info gegeben habe...

Es handelt sich um ein MDIChild, in dem Labels, DBEdits und DBGrids sind. Alles abgeleitete Versionen mit zusätzlicher firmeneigener Funktionalität. Um das DbGrid geht es und hier passieren kranke Dinge, die leider dzt unumgänglich sind. Und die u.A. pro Zelle(!) die DB um einen Status befragen, der die Farbe beeinflusst. Bitte nicht lachen, mit ist bereits schlecht, ok?

Ein Buffer-Bitmap scheidet hiermit leider aus, weil im Grid auch gescrollt wird.

Die Idee mit ProcessMessages ist gut, das seh ich mir an. Weil ich ProcessMessages um jeden Preis vermeide, habe ich nicht daran gedacht.

Gesteppt habe ich schon, danke für den Tip, sowas mach ich meistens als Erstes.

Die Gesamtheit der Antworten hat mir eine Richtung gezeigt, ich schätze, dass der Datensatzzeiger im Hintergrund auf Unsinn verändert wird und das Grid nochmal zeichnen möchte.

Danke nochmal und lg,
Wolfgang

ConnorMcLeod 4. Apr 2011 13:11

AW: Paint Message abfangen/Herkunft finden
 
Zitat:

in dem Du mal ein Haltpunkt setzt und dann step by step durch gehst und Dir den Code richtig anschaust
Nur als Klarstellung: wenn das WM_PAINT daherkommt und im Haltepunkt hängenbleibt, dann ist es ja schon ausgelöst worden. Nun muss ich draufkommen, warum/wer das ausgelöst hat. Also den *Absender* der Message finden, aber der steht nicht im MessageRecord... :-(

alfold 4. Apr 2011 13:13

AW: Paint Message abfangen/Herkunft finden
 
Vielleicht? hilft hier schon die Komponente/Form DoubleBuffered := True zu setzen?
Das nochmalige zeichen kann zb auch durch ein Changeereignis passieren!
alfold

BUG 4. Apr 2011 13:16

AW: Paint Message abfangen/Herkunft finden
 
Ganz dreckige Idee: Schmeiße die überflüssigen WM_PAINTs einfach weg bzw. spring aus der Behandlungsroutine, wenn du denkst "Nö, jetzt nicht nochmal.".

alfold 4. Apr 2011 13:22

AW: Paint Message abfangen/Herkunft finden
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1092901)
Nur als Klarstellung: wenn das WM_PAINT daherkommt und im Haltepunkt hängenbleibt, dann ist es ja schon ausgelöst worden. Nun muss ich draufkommen, warum/wer das ausgelöst hat. Also den *Absender* der Message finden, aber der steht nicht im MessageRecord... :-(

Mir ging es hierbei zu schauen ob evtl Changeereignisse, Vermutung liegt nah, nach seiner letzten Aussage, das doppelzeichen verursachen!

Alla: Create, Paint, Change und darauf wieder Paint!

alfold

blauweiss 4. Apr 2011 14:25

AW: Paint Message abfangen/Herkunft finden
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1092898)
Ein Buffer-Bitmap scheidet hiermit leider aus, weil im Grid auch gescrollt wird.

Hallo Wolfgang,

ihr habt doch überhaupt keine andere Wahl, als die Paint-Routine sauber und stabil zu machen.
Sprich unabhängig davon, wann und wie oft WM_PAINT-Messages kommen -> es darf keine Probleme machen und das Ergebnis (Optik und alles was im Hintergrund noch passiert) muß konsistent bleiben.

Diesen Aufwand eines Redesigns müsst ihr m.E. betreiben, alles andere ist Zeitverschwendung.

Gruß,
blauweiss

ConnorMcLeod 4. Apr 2011 14:59

AW: Paint Message abfangen/Herkunft finden
 
Zitat:

Zitat von alfold (Beitrag 1092906)
Alla: Create, Paint, Change und darauf wieder Paint!

Ahso, verstehe. Hab ich jetzt gecheckt, leider keine neue Erkenntnis, aber Danke für die Idee!
lg Wolfgang

ConnorMcLeod 4. Apr 2011 16:54

AW: Paint Message abfangen/Herkunft finden
 
Zitat:

Zitat von BUG (Beitrag 1092903)
Ganz dreckige Idee: Schmeiße die überflüssigen WM_PAINTs einfach weg bzw. spring aus der Behandlungsroutine, wenn du denkst "Nö, jetzt nicht nochmal.".

Wenns hart auf hart kommt, mach ich das wirklich, ist ja nur noch für ein paar Monate.
Netter Gedanke, merci!
lg Wolfgang


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr.
Seite 2 von 3     12 3      

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