![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не работает ComboBox.SelStart
Андрей Молчанов © (2006-05-21 19:31:00)Необходимо по нажатию кнопки вставить текст '%YEAR%' в ComboBox, но не вместо уже существующего текста, а внутрь. Выполняю следующий код:
ComboBox.Text := Copy(ComboBox.Text, 1, ComboBox.SelStart) + '%YEAR%' + Copy(ComboBox.Text, ComboBox.SelStart + ComboBox.SelLength + 1, MaxInt);
Однако SelStart и SelLength всегда содержат 0. Я думаю, это из-за того, что в момент нажатия кнопки комбо-бокс теряет фокус. Что можно сделать
@Lex (2006-05-21 22:15:00) [1]if MSg.message = 512 then begin
SelStart := ComboBox1.SelStart;
SelLength := ComboBox1.SelLength;
end;
@Lex (2006-05-21 22:09:00) [2]пОПРОБУЙ ТАК.
Кидай на форму TApplicationEvent.
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
if Msg.hwnd = ComboBox1.Handle then
//if Msg.Message = ? then begin
if ComboBox1.SelStart <> 0 then begin
SelStart := ComboBox1.SelStart;
SelLength := ComboBox1.SelLength;
end;
end;
корявенько -(. Может в этом направлении покопать...
Андрей Молчанов (2006-05-21 21:57:00) [3]Тоже вариант, но мне кажется, что более эффективным вариантом будет сохранение SelStart и SelLength перед потерей фокуса. Нашел событие OnExit, но оно вызывается уже после потери фокуса. :(
begin...end (2006-05-21 21:43:00) [4]> Андрей Молчанов (21.05.06 21:33) [4]
А почему бы в качестве кнопки не использовать TSpeedButton, который не забирает фокус?
Андрей Молчанов (2006-05-21 21:33:00) [5]При установке фокуса выделяется весь текст. Насчет ComboBox.SelText спасибо.
begin...end (2006-05-21 21:28:00) [6]> Андрей Молчанов (21.05.06 19:31)
> Что можно сделать
Установить фокус вручную?
Кстати, код:
> ComboBox.Text := Copy(ComboBox.Text, 1, ComboBox.SelStart)
> + '%YEAR%' + Copy(ComboBox.Text, ComboBox.SelStart + ComboBox.SelLength
> + 1, MaxInt);
может быть заменён на:
ComboBox.SelText := '%YEAR%'.
Андрей Молчанов (2006-05-21 21:28:00) [7]Нет, я имею в виду, что хочу вставить %YEAR% в текст. То есть, если в комбобоксе текст 'qwerty', курсор стоит после r и нет элементов, то элементов не добавится, но текст станет 'qwer%YEAR%ty'.
У меня появилась мысль - может быть сохранять SelStart и SelLength при потере фокуса? Но здесь опять проблема - я пытаюсь поймать WM_ACTIVATE через ComboBox.WindowProc, но сообщение не ловится. В чем может быть дело?
if Message.Msg = WM_ACTIVATE then begin
SelStart := ComboBox.SelStart;
SelLength := ComboBox.SelLength;
end;
OldWndProc(Message);
Leonid Troyanovsky (2006-05-21 20:58:00) [8]
> Андрей Молчанов (21.05.06 19:31)
> фокус. Что можно сделать
ComboBox1.Items.Add('%YEAR%') ?
--
Regards, LVT.