Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.02;
Скачать: CL | DM;

Вниз

не работает 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1149684949
Elen
2006-06-07 16:55
2006.07.02
pdf в doc


6-1140437175
Новочеркасский Волк
2006-02-20 15:06
2006.07.02
Дистанционный набор текста.


15-1149258002
AlexanderMS
2006-06-02 18:20
2006.07.02
Задачка


2-1150265000
Maxim_82
2006-06-14 10:03
2006.07.02
Помогите установить компонеты DSPack


1-1148282805
Steplerr
2006-05-22 11:26
2006.07.02
Выдирание иконок из защищённых файлов