Delphi - Промяна на OnChange на TComboBox

Искам да променя TComboBox, така че ако въвеждам текст в него или ръчно задам свойството Text, това да задейства събитието OnChange.

Както е сега, извършването на ComboBox.Text := 'blah' не задейства събитието OnChange, нито въвеждането в полето.

Опитах се да създам TComboBox потомък, което предполагам, че е правилният подход, но не съм много сигурен как да променя това, което задейства събитията.


person Doogie Howser    schedule 27.03.2013    source източник


Отговори (1)


Доколкото ми е известно, въвеждането в комбинирано поле ще доведе до задействане на събитието OnChange. Но е вярно, че модифицирането на свойството text не го прави.

Начинът, по който бих отишъл да накарам OnChange да се задейства за вашия комбиниран списък, е да се справя със съобщението CM_TEXTCHANGED. Манипулаторът за това трябва да извика метода Change, който след това ще извика OnChange, ако е бил присвоен.

Като прост пример, ето реализация на клас interposer:

type
  TComboBox = class(StdCtrls.TComboBox)
  protected
    procedure CMTextChanged(var Message: TMessage); message CM_TEXTCHANGED;
  end;

procedure TComboBox.CMTextChanged(var Message: TMessage);
begin
  inherited;
  Change;
end;
person David Heffernan    schedule 27.03.2013
comment
+1 за използване на вмъкнат клас, IMHO това е най-добрият подход. - person jachguate; 27.03.2013
comment
Не съм сигурен какво е интерпониран клас, но направих това в моя клас наследник и проработи. Благодаря! - person Doogie Howser; 27.03.2013