Delphi-PRAXiS
Seite 2 von 4     12 34      

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/)
-   -   Windows 11 - DoubleBuffered Problem (https://www.delphipraxis.net/209098-windows-11-doublebuffered-problem.html)

user69 26. Okt 2021 16:17

AW: Windows 11 - DoubleBuffered Problem
 
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.

jaenicke 26. Okt 2021 16:29

AW: Windows 11 - DoubleBuffered Problem
 
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.

Zitat:

Zitat von user69 (Beitrag 1496641)
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.

user69 26. Okt 2021 19:44

AW: Windows 11 - DoubleBuffered Problem
 
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.

venice2 26. Okt 2021 19:55

AW: Windows 11 - DoubleBuffered Problem
 
Zitat:

Zitat von user69 (Beitrag 1496650)
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.

user69 26. Okt 2021 20:05

AW: Windows 11 - DoubleBuffered Problem
 
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).

jaenicke 26. Okt 2021 20:15

AW: Windows 11 - DoubleBuffered Problem
 
Zitat:

Zitat von venice2 (Beitrag 1496651)
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.

Zitat:

Zitat von venice2 (Beitrag 1496651)
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.

jaenicke 26. Okt 2021 20:22

AW: Windows 11 - DoubleBuffered Problem
 
Zitat:

Zitat von user69 (Beitrag 1496650)
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.

venice2 26. Okt 2021 20:32

AW: Windows 11 - DoubleBuffered Problem
 
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. :lol:
Ich denke es ist einfach noch viel zu früh um umzusteigen.
Aber jedem das seine.

jaenicke 27. Okt 2021 05:24

AW: Windows 11 - DoubleBuffered Problem
 
Zitat:

Zitat von venice2 (Beitrag 1496656)
Ich denke es ist einfach noch viel zu früh um umzusteigen.
Aber jedem das seine.

Es ist immer besser, wenn man selbst Probleme zuerst bemerkt und nicht die Kunden, wenn diese früher umsteigen. Von daher stellt sich mir die Frage als Softwareentwickler gar nicht.

Und die Probleme, die ich selbst mit Windows 11 habe, waren mir ohnehin vorher schon klar, werden sich aber auch nicht ändern, weil Microsoft das halt anders sieht (Startmenü und Taskleiste aller Funktionen beraubt, ...). (Bzw. weil bei dem eigentlich mit Kacheln usw. gut gemachten und anpassbaren Startmenü zu viele gemeckert haben, weil die vielen zu intelligent und funktionell waren, darum wurde es halt nun auf dumm getrimmt.)

Aber rein technisch funktioniert hier alles. Auf das Problem mit DoubleBuffered bin ich ja nur hier im Forum aufmerksam geworden, selbst habe ich keine Probleme bisher.

user69 27. Okt 2021 07:19

AW: Windows 11 - DoubleBuffered Problem
 
Ich sehe das auch aus Kundensicht: Ich weiß nicht wer wann umsteigt. Ich arbeite auch noch nicht mit Windows 11 (und finde es auch nicht schöner als Win10, aber das ist meine persönliche Meinung).

Für die beschriebenen Probleme gibt es halt (schlechte) Workarounds und/oder ein hoffen auf Microsoft (aber bekommen die das überhaupt mal mit)?
BTW: Ein weiterer Workaround ist alles in ein Panel zu legen. Dann sind all diese Probleme weg.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 2 von 4     12 34      

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