AGB  ·  Datenschutz  ·  Impressum  







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

Windows 11 - DoubleBuffered Problem

Ein Thema von user69 · begonnen am 25. Okt 2021 · letzter Beitrag vom 22. Nov 2022
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.190 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 08:27
Anbei auch die Exe, wo ihr das hoffentlich selbst seht.
Ich hätte das ja gerne für dich ausprobiert, aber bei so etwas wird mir dann doch etwas mulmig:
Angehängte Grafiken
Dateityp: png Screenshot 2021-10-26 082627.png (107,2 KB, 88x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#2

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 09:59
Ich hätte das ja gerne für dich ausprobiert, aber bei so etwas wird mir dann doch etwas mulmig:
Das ist ja nur der Windows Defender. Dessen Ergebnisse nehme ich eher weniger Ernst.

Ein manueller kurzer Blick in die Exe zeigt meiner Meinung nach keine Auffälligkeiten.

Ich habe leider aktuell keine Zeit für einen Test unter Windows 11. Ich schaue einmal, ob ich heute Abend dazu komme.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
115 Beiträge
 
#3

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 17:17
Ich hatte ursprünglich deshalb auch den source code angehängt. Das ist einfach sicherer, aber dann müsst ihr es halt selbst kompilieren - da reicht auch Win10 dazu. Nur die exe muss dann in Win 11 laufen.

Dass Delphi Programme öfter von Virenscannern falsch erkannt werden nerft halt. Ich hätte die exe vielleicht signieren sollen, das hilft wohl schon einiges.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#4

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 17:29
So funktioniert es erst einmal als Test:
Delphi-Quellcode:
  TComboBox = class(Vcl.StdCtrls.TComboBox)
    procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
  end;

  T... = class(TForm)
  ...
  end;

...

procedure TComboBox.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin
  FillRect(Message.DC, ClientRect, Brush.Handle);
  inherited;
end;
Schön ist das aber nicht. Erklären kann ich den Effekt aktuell nicht. Aus irgend einem Grund landet der Inhalt des einen Controls auf der Zeichenfläche des anderen...
Ich vermute, dass das daran liegt, dass Microsoft selbst das Neuzeichnen optimieren wollte. Ich habe aber aktuell nicht die Zeit das genauer zu prüfen.

Diese Änderung könnte man natürlich durch Umbiegen der VMT auch auf alle Comboboxen anwenden usw.

Dass Delphi Programme öfter von Virenscannern falsch erkannt werden nerft halt.
So allgemein stimmt das ja nicht einmal. Es sind immer wieder die gleichen Virenscanner, die leider aber relativ weit verbreitet sind. Das sind aber nur 4-5, die das so oft betrifft.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
115 Beiträge
 
#5

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 20:44
Vielen Dank @jaenicke. Das hilft bei der TCombobox super, das Problem ist weg.

Beim TEdit bleibt aber das Problem (schwarzer Trauerrand). Da hilft WMEraseBkgnd nicht. Das scheint an was anderen zu liegen, das dabei nicht geht.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 20:55
Vielen Dank @jaenicke. Das hilft bei der TCombobox super, das Problem ist weg.

Beim TEdit bleibt aber das Problem (schwarzer Trauerrand). Da hilft WMEraseBkgnd nicht. Das scheint an was anderen zu liegen, das dabei nicht geht.
Ich sehe keinen sinn in solchen Hacks.

Es ist die Sache der Entwickler von Delphi das Problem zu lösen.
Würde mich mal interessieren ob das auch mit älteren Delphi Versionen so ausschaut. D2010 zum Beispiel.
Falls ja dann ist eine ein Win11 Problem wenn nicht eins von Delphi.

btw. Was machst du wenn du 20 Comboboxen hast?
Überall WM_ERASEBKGND überschreiben? Na dann viel spaß dabei.
Traurig was hier so abgeht.
  Mit Zitat antworten Zitat
user69

Registriert seit: 11. Dez 2004
115 Beiträge
 
#7

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 21:05
Also mit der Interposer class (wie beschrieben) muss es nur einmal eingefügt werden, es gilt dann für alle TComboboxen in dieser unit.

Und den Schuldigen zu suchen hilft mir einfach nicht weiter - ich muss es lösen (oder hoffen dass es sich von "alleine" behebt, aber das ist eher nicht hilfreich).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#8

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 21:15
Es ist die Sache der Entwickler von Delphi das Problem zu lösen.
Würde mich mal interessieren ob das auch mit älteren Delphi Versionen so ausschaut. D2010 zum Beispiel.
Falls ja dann ist eine ein Win11 Problem wenn nicht eins von Delphi.
Ja, es betrifft alle Delphiversionen mindestens ab Version 7.

Aber die Ursache liegt an der Konstruktion der DoubleBuffered Eigenschaft. Denn ohne das klappt ja alles und das Problem gibt es soweit ich bisher gelesen habe auch nur mit Anwendungen, die in Delphi (und C++ Builder?) geschrieben wurden.

Und in anderen Anwendungen aus anderen Entwicklungsumgebungen flackert es nun weniger, sieht aber vollkommen korrekt aus. Von daher liegt es zwar an einer Änderung in Windows, aber die Ursache ist, dass Delphi um das Flackern zu reduzieren zu Tricks greift was die Behandlung der Windows Messages z.B. zum Überschreiben des Hintergrunds angeht.

Deshalb bin ich echt gespannt wie es hier weitergeht. Microsoft hat ja angekündigt, dass alle Anwendungen aus Windows 10 kompatibel sein sollen und sie sich darum kümmern wollen.

btw. Was machst du wenn du 20 Comboboxen hast?
Überall WM_ERASEBKGND überschreiben?
Ich glaube du hast dir den Quelltext nicht richtig angeschaut. Erstens gilt das für das ganze Formular und zweitens musst du wie ich auch geschrieben habe nur die Methode in der VMT der Klasse TComboBox einmal (!) für die ganze Anwendung überschreiben.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.848 Beiträge
 
Delphi 12 Athens
 
#9

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 21:22
Beim TEdit bleibt aber das Problem (schwarzer Trauerrand). Da hilft WMEraseBkgnd nicht. Das scheint an was anderen zu liegen, das dabei nicht geht.
Das liegt am DoubleBuffered des Formulars. Wenn du dort auch das WM_ERASEBKGND überschreibst, klappt es.

Allerdings ist die Frage wozu du das DoubleBuffered benötigst, denn letztlich hebelst du das damit natürlich auch aus.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Windows 11 - DoubleBuffered Problem

  Alt 26. Okt 2021, 21:32
Zitat:
Deshalb bin ich echt gespannt wie es hier weitergeht. Microsoft hat ja angekündigt, dass alle Anwendungen aus Windows 10 kompatibel sein sollen und sie sich darum kümmern wollen.
Da kann man nur hoffen.
Ich denke es ist einfach noch viel zu früh um umzusteigen.
Aber jedem das seine.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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 02: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 by Thomas Breitkreuz