Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.08.2012, 12:57
R_smile R_smile вне форума
Прохожий
 
Регистрация: 23.08.2012
Сообщения: 4
Репутация: 10
По умолчанию Внесение изменений в код VCL (ExpressSpreadSheet)

Приветствую всех!
У меня такая ситуация, нужно внести изменение в код VCL (ExpressSpreadSheet, Developer Express Inc), а именно добавить формат для ячейки Excel '#.##0.000' в модуль cxSSDesigner.pas. Все отчеты сделаны с использованием этой библиотеки. Переделывать на что-то другое нет времени.

Делаю согласно правилам правки библиотек. Создаю новый каталог для исправленного VCL. Добавляю путь для этого каталога в Library Path.
Компилирую .dpk библиотеки, компилирую проект.

Ссылка вроде работает - при кликании открывает исправленный pas-модуль библиотеки. Но никаких изменений в приложении не вижу.

Посоветуйте, пожалуйста, я что-то еще не учитываю?

Последний раз редактировалось R_smile, 23.08.2012 в 13:02.
Ответить с цитированием
  #2  
Старый 23.08.2012, 13:05
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от R_smile
Приветствую всех!
У меня такая ситуация, нужно внести изменение в код VCL (ExpressSpreadSheet, Developer Express Inc), а именно добавить формат для ячейки Excel '#.##0.000' в модуль cxSSDesigner.pas.

Делаю согласно правилам правки библиотек. Создаю новый каталог для исправленного VCL. Добавляю путь для этого каталога в Library Path.
Компилирую .dpk библиотеки, компилирую проект.

Ссылка вроде работает - при кликании открывает исправленный pas-модуль библиотеки. Но никаких изменений в приложении не вижу.

Посоветуйте, я что-то не еще учитываю?
Очевидно, что что-то не учитываешь.
А зачем ты создаёшь новый каталог? Исправляй прямо на старом месте, а оригинальный pas-файл переименуй в какой-нибудь .bak или .original.
Если же изменения нужны только для одного проекта, то попробуй поместить исправленный pas-файл в папку с этим проектом.
Ответить с цитированием
  #3  
Старый 23.08.2012, 13:39
R_smile R_smile вне форума
Прохожий
 
Регистрация: 23.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

Убрала лишний path, делаю, как советуете.
Никакие мои изменения не фиксируются. Что мне нужно компилировать в библиотеках?

Например, вношу изменения в существующий формат, где значения $14, $15.

...
DateTimeFormats: array[0..13] of TcxSSStyleListBoxItem =
((Value: 'm/d/yy'; ValueType: $0E),
(Value: 'dd/mm/yy'; ValueType: $A4),
(Value: 'dd.mmmm.yy'; ValueType: $A5),
(Value: 'd-mmm-y'; ValueType: $0F),
(Value: 'd-mmm'; ValueType: $10),
(Value: 'mmmm-yy'; ValueType: $11),
(Value: 'h:mm AM/PM'; ValueType: $12),
(Value: 'h:mm:ss AM/PM'; ValueType: $13),
(Value: '#,##0.00'(*'h:mm'*); ValueType: $14),
(Value: '#,##0.00'(*'h:mm:ss'*); ValueType: $15),
(Value: 'm/d/yy h:mm'; ValueType: $16),
(Value: 'mm:ss'; ValueType: $2D),
(Value: '[h]:mm:ss'; ValueType: $2E),
(Value: 'mm:ss.ms'; ValueType: $2F));
...

Указываю в коде формат для ячейки Excel:

for i := ARect.Top to Sheet.RowCount - ARect.Top do begin
Sheet.GetCellObject(2,i).Style.Format := $15;
end;

И у меня число 0,12 в отчете появляется в формате 2:52:48 (то есть как было первоначально разработано). Мои изменения не зафиксированы...
Ответить с цитированием
  #4  
Старый 23.08.2012, 13:52
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от R_smile
Убрала лишний path, делаю, как советуете.
Никакие мои изменения не фиксируются. Что мне нужно компилировать в библиотеках?
Нет изменений даже если скопировать изменённый pas-файл в папку с проектом? Может не то изменяете?

А вообще для изменения достаточно найти dpk-файлы в которых используются изменённые pas-файлы и перекомпилировать их.
Ответить с цитированием
  #5  
Старый 23.08.2012, 14:17
R_smile R_smile вне форума
Прохожий
 
Регистрация: 23.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

Ок, я скопировала в папку проекта, а что это мне даст?
Если пытаюсь добавить, например, в текущий dpk, то выскакивает сообщение, что данный pas-файл уже есть в Search path.

Этот dpk, который использует исправленный pas-файл, компилила раз 100.

Не пойму... вроде все просто, а у меня не выходит...
Ответить с цитированием
  #6  
Старый 23.08.2012, 15:21
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от R_smile
Ок, я скопировала в папку проекта, а что это мне даст?
Если пытаюсь добавить, например, в текущий dpk, то выскакивает сообщение, что данный pas-файл уже есть в Search path.

Этот dpk, который использует исправленный pas-файл, компилила раз 100.

Не пойму... вроде все просто, а у меня не выходит...
Вобщем я разобрался. Больше времени потратил на то, чтобы найти, скачать и установить этот самый ExpressSpreadSheet.
Как я и говорил вы меняете совершенно не в том месте. Менять нужно в методе cxSSUtils.TcxSSUtils.FormatText. Вот вырезка:
Код:
class function TcxSSUtils.FormatText(const AValue: Double; AFormat: TxlsDataFormat;
  APrecision: Byte; var ATextColor: Word): string;
...
begin
  ARoundMode := SetRoundMode(0);
  APrecisionMode := SetPrecisionMode(2);

  if APrecision > 8 then APrecision := 8;
  case Integer(AFormat) of
      $00:
        Result := FloatToStrF(AValue, ffGeneral, 8, APrecision);
...
      $0F, $10, $11, $14:
        Result := 'ЭТО ФОРМАТЫ $0F, $10, $11, $14';//FormatDateTime(ADateFormat[AFormat - $0F], AValue);
      $12, $13:
        Result := AnsiUpperCase(FormatDateTime(ADateFormat[AFormat - $0F], AValue));
      $15:
        Result := 'ЭТО ФОРМАТ $15';//TimeToStr(AValue);
...
      $A5:
        Result := FormatDateTime(AnsiUpperCase('dd.mmmm.yy'), AValue);
    else
      Result := FloatToStr(AValue);
    end;
    if (AFormat in [$6, $8, $26, $28]) and (AValue < 0) then
      ATextColor := 2;

  SetPrecisionMode(APrecisionMode);
  SetRoundMode(ARoundMode);
end;
Ответить с цитированием
  #7  
Старый 28.08.2012, 08:27
R_smile R_smile вне форума
Прохожий
 
Регистрация: 23.08.2012
Сообщения: 4
Репутация: 10
По умолчанию

Только сейчас смогла проверить. Я ставлю свои изменения прямо в том коде. А они все равно не выводятся. Это кажется идиотизмом ,но я в шоке. Использую $10 это формат даты. Ставлю на это число свой формат,просто пишу formatfloat и все равно у меня выводиться дата. Под дебаггером у меня не получается дойти до этих форматов. Я не знаю...
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter