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;