Problem mit Listview und BorderWidth

Hallo,

wenn man für ein Listview die BorderWidth > 0 wählt, dann wird der Rand rechts und unterhalb des Client-Bereichs nicht richtig gezeichnet.

Weiß jemand, wie man diesen Bug behebt?

Über den Canvas kann ich nie in diese Bereiche zeichnen, auch nicht nach SelectClipRgn(Canvas.Handle,0) usw. Nur, wenn ich mir mit GetWindowDC vom Parent einen DC hole, kann ich im Border zeichnen, aber dann werden andere Controls in diesem Bereich übermalt und auch die Scrollbars werden dann übermalt. Außerdem wird nicht immer der richtige Bereich in BoundsRect zurückgegeben (beim Verkleinern des Listviews ist Boundsrect ein Pixel zu breit, sonst ein Pixel zu schmal). Ich habe es erfolglos in WMEraseBackgrnd und WMPaint usw. versucht. Jede Teillösung zieht 5 neue Probleme nach sich. Am Ende ist’s aber vielleicht doch ganz einfach, und ich komme nicht drauf…

Danke schonmal & VG
Jochen

Hi Jochen

Habe das Probelm mal auf Delphi 5 und Delphi 2010 nachgestellt. Tatsächlich scheint das irgendwie nicht ganz wie gedacht zu funktionieren. Auch die Scrollbar verschiebt sich dabei um die Rahmenbreite nach innen.

Meine Empfehlung: Nich lange mit GetWindowDC usw. rumversuchen. Schreibe eine eigene Komoponenten (VLC), welche den Rahmen so zeichnet, wie du es möchtest.

Hier paar Grundlagen-Infos zur Komoponenten-Entwicklung:
http://www.delphi-treff.de/tutorials/vcl/komponenten…

Gruss
Sam

Hallo,

danke für die Antwort. Scheint ja mal ausnahmsweise nicht an meiner Unfähigkeit zu liegen :smile:

Ich finde es aber ärgerlich, sogar für solche Standard-Lösungen eigene Komponenten entwickeln zu müssen. Wofür ist die VCL dann noch gut?! (Achtung: das was eine rhetorische Frage! :smile: )

VG
Jochen

1 Like