AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Gelöst: Ablauf beim Erzeugen einer Combobox

Ein Thema von ernschd · begonnen am 29. Feb 2016
Antwort Antwort
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#1

Gelöst: Ablauf beim Erzeugen einer Combobox

  Alt 29. Feb 2016, 17:47
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;

Geändert von ernschd ( 1. Mär 2016 um 12:30 Uhr) Grund: Problem gelöst
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:21 Uhr.
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