Ich versuche die Hintergrundfarbe eines DateTimePicker , aber meine Frage hat nichts damit zu tun, was ich versuche.
Ich erhalte die WM_PAINT
-Nachricht eines Fensters, lasse die Standard-Zeichnungsimplementierung passieren (d. h. die in ComCtrl.dll) und komme dann danach und schreibe darüber.
Anfangs ist mein Code einfach:
%Vor%Ich mache nichts, und die Kontrolle malt normalerweise:
Jetzt werde ich einige tatsächliche Zeichnung durchführen. Es ist nicht die Zeichnung, die ich will , aber es zeigt, dass es funktioniert. Ich werde ein criss-cross auf das Rect des Controls zeichnen:
%Vor%Es ist ziemlich einfach:
HDC
, auf die wir zurückgreifen werden Und es funktioniert!
Natürlich funktioniert es.
Ich möchte kein Kreuzchen zeichnen, ich möchte den Hintergrund füllen. Zuerst werde ich zeigen, wie ich mein Ziel mit einer schrecklichen schrecklichen Methode erreichen kann:
Ich werde die Breite des Steuerelements mit einem sehr dicken Stift streichen
Es ist eine schreckliche Sache zu tun, aber es hat die Tugend, tatsächlich zu arbeiten:
%Vor%Es ist ziemlich einfach:
Und es funktioniert:
Natürlich funktioniert es!
Ich möchte nicht alles im datetimepicker löschen, nur den "Client" -Bereich. Also stelle ich das Rect ein:
mit Codeausschnitt:
%Vor%Und es funktioniert:
Natürlich funktioniert es!
Ursprünglich habe ich einfach FillRect
benutzt, außer dass es nur darauf besteht in weiß zu zeichnen; anstatt irgendeiner Farbe:
und es funktioniert nicht:
natürlich funktioniert es nicht. Es versucht, mein Leben schwer zu machen. Wenn es funktioniert, hätte ich nicht 9 Stunden damit verbringen können.
Ich habe versucht, nur die obere Hälfte des Rechtecks zu füllen. um sicherzustellen, dass meine Herkunft korrekt war:
%Vor%und es funktioniert nicht:
Natürlich funktioniert es nicht.
Warum funktioniert es nicht?
Sie können die Delphi-Styles-Engine nicht verwenden, da die Styles-Engine bei der Verwendung nicht aktiviert ist Windows-Designs (nur bei Verwendung eines benutzerdefinierten Designs).
Sie müssen den Pinsel nicht in den Gerätekontext auswählen, da Sie ihn als Parameter übergeben. Wenn Sie es dann auswählen, weisen Sie den zurückgegebenen Wert wieder der Pinselvariablen zu und dann machen Sie FillRect
mit einem schlechten Pinselargument (weshalb es angeblich nicht funktioniert).
Tags und Links delphi winapi delphi-xe6 gdi common-controls