AGB  ·  Datenschutz  ·  Impressum  







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

Paint Message abfangen/Herkunft finden

Ein Thema von ConnorMcLeod · begonnen am 3. Apr 2011 · letzter Beitrag vom 4. Apr 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.078 Beiträge
 
Delphi 12 Athens
 
#11

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 08:39
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#12

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 11:30
...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!!??

..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?

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.

..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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 13:02
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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 13:11
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...
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#15

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 13:13
Vielleicht? hilft hier schon die Komponente/Form DoubleBuffered := True zu setzen?
Das nochmalige zeichen kann zb auch durch ein Changeereignis passieren!
alfold

Geändert von alfold ( 4. Apr 2011 um 13:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#16

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 13:16
Ganz dreckige Idee: Schmeiße die überflüssigen WM_PAINTs einfach weg bzw. spring aus der Behandlungsroutine, wenn du denkst "Nö, jetzt nicht nochmal.".
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#17

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 13:22
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
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#18

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 14:25
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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 14:59
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
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Paint Message abfangen/Herkunft finden

  Alt 4. Apr 2011, 16:54
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:34 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