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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 15.02.2017, 13:52
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от igr37
...что-то я подозреваю что ето невыполнимая миссия...
Проделал подобное из-под D7 - тоже самое, "О" вместо знака вставляется - проблема может ещё глубже оказаться :-(
Ответить с цитированием
  #17  
Старый 15.02.2017, 16:18
Аватар для dr. F.I.N.
dr. F.I.N. dr. F.I.N. вне форума
I Like it!
 
Регистрация: 12.12.2009
Адрес: Россия, г. Новосибирск
Сообщения: 660
Версия Delphi: D6/D7
Репутация: 26643
По умолчанию

Не знаю, отпишется ли ТС. На всякий случай отпишусь я.
Найдено рабочее решение: Программа-D2 и DLL-D7. Библиотечная функция получает страницу книги и координаты ячейки, где вставляется символ диаметра.

Программа:
Код:
uses
  OleAuto;

type
  _DoChangeSymbol = function (OleSheet: PVariant; Col, Row: Integer): Boolean; stdcall; //external 'ChangeSymbol.dll';

procedure TForm1.Button1Click(Sender: TObject);
var
  excel, wb, sh: Variant;
  lib: THandle;
  proc: _DoChangeSymbol;
begin
  if OpenDialog1.Execute then
  try
    excel := CreateOleObject('Excel.Application');
    excel.Visible := false;
    excel.DisplayAlerts := false;
    try
      excel.WorkBooks.Open(OpenDialog1.FileName);
      wb := excel.WorkBooks[ExtractFileName(OpenDialog1.FileName)];
      sh := wb.WorkSheets[1];
      sh.Cells[1, 1].Value := 'Outer d=12, Inner d=8';
      lib := LoadLibrary('ChangeSymbol.dll');
      if lib >= 32 then
      begin
        @proc := GetProcAddress(lib, 'DoChangeSymbol');
        if @proc <> nil then proc(@sh, 1, 1);
           //if proc(@sh, 1, 1) then ShowMessage('Yep!')
           //else ShowMessage('Upssss....');
        FreeLibrary(lib);
      end;
      wb.Save;
    finally
      excel.Quit;
      sh := UnAssigned;
      wb := UnAssigned;
      excel := UnAssigned;
    end;
  except
    raise Exception.Create('Error');
  end;
  ShowMessage('Done!');
end;

Библиотека:
Код:
library ChangeSymbol;

function DoChangeSymbol(OleSheet: PVariant; Col, Row: Integer): Boolean; stdcall;
var
  i: Integer;
  ws: WideString;
begin
  try
    ws := OleSheet^.Cells[Col, Row];
    i := Pos('d=', ws);
    while i > 0 do
    begin
      ws[i] := WideChar(216);
      i := Pos('d=', ws);
    end;
    OleSheet^.Cells[Col, Row] := ws;
    Result := True;
  except
    Result := False;
  end;
end;

exports
  DoChangeSymbol;

begin
end.
__________________
Грамотно поставленный вопрос содержит не менее 50% ответа.
Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть.

Последний раз редактировалось dr. F.I.N., 15.02.2017 в 17:21.
Ответить с цитированием
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение:
igr37 (15.02.2017)
  #18  
Старый 15.02.2017, 17:24
igr37 igr37 вне форума
Прохожий
 
Регистрация: 01.02.2017
Сообщения: 9
Версия Delphi: Delphi 2
Репутация: 10
По умолчанию

все вопрос закрыт - сделал с помощью DLL
Благодарю за помощь dr. F.I.N. !
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter