Absolut |
Отправлено: 06.08.2003, 17:17 |
|
Не зарегистрирован
|
Доброго времени суток.
Столкнулся с такой проблемой, и пока не очень ярко представляю как можно её разрешить.
Ситуация в следующем: на форме имеется компонент типа TComboBox, и как известно обладающий свойством SelText. Присвоение значения str типа AnsiString данному свойству позволяет заменять выделенный в компоненте текст на str. Точнее, как оказалось должно это позволять, ибо по каким-то непонятным для меня причинам замены не происходит. А происходит обычная вставка str в начало свойства Text для TComboBox. Могу пойти несколько дальше и сказать, что не устанавливаются также свойства SelStart и SelLength при выделении текста мышкой/клавой.
И если уж проблему с SelText/SelStart/SelLength разрешить не удастся, то хотелось бы знать какими альтернативными методами можно узнать позицию курсора(текстового) в имеющем фокус компоненте (в частности в TComboBox).
Заранее спасибо. |
|
qwer115 |
Отправлено: 10.08.2003, 15:09 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 11
|
описаная Вами проблема состоит в том, что свойства SelText SelStart SelLength имеют какие-либо значения лишь при активном т.е. Focused СomboBox как только СomboBox теряет фокус эти свойства сбрасываются в ноль...
Я предпологаю в Вашем случае последовательность событй была такова:
Выделяем текст в СomboBox // СomboBox — активный
нажимаем кнопку например Button1 // СomboBox — теряет фокус, обнуляются значения свойств SelText SelStart SelLength Button1 — получает фокус, происходит обработка события OnClick(...) в которой Вы обращаетесь уже к обнуленным SelText SelStart SelLength.
мораль вышесказанного такова:
1. Либо надо делать замену по обработчикам событий СomboBox например:
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key)
{if (Key = 0x13 & ((TComboBox *)Sender)->SelLength> 0)
((TComboBox *)Sender)->SelText = "QwER115";}
// т.е. выделили участок текста нажали Enter и все в шоколаде — замена выделенного произошла.
2. Либо сохранять выделенный текст, позицию курсора, длинну выделенного в глобальных переменных во время обработки событий СomboBox например:
int iSelLength = 0;
int iCursor = 0;
AnsiString asSelectedText;
void __fastcall TForm1::ComboBox1KeyPress(TObject *Sender, char &Key)
{if ( ((TComboBox *)Sender)->SelLength> 0)
{iSelLength = ((TComboBox *)Sender)->SelLength;
iCursor = ((TComboBox *)Sender)->SelStart;
asSelectedText = ((TComboBox *)Sender)->SelText ;}}
а потом в другой процедуре сделать замену по своему усмотрению.
но эта фишка в конкретном примере сработает лишь в том случае, если перед потерей фокуса была нажата к.л. клавиша...
|
|
|