Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[13.59.82.167] |
|
Сообщ.
#1
,
|
|
|
Есть ли нормальный способ получить предыдущее значение ComboBox'а? Удивился, не найдя такого события (onchange и onselect срабатывают после).
|
Сообщ.
#2
,
|
|
|
Можно перехватывать на родительском элементе ComboBox`а сообщение WM_COMMAND и в случае, когда HIWORD(wParam) = CBN_SELCHANGE, забирать значение из ComboBox.Text.
Если родительский элемент — форма, то type TForm1 = class(TForm) ComboBox1: TComboBox; private { Private declarations } procedure WMCommand(var Msg: TMessage); message WM_COMMAND; ....... procedure TForm1.WMCommand(var Msg: TMessage); begin if Msg.WParamHi = CBN_SELCHANGE then if Msg.LParam = Integer(ComboBox1.Handle) then Caption := 'Previous value is ' + ComboBox1.Text; inherited; end; Либо еще можно написать наследника от TCustomCombo и переопределить его метод CNCommand конкретно для случая сообщения CBN_SELCHANGE. Какой способ в вашем понимании «нормальный», сами решайте. Возможно, есть лучше. |
Сообщ.
#3
,
|
|
|
Цитата Amphiluke @ Либо еще можно написать наследника от TCustomCombo и переопределить его метод CNCommand конкретно для случая сообщения CBN_SELCHANGE Либо в рантайме (в FormCreate) перепределить св-во WindowProc конкретного комбобокса |
Сообщ.
#4
,
|
|
|
TForm1 = class(TForm) ComboBox1: TComboBox; Label1: TLabel; procedure ComboBox1Change(Sender: TObject); private { Private declarations } public FComboLast: String; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.ComboBox1Change(Sender: TObject); begin Label1.Caption := FComboLast; FComboLast := TComboBox(Sender).Text; end; end. |
Сообщ.
#5
,
|
|
|
Демо
Ну, это слишком тривиально |
Сообщ.
#6
,
|
|
|
Спасибо за ответы. Меня бы устроил вариант товарища Amphiluke, но он, к сожалению, не работает для стиля ComboBox'а csDropDownList - а именно такой стиль я и использую...
|
Сообщ.
#7
,
|
|
|
Вопрос еще актуален (для combobox со стилем csDropDownList)... Или по крайней мере, подойдет вариант как избежать срабатывания onchange на клик по тому же самому, уже выбраному, элементу.
|
Сообщ.
#8
,
|
|
|
Цитата shershen @ Вопрос еще актуален Чем не подошел вариант Демо? |
Сообщ.
#9
,
|
|
|
Цитата Руслан @ Цитата shershen @ Вопрос еще актуален Чем не подошел вариант Демо? Сложная программа, не очень грамотно спроектированная) В итоге куча проблем с этим методом. |
Сообщ.
#10
,
|
|
|
Цитата shershen @ В итоге куча проблем с этим методом. Сгораю от любопытства, хотя бы одна сложность какая? /*практически в чём она заключается?*/ |
Сообщ.
#11
,
|
|
|
На айпи здесь смотрите примеры. Там много всего:
http://win32api-library.hol.es/ |