Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Word: несоответствие некоторых данных 
V
    Опции темы
Keeper89
Дата 8.9.2011, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: нет
Всего: 58



Доброго времени суток smile

Проблема в следующем.
В документе Word стоит отступ первой строки - 1.25 см. В приложении получаю Range.FirstLineIndent=35,4500007629395, хотя по расчетам 1.25*28.35=35,4375, и получается, что проверка не пройдет.
Также расходятся размеры картинки (ширина 235,5 против 8.31*28.35=235,5885, высота 291,75 против 10.29*28.35=291,7215).

Пробовал округлять всеми способами:
1) получаю значение в пт из Word (не округленное) - это A - это программно
2) далее опять же не округляя перевожу см->пт сл. функцией - это B. См взяты из Ворда вручную.
Код

    const
      EPS = 0.01;
      PT_IN_CM = 72/2.54;
     
    function CmToPt(Cm: Single): Single;
    begin
      Result := Cm * PT_IN_CM; // Результат №1
      Result := Math.RoundTo(Value, -2); // Результат №2
      Result := Round(Cm * PT_IN_CM * 20) / 20; Результат №3
    end;

3) сравниваю
Код

    Math.SameValue(A, B, EPS);


И все равно не получается.

И, результаты для рисунка (ширина и высота):
№1
A=235,5 B=235,559066772461 False
A=291,75 B=291,685038288747 False

№2
A=235,5 B=235,559997558594 False
A=291,75 B=291,690002441406 False

№3
A=235,5 B=235,55 False
A=291,75 B=291,7 False

В чем здесь может быть дело?

Delphi XE, WordXP.pas 


--------------------
PM MAIL WWW   Вверх
Keeper89
Дата 9.9.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: нет
Всего: 58



Вопрос решен:
Код

function SamePt(const A, B: Single): Boolean;
begin
  Result := Math.SameValue(A, B, 0.051); // 1/20
end;

function SameCm(const A, B: Single): Boolean;
begin
  Result := Math.SameValue(A, B, 0.011); // 1/567?
end;

function CmToPt(Cm: Single): Single;
begin
  // Результат округляем до 1/20
  Result := Round(Cm * PT_IN_CM * 20) / 20;
end;

function PtToCm(Pt: Single): Single;
begin
  // Результат округляем до 1/567
  Result := Round(Pt / PT_IN_CM * 587) / 587;
end;



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1939 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.