
![]() |
||
Наши проекты: | Журнал · Discuz!ML · Алгоритмы · Естественные науки · Wiki · DRKB · Помощь проекту |
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | DigiMania | RSS |
[54.80.8.44] |
![]() |
Сообщ. #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. Все фотографии-обои Виталия Невзорова одним файлом. 3Гб.
http://www.almar.su/nevzorov/photo.zip Если с вопросами все будут посылать в гугль - откуда в нём возьмутся ответы? |
Сообщ. #5,
|
|
|
Демо
Ну, это слишком тривиально ![]() |
Сообщ. #6,
|
|
|
Спасибо за ответы. Меня бы устроил вариант товарища Amphiluke, но он, к сожалению, не работает для стиля ComboBox'а csDropDownList - а именно такой стиль я и использую...
|
Сообщ. #7,
|
|
|
Вопрос еще актуален (для combobox со стилем csDropDownList)... Или по крайней мере, подойдет вариант как избежать срабатывания onchange на клик по тому же самому, уже выбраному, элементу.
|
Сообщ. #8,
|
|
|
Цитата shershen @ Вопрос еще актуален Чем не подошел вариант Демо? ![]() нечто нейтральное, пока что.
|
Сообщ. #9,
|
|
|
Цитата Руслан @ Цитата shershen @ Вопрос еще актуален Чем не подошел вариант Демо? ![]() Сложная программа, не очень грамотно спроектированная) В итоге куча проблем с этим методом. |
Сообщ. #10,
|
|
|
Цитата shershen @ В итоге куча проблем с этим методом. Сгораю от любопытства, хотя бы одна сложность какая? ![]() /*практически в чём она заключается?*/ нечто нейтральное, пока что.
|
Сообщ. #11,
|
|
|
На айпи здесь смотрите примеры. Там много всего:
http://win32api-library.hol.es/ |