Ich habe in der Main-Form eine TComboBox und möchte auf MouseMove-Events reagieren, wenn sich der Maus-Zeiger in der ComboBox oder in der aufgeklappten Liste befindet.
Meine bisherige Lösung:
1) In einer
Unit, die in der Uses-Liste der Main-Form aufgeführt ist habe ich deklariert
Delphi-Quellcode:
TComboBox =
class(
Vcl.StdCtrls.TComboBox)
public
property OnMouseMove;
end;
2) Im FormCreate der Main-Form habe ich
Delphi-Quellcode:
procedure TMain.FormCreate(Sender: TObject);
begin
…
ComboBox.OnMouseMove := ComboBoxMouseMove;
…
end;
und
Delphi-Quellcode:
procedure TMain.ComboBoxMouseMove(Sender:TObject; Shift:TShiftState; X,Y:Integer);
begin
…
…
end;
wo ich auf das MouseMove reagiere.
Das funktioniert gut, allerdings nur, wenn sich der Maus-Zeiger im Textfeld der ComboBox befindet.
Ist die Liste aufgeklappt und ich bewege die Maus im aufgeklappten Teil, wird kein MouseMove-Event ausgelöst (jeenfalls kommt es nicht im ComboBoxMouseMove an).
Frage:
Wie erreiche ich, dass ich auch auf Mausbewegungen im aufgeklappten Bereich der ComboBox reagieren kann.
Ein weiteres Problem:
Wen die Liste aufgeklappt wird, reicht diese bis an den unteren Rand der Form.
Ich möchte aber die Höhe begrenzen.
Ich habe es bereits mit DropDownCount versucht, aber das funktioniert nicht, auch dann nicht, wenn ich DropDownCount zur Laufzeit setze.
Ich vermute, dass das an Style = csOwnerDrawFixed liegt.
Frage:
Wie kann ich die Höhe der Liste begrenzen.