6 Stimmen

Einfügen eines Bildes in eine Combobox (rechter Rand) in Delphi/Win32

Ich möchte ein Bild innerhalb einer Combobox (rechter Rand) in Delphi/Win32 zeichnen.

Die Combobox hat den Stil csDropDown . Dies funktioniert nicht mit csOwnerDrawFixed o csOwnerDrawVariable .

Die Combobox sollte ähnlich wie die Adressleiste des Browsers editierbar sein.

Gibt es eine Win32-Lösung, ohne eine zusätzliche Delphi-Komponente zu erstellen?

Ich habe das Folgende versucht, aber es funktioniert nicht. Kann ich das mit Delphi 7 machen?

TForm1 = class(TForm)
  ...
private
  FChDirComboWndProc: TWndMethod;
  procedure ChDirComboWndProc(var Message: TMessage);
  ...

procedure TForm1.FormCreate(Sender: TObject);
begin
  FChDirComboWndProc := ChDirComboBox.WindowProc; // save old window proc
  ChDirComboBox.WindowProc := ChDirComboWndProc; // subclass
end;

procedure TForm1.ChDirComboWndProc(var Message: TMessage);
begin
    WM_ERASEBKGND: begin    // WM_PAINT ?
        SetBkMode(Message.WParam, TRANSPARENT);
        SetTextColor(Message.wParam, GetSysColor(COLOR_GRAYTEXT));
        FillRect(Message.wParam, Rect(3,3,300,30), GetStockObject(BLACK_BRUSH ));
        Rectangle(Message.wParam, 15,15, 100, 100); //Test
        OutputDebugString(PCHar(Format('aa %d %d %d',[Message.WParam, Message.LParam, ChDirComboBox.Handle])));
      end;
  end;
  FChDirComboWndProc(Message); // process message
end;

2voto

Roman R. Punkte 66500

Der Weg dorthin führt über die Implementierung einer Owner-Drawn Combo Boxes . Siehe Vom Eigentümer gezeichnete Combo-Boxen auf MSDN, oder suchen Sie nach Delphi-Beispielen, z.B. Besitzer Draw - ComboBox .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X