![]() |
Gelöst: Ablauf beim Erzeugen einer Combobox
Hallo,
ich arbeite derzeit an eigenen Komponenten, die u.a. eine andere Rahmenfarbe haben, wenn sie fokussiert sind. Meine Edit-Komponente funktioniert ganz nach meinen Vorstellungen, aber die Combobox macht Probleme. Beispiel: Rahmenfarbe ist blau, fokussiert ist sie rot. Nach dem Erzeugen ist die Combobox erst mal nur grau, erst ein kurzes Fokussieren und wieder verlassen ändert die Farbe auf blau. Wenn ich mit der Maus über die blaue Combobox gehe, ohne sie zu aktivieren, wechselt sie zu grau - genauer gesagt, beim verlassen. In dem Fall wird aber weder DoExit noch WMKillFocus aufgerufen. Hat das evtl. was mit der ItemsList in der Combobox zu tun? Wie bekomme ich das gewünschte Verhalten hin? Edit: Die Methode WMPaint hat gefehlt! Nun funktioniert es. Hier die "wichtigsten" Auszüge aus dem Code:
Delphi-Quellcode:
constructor TTestComboBox.create(aOwner: TComponent);
begin inherited Create(aOwner); ColorFocused := clRed; ColorNotFocused := clBlue; FSelected := False; end; procedure TTestComboBox.DoEnter; begin Inherited; if FSelected then exit; RedrawBorder; end; procedure TTestComboBox.DoExit; begin Inherited; FSelected := False; RedrawBorder; end; procedure TTestComboBox.WMSetFocus(var Message: TWMSetFocus); begin Inherited; if not (csDesigning in ComponentState) then begin FSelected := True; RedrawBorder; end; end; procedure TTestComboBox.WMKillFocus(var Message: TWMKillFocus); begin inherited; if not (csDesigning in ComponentState) then begin FSelected := False; RedrawBorder; end; end; procedure TTestComboBox.RedrawBorder; var col: Cardinal; begin inherited; if FSelected then col := rcolorfocused else col := rcolornotfocused; Fdc := GetWindowDC(Self.Handle); try if Fdc = 0 then exit; FPen := CreatePen(PS_SOLID, 1, col); try FOldPen := SelectObject(Fdc, FPen); FOldBrush := SelectObject(Fdc, GetStockObject(NULL_BRUSH)); if NOT Rectangle(Fdc, 0, 0, Width, Height) then exit; SelectObject(Fdc, FOldBrush); SelectObject(Fdc, FOldPen); finally DeleteObject(FPen); end; finally ReleaseDC(Self.Handle, Fdc); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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-2025 by Thomas Breitkreuz