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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2018, 22:11   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Delphi 7 –> Delhi 10.2 изменение типа данных «olevariant» - необъявленный идентификотор.

Доброе время суток форумчане.
Создаю отчет в MSWord из БД. Для этого пользовался функцией замены (она лежит в dll), названий полей БД, на их значения:

Код:
function FindAndPasteTextDoc(AFindText, APasteText: string;
                             AUnderLine, ABold, AItalic, ACountReplace: integer;
                             AColor: olevariant):boolean; export;
{AUnderLine: 0 - no, 1 - yes
ABold: 0 - no, 1 - yes
AItalic: 0 - no, 1 - yes
ACountReplace: 0 - replace word all, 1 - replace word one (total count replace)}

const
  wdFindContinue = 1;
  wdReplaceOne = 1;
  wdReplaceAll = 2;

begin
  StartOfDoc;
  FindAndPasteTextDoc := true;
  try
    Words_Templs.Selection.Find.Text := AFindText;
    Words_Templs.Selection.Find.Replacement.Text := APasteText;
    Words_Templs.Selection.Find.Forward := True;
    Words_Templs.Selection.Find.Wrap := wdFindContinue;
    Words_Templs.Selection.Find.Format := true;

    if ABold = 1 then
      Words_Templs.Selection.Find.Replacement.Font.Bold := true
    else
      Words_Templs.Selection.Find.Replacement.Font.Bold := false;
    if AUnderLine = 1 then
      Words_Templs.Selection.Find.Replacement.Font.Underline := true
    else
      Words_Templs.Selection.Find.Replacement.Font.Underline := false;
    if AItalic = 1 then
      Words_Templs.Selection.Find.Replacement.Font.Italic := true
    else
      Words_Templs.Selection.Find.Replacement.Font.Italic := false;
    Words_Templs.Selection.Find.Replacement.Font.Color := AColor;
    Words_Templs.Selection.Find.MatchCase := False;
    Words_Templs.Selection.Find.MatchWholeWord := False;
    Words_Templs.Selection.Find.MatchWildcards := False;
    Words_Templs.Selection.Find.MatchSoundsLike := False;
    Words_Templs.Selection.Find.MatchAllWordForms := False;
    if ACountReplace = 1 then
      Words_Templs.Selection.Find.Execute(Replace := wdReplaceOne)
    else
      Words_Templs.Selection.Find.Execute(Replace := wdReplaceAll);
  except
    FindAndPasteTextDoc := false;
  end;
end;
И вызов функции:
Код:
FindAndPasteTextDoc('&&example$$', C_Input_word, 1, 0, 0, 0, wdColorBlack);
Все работало отлично при Delphi7.
Но я перешел на Delphi 10.2, все откомпилировал. Работает.

Но теперь вызов данной функции выгледит так:
Код:
FindAndPasteTextDoc('&&example$$', C_Input_word, 1, 0, 0, 0, 100);
Т.е. поменялся вид указания цвета.
При старом вызове – «wdColorBlack», выпадает ошибка:
Undeclared identifier: 'wdColorAutomatic'

Желатетельно, при вызове функции пользоваться старым: - словесным указанием цвета.

В чем причина?
Заранее спасибо за ответ.
KBO вне форума Ответить с цитированием
Старый 01.06.2018, 22:57   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
В чем причина?
Вы хотите, чтобы мы Вам объяснили причины, по которым разработчики исключили из дельфи константы цвета для ворда?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 01.06.2018, 23:13   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Вы хотите, чтобы мы Вам объяснили причины, по которым разработчики исключили из дельфи константы цвета для ворда?
Я хотел узнать можно, каким-нибудь образом преобразовывать, "словесные" цвета в цифровые константы?
KBO вне форума Ответить с цитированием
Старый 01.06.2018, 23:23   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
const
  wdColorBlack = 100;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 01.06.2018, 23:48   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Код:
const
  wdColorBlack = 100;  
begin
  FindAndPasteTextDoc('&&example$$', C_Input_word, 1, 0, 0, 0, wdColorBlack);

Если я правильно вас понял, цвет в таком случае не черный, а коричневый
И в таком случае всеравно нужно знать цифровые константы цветов...

Может есть фунция возврата цветов в цифрах?

Или тогда самому придется написать.. .http://diversenok.ho.ua/articles/TColor
Хотя нужно попробовать "function ColorToRGB(Color: TColor): Longint;"

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

Тогда вот так:
Код:
FindAndPasteTextDoc('&&example$$', C_Input_word, 1, 0, 0, 0, ColorToRGB(clBlack));
KBO вне форума Ответить с цитированием
Старый 02.06.2018, 09:47   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
Если я правильно вас понял, цвет в таком случае не черный, а коричневый
И в таком случае всеравно нужно знать цифровые константы цветов...
Я всего лишь пример привёл. Всё остальное узнаём у разработчиков ворда:

https://msdn.microsoft.com/en-us/vba...umeration-word

Создайте модуль uConst.pas, пропишите в нём все нужные константы и подключайте к своему проекту.

Ещё вариант - открыть проект в дельфи 7, перейти в модуль, в котором определяется wdColorBlack и иже с ним и скопировать константы оттуда (или поискать по 10 дельфе, где они прописаны - возможно, просто модуль поменялся)
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 02.06.2018, 10:52   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Да, они там есть, не знаю где они были до этого, но в этих файлах польный список этих констант:
000.jpg
eoln вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi: изменение типа переменной со string на PAnsiChar Xaker_Two Помощь студентам 1 03.02.2013 01:18
Изменение типа данных pchar grom333 Общие вопросы Delphi 2 13.03.2012 21:38
Откройте базу данных. Delhi MonolitMonolit Помощь студентам 0 20.11.2011 14:30
изменение типа данных в Word gsp_51 Microsoft Office Word 1 13.01.2011 12:48
Изменение типа данных для поля Diamand Microsoft Office Access 6 04.03.2010 23:36