Нарушение форматирования при замене текста в ячейке штампа

Автор Andreych, 04.03.19, 22:18:43

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Andreych

Добрый день!
  Подскажите пожалуйста, не могу разобраться с казалось бы простой задачей - записать в заданную ячейку штампа определенный текст. Надо просто текст поменять, не трогая шрифт, выравнивание и т.д.
  Записываю в несколько ячеек штампа определенный текст. Проблема в том, что иногда при записи текста в ячейку в этой ячейке меняется размер шрифта или выравнивание оказывается по центру, хотя изначально шрифт был обычный и выравнивание по левому краю. Причем в разных файлах эти неожиданные изменения происходят в разных ячейках, а могут и нигде не возникнуть. Вобщем глюк носит случайный характер. Изначально во всех файлах форматирование ячеек не отличается от шаблонного, проверял. Однако после запуска программы некоторые ячейки изменяются.

Вот текст функции замены текста:


function TForm1.SetStampCellText(iStamp: ksStamp; CellNum: Integer; value: string): Integer; // CellNum - номер ячейки, value - новый текст
var
    iTextItemParam:  ksTextItemParam;
    j: integer;
    s: string;
begin
  Result:=0;
  if iStamp=nil then Exit;
  iTextItemParam:=ksTextItemParam(iKompas.GetParamStruct(ko_TextItemParam));
  s:=GetStampCellText(iStamp,CellNum,' '); // моя функция получения текущего значения ячейки. Она работает.
// запись в ячейку штампа
  iTextItemParam.Init;
  if s=value then // сравниваем новое значение с имеющимся
    result:=0; // не изменено
  else begin
    j:=iStamp.ksColumnNumber(CellNum);
    if j=0 then ShowMessage('Ошибка ячейки штампа '+IntToStr(CellNum));
    iTextItemParam.s:=value;
    if value='' then iStamp.ksClearStamp(CellNum)
    else iStamp.ksTextLine(iTextItemParam);
    result:=1; // изменено
  end;
  iTextItemParam:=nil;
end;





Slaviation

Скорее всего, чтобы "не сбить" форматирование исходного текста в ячейке основной надписи, нужно полностью разобрать весь исходный текст вплоть до итемов (ITextItem) и только у итемов, при необходимости, менять свойство ITextItem::Str.

Grinka

Создайте библиотеку (я создал мои тексты) и все что вам нужно вставляете туда.

Andreych

Цитата: Slaviation от 05.03.19, 08:10:21
Скорее всего, чтобы "не сбить" форматирование исходного текста в ячейке основной надписи, нужно полностью разобрать весь исходный текст вплоть до итемов (ITextItem) и только у итемов, при необходимости, менять свойство ITextItem::Str.

Да, я думаю по уму так и надо делать, но хочется то максимально просто.
А можно как-то обнулить форматирование ячейки, сбросить его до значений по умолчанию?
Все равно же в ячейках штампа никто не извращается с шрифтом и т.п. Это не произвольный текст менять.