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

 
WordApplication
Shura
Отправлено: 21.04.2004, 09:57


Дежурный стрелочник

Группа: Участник
Сообщений: 45



Столкнулся с такой проблемой:
при вводе текста в таблицу с помощью кода
CODE

selection->set_Text(wcText);

в ячейке появляется нужный текст, а за ним еще некоторое количество мусора. Такое ощущение, что функция не видит конца строки. (строка как и положена заканчивается '\0')
Подскажите, как исправить!
Gedeon
Отправлено: 21.04.2004, 10:38


Ветеран

Группа: Модератор
Сообщений: 1742



Количество мусора одинаковое или все время разное?
Shura
Отправлено: 21.04.2004, 12:38


Дежурный стрелочник

Группа: Участник
Сообщений: 45



количество мусора зависит от размера wcText !!!!

и вообще аномалии:
если wcText ини циализировать как

wchar_t wcText[50];

то вообще ничего не выводится, если

wchar_t *wcText=new wchar_t[50];

то выводится текст + мосор до самого 50-го символа! Т.е. Количество мусора зависит от размера массива!
Если длина текста==длине массива, то все равно добавляется 5 символов мусора.
Doga
Отправлено: 21.04.2004, 13:10


Мастер участка

Группа: Участник
Сообщений: 575



И в первом и во втором варианте ты только выделяешь память для текстового буфера. Естественно там будет мусор.

Используй функцию API:
CODE
VOID ZeroMemory(

   PVOID Destination,  // address of block to fill with zeros
   DWORD Length  // size, in bytes, of block to fill with zeros  
  );


для очистки содержимого вуфера перед его заполнением текстом.

А кстати, как ты заполняешь буфер текстом?
Gedeon
Отправлено: 21.04.2004, 13:20


Ветеран

Группа: Модератор
Сообщений: 1742



Попробуйте вместо wchar_t использовать тип variant. Если не поможет и мусор не исчезнет, если до конца последнего элемента массива, который выделен, ну и командуй клиенту сделать количество BackSpace = разнице между длиной массива и количеством вставляемых символов.
Valdemar
Отправлено: 21.04.2004, 13:29


Мастер участка

Группа: Участник
Сообщений: 433



Я для ввода текста в таблицу использовал примерно такой код
CODE
WideString str;
TablePtr table;
table=WordDoc->Tables->Item(1);
table->Cell(row,col)->Range->InsertAfter(str);

и никакого мусора не добавлялось. Попробуйте и вы так же сделать.
Shura
Отправлено: 21.04.2004, 15:34


Дежурный стрелочник

Группа: Участник
Сообщений: 45



Doga
Память, естественно, очищаю. Заполняю ф-цией String::WideChar(...)

Gedeon
А что потом с Variant'ом делать? Он в функцию не лезет :-)
А как можно добавить BackSpace'ов?

Valdemar

Такой вариант тоже не прокатывает — всё равно мусор :-(
Gedeon
Отправлено: 22.04.2004, 09:25


Ветеран

Группа: Модератор
Сообщений: 1742



Этот исходник дома лежит, завтра принесу, выложу пример.
Shura
Отправлено: 23.04.2004, 13:51


Дежурный стрелочник

Группа: Участник
Сообщений: 45



QUOTE (Gedeon @ 22/04/2004, 10:27)
Этот исходник дома лежит, завтра принесу, выложу пример.

Спасибо! А то у меня сроки сдачи поджимают!
Gedeon
Отправлено: 27.04.2004, 08:53


Ветеран

Группа: Модератор
Сообщений: 1742



Блин, забыл, завтра. sad.gif

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