Главная страница
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.49 MB
Время: 0.059 c
2-1149914431
dimodimz-FurYzzZ
2006-06-10 08:40
2006.07.02
Сумма элементов ячейки в таблице


2-1150444876
Новичок__
2006-06-16 12:01
2006.07.02
Преобразовать TEdit


2-1149706598
ПарадоксКвери
2006-06-07 22:56
2006.07.02
Как мне быть с Query&amp;


2-1149571360
Алексий
2006-06-06 09:22
2006.07.02
экран + мышка


2-1150208248
VitV
2006-06-13 18:17
2006.07.02
DBgrid нижний скролбар.