starling13 |
Отправлено: 17.04.2005, 22:26 |
|
Не зарегистрирован
|
Здравствуйте. Почти нет опыта практической работы с Builder. (Если не считать институтских поделок).
Очень нужно "съедать" символы, вводимые в поле, постепенно формируя строку.
CODE |
...
char * HiddenString = NULL;//Строка для хранения
short HiddenStringLength = 0;//длина
...
//Обработчик нажатия клавишы в поле
void __fastcall TLoginBox::TextFieldKeyPress(TObject *Sender, char &Key)
{
char * OldKeyValue = &Key;
HiddenString = (char *)realloc(HiddenString, (HiddenStringLength+1)*sizeof(char));
HiddenString[HiddenStringLength] = *OldKeyValue;
HiddenStringLength++;
*OldKeyValue = '\x0';
}
...
//Пытаюсь просмотреть, что получилось
Application->MessageBoxA((const char*)HiddenString, "", MB_OK);
|
Получается какая-то ерунда. Меньше трёх символов в строке не выводит, и иногда лепит в конце что нибудь. |
|
FataLL |
Отправлено: 17.04.2005, 23:48 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 37
|
Не знаю, как срабатывает реаллок на пустой указатель, но памяти ты выделяешь на 1 байт меньше (строку же надо еще нулем закрывать). Перепишем так:
CODE |
void __fastcall TLoginBox::TextFieldKeyPress(TObject *Sender, char &Key)
{
HiddenString = (char *)realloc(HiddenString, (HiddenStringLength+2)*sizeof(char));
HiddenString[HiddenStringLength] = Key;
HiddenStringLength++;
HiddenString[HiddenStringLength] = '\0';
}
|
Это все во-первых, а во-вторых, чем тебе не нравится AnsiString? Вся эта байда выглядела бы так:
CODE |
...
AnsiString HiddenString = "";//Строка для хранения
...
//Обработчик нажатия клавишы в поле
void __fastcall TLoginBox::TextFieldKeyPress(TObject *Sender, char &Key)
{
HiddenString += Key;
}
...
//Пытаюсь просмотреть, что получилось
Application->MessageBoxA(HiddenString.c_str(), "", MB_OK);
|
|
|
Большое апасибо. |
Отправлено: 18.04.2005, 15:26 |
|
Не зарегистрирован
|
Да, непростительно забыть о замыкающем нуль-символе...
А вариант с AnsiString не пробовал — показалось неправильным вот так взять
и прибавить char * к AnsiString.
Ещё раз спасибо. |
|
|