C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TComboBox && SelText, глюки SelText в TComboBox
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 ;}}

а потом в другой процедуре сделать замену по своему усмотрению.
но эта фишка в конкретном примере сработает лишь в том случае, если перед потерей фокуса была нажата к.л. клавиша...

Вернуться в Вопросы программирования в C++Builder