Форум: "Основная";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Внизне работает ComboBox.SelStart Найти похожие ветки
← →
Андрей Молчанов (2006-05-21 19:31) [0]Необходимо по нажатию кнопки вставить текст "%YEAR%" в ComboBox, но не вместо уже существующего текста, а внутрь. Выполняю следующий код:
ComboBox.Text := Copy(ComboBox.Text, 1, ComboBox.SelStart) + "%YEAR%" + Copy(ComboBox.Text, ComboBox.SelStart + ComboBox.SelLength + 1, MaxInt);
Однако SelStart и SelLength всегда содержат 0. Я думаю, это из-за того, что в момент нажатия кнопки комбо-бокс теряет фокус. Что можно сделать
← →
Leonid Troyanovsky © (2006-05-21 20:58) [1]
> Андрей Молчанов (21.05.06 19:31)
> фокус. Что можно сделать
ComboBox1.Items.Add("%YEAR%") ?
--
Regards, LVT.
← →
begin...end © (2006-05-21 21:28) [2]> Андрей Молчанов (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) [3]Нет, я имею в виду, что хочу вставить %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);
← →
Андрей Молчанов (2006-05-21 21:33) [4]При установке фокуса выделяется весь текст. Насчет ComboBox.SelText спасибо.
← →
begin...end © (2006-05-21 21:43) [5]> Андрей Молчанов (21.05.06 21:33) [4]
А почему бы в качестве кнопки не использовать TSpeedButton, который не забирает фокус?
← →
Андрей Молчанов (2006-05-21 21:57) [6]Тоже вариант, но мне кажется, что более эффективным вариантом будет сохранение SelStart и SelLength перед потерей фокуса. Нашел событие OnExit, но оно вызывается уже после потери фокуса. :(
← →
@Lex © (2006-05-21 22:09) [7]пОПРОБУЙ ТАК.
Кидай на форму 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;
корявенько -(. Может в этом направлении покопать...
← →
@Lex © (2006-05-21 22:15) [8]if MSg.message = 512 then begin
SelStart := ComboBox1.SelStart;
SelLength := ComboBox1.SelLength;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c