Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2019, 00:47   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Delphi 10.2 - слишком длинный строковый параметр

Доброе время суток,
Есть dll, которая находит текст в MSWord, и вставляет вместо него свой (работало все – на ура).
Но с некоторых пор

Код:
function FindAndPasteTextDoc(AFindText, APasteText: widestring;
                             AUnderLine, ABold, AItalic, ACountReplace: integer;
                             AColor: olevariant):boolean; export;
begin
  StartOfDoc;
showmessage('');
  FindAndPasteTextDoc := true;
  try
    TypeDos_Templs.Selection.Find.Text := AFindText;
    TypeDos_Templs.Selection.Find.Replacement.Text := APasteText;
    TypeDos_Templs.Selection.Find.Forward := True; 
…
if ACountReplace = 1 then
      TypeDos_Templs.Selection.Find.Execute(Replace := wdReplaceOne)
    else TypeDos_Templs.Selection.Find.Execute(Replace := wdReplaceAll);
  except
    FindAndPasteTextDoc := false;
На строке
Код:
TypeDos_Templs.Selection.Find.Replacement.Text := APasteText;
Если «APasteText» длиной более 255 символов ошибка

… exception class EOleException with message 'Слишком длинный строковый параметр'.

Ранее было
APasteText: string

Но как видно «widestring» тоже не слишком помог

Как исправить ошибку?
Заране спасибо за ответ.

P.S.
Вызов функции:
Код:
function FindAndPasteTextDoc(AFindText, APasteText: widestring;
                               AUnderLine, ABold, AItalic, ACountReplace: integer;
                               AColor: olevariant):boolean; far; external 'SPF';

Последний раз редактировалось KBO; 04.07.2019 в 00:58.
KBO вне форума Ответить с цитированием
Старый 04.07.2019, 01:46   #2
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

можно конечно "APasteText" сразу проверять на длину и если она больше чем 255 символов, то разбивать ее на части например по 250 символов, и вставлять частями, конечно у каждой части (кроме последней) в конце дложна быть метка, по которой можно будет ее находить для вставки следующей части.

Но как-то громоздко это...
KBO вне форума Ответить с цитированием
Старый 04.07.2019, 09:17   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

а если делать замену через Range ?
у него нет таких ограничений (по крайней мере на чтение).

т.е.
найти Find...
выделить ...selection
сформировать область "фрагмент текста" (тот самый range) selection.range
заменить (присвоить) .selection.Range.Text:=" ну очень длинный текст... "
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 04.07.2019 в 09:20.
evg_m на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка слишком длинный строковый параметр yangazitov.m Microsoft Office Excel 1 14.12.2015 15:12
Длинный параметр TIdMultipartFormDataStream LomoCoder Работа с сетью в Delphi 6 17.02.2014 17:23
Текст слишком длинный не помещается в System::String askerpro Visual C++ 1 09.05.2012 12:55
bat длинный параметр. the_deer_one Свободное общение 1 29.04.2010 16:56
ошибка ORA - 01704 (Строковый литерал слишком длинный) MAcK БД в Delphi 1 01.11.2007 09:44