Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров
0/0

Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Уважаемые читатели!
Тут можно читать бесплатно Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров. Жанр: Программирование. Так же Вы можете читать полную версию (весь текст) онлайн книги без регистрации и SMS на сайте Knigi-online.info (книги онлайн) или прочесть краткое содержание, описание, предисловие (аннотацию) от автора и ознакомиться с отзывами (комментариями) о произведении.
Описание онлайн-книги Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров:
…начиная с 1001. Смотрите другие файлы…
Читем онлайн Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 106 107 108 109 110 111 112 113 114 ... 123

1. Использование TTable + TApollo:

=== Cut ====

TTable.Open;

TApollo.SetTranslate(True);

TTable.Refresh;

=== Cut ====

2. Использование TApTable:

=== Cut ====

TApTable.Open;

TApTable.SetTranslate(True);

TApTable.Refresh;

=== Cut ====

И вместо закорючек будут родные русские буквы. Правда, только при выполнении программы. В дизайнере на этапе проектирования псевдографика так и останется. 

Microsoft Excel 

Не работает передача данных по OLE в русский Excel

Nomadic отвечает:

A: (SM): Дело в том что в VCL твои команды OLE2 передаются Excel'у в русском контексте (не знаю, как это правильно назвать). Для исправления необходимо найти в файле OLEAUTO.pas в функции GetIDsOfNames строчку

if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount, LOCALE_SYSTEM_DEFAULT, DispIDs) <> 0 then

и заменить ее на

if Dispatch.GetIDsOfNames(GUID_NULL, @NameRefs, NameCount, ((LANG_ENGLISH+SUBLANG_DEFAULT*1024)+SORT_DEFAULT* 65536), DispIDs) <> 0 then

После этого у меня Excel стал понимать нормальные английские команды :)). Необходимая комбинация для установки английского языка взята из C-шных хедеров.

Microsoft Word 

Как отследить открытие и закрытие документов в приложении Microsoft Word?

Nomadic советует:

В копилку. Исходный код, FAQ — желающие могут взять с Internet сами (информация взята с http://www.softmosis.ca, проверено — работает).

Основной модуль, регистрация и вызов

public

{ Public declarations }

FWordApp: _Application;

FWordDoc: _Document;

FWordSink: TWordConnection;

procedure StartWordConnection(WordApp: _Application; WordDoc: _Document; var WordSink: TWordConnection);

var

 PointContainer: IConnectionPointContainer;

 Point: IConnectionPoint;

begin

 try

  // TWordConnection is the COM object which receives the

  // notifications from Word. Make sure to free WordSink when

  // you are done with it.

  WordSink := TWordConnection.Create;

  WordSink.WordApp := WordApp;

  WordSink.WordDoc := WordDoc;

  // Sink with a Word application

  OleCheck(WordApp.QueryInterface(IConnectionPointContainer, PointContainer));

  if Assigned(PointContainer) then begin

   OleCheck(PointContainer.FindConnectionPoint(ApplicationEvents, Point));

   if Assigned(Point) then Point.Advise((WordSink as IUnknown), WordSink.AppCookie);

  end;

  // Sink with a Word document advise

  OleCheck(WordDoc.QueryInterface(IConnectionPointContainer, PointContainer));

  if Assigned(PointContainer) then begin

   OleCheck(PointContainer.FindConnectionPoint(DocumentEvents, Point));

   if Assigned(Point) then Point.Advise((WordSink as IUnknown), WordSink.DocCookie);

  end;

 excepton E: Exception do

  ShowMessage(E.Message);

 end;

end;

procedure TmainForm.btnStartClick(Sender: TObject);

begin

 FWordApp := CoApplication_.Create;

 FWordDoc := FWordApp.Documents.Add(EmptyParam, EmptyParam);

 FWordApp.Visible := True;StartWordConnection(FWordApp, FWordDoc, FWordSink);

end;

procedure TmainForm.btnExitClick(Sender: TObject);

begin

 FWordApp := CoApplication_.Create;

 FWordDoc := FWordApp.Documents.Add(EmptyParam, EmptyParam);

 FWordApp.Visible := True;

 StartWordConnection(FWordApp, FWordDoc, FWordSink);

end;

procedure tmainform.btnexitclick(sender: tobject);

begin

 FWordApp.Quit(EmptyParam, EmptyParam, EmptyParam);

end;

Модуль отслеживания линков

unit ConnectionObject;

interface

uses Word_TLB, dialogs;

type TWordConnection = class(TObject, IUnknown, IDispatch)

protected

 {IUnknown}

 function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;

 function _AddRef: Integer; stdcall;

 function _Release: Integer; stdcall;

 { IDispatch }

 function GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;

 function GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult; stdcall;

 function GetTypeInfoCount(out Count: Integer): HResult; stdcall;

 function Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult; stdcall;

public

 WordApp: _Application;

 WordDoc: _Document;

 AppCookie, DocCookie: Integer;

end;

implementation

{ IUnknown Methods }

uses windows, activex, main;

procedure LogComment(comment: string);

begin

 Form1.Memo1.Lines.Add(comment);

end;

function TWordConnection._AddRef: Integer;

begin

 Result := 2;

end;

function TWordConnection._Release: Integer;

begin

 Result := 1;

end;

function TWordConnection.QueryInterface(const IID: TGUID; out Obj): HResult;

begin

 Result := E_NOINTERFACE;

 Pointer(Obj) := nil;

 if (GetInterface(IID, Obj)) then Result := S_OK;

 if not Succeeded(Result) then

  if (IsEqualIID(IID, DocumentEvents) or IsEqualIID(IID, ApplicationEvents)) then

   if (GetInterface(IDispatch, Obj)) then Result := S_OK;

end;

{ IDispatch Methods }

function TWordConnection.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;

begin

 Result := E_NOTIMPL;

end;

function TWordConnection.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;

begin

 Pointer(TypeInfo) := nil;

 Result := E_NOTIMPL;

end;

function TWordConnection.GetTypeInfoCount(out Count: Integer): HResult;

begin

 Count := 0;

 Result := E_NOTIMPL;

end;

function TWordConnection.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo, ArgErr: Pointer): HResult;

begin

 //This is the entry point for Word event sinking

 Result := S_OK;

 case DispID of

 1: ; // Startup

 2: ShowMessage('quit'); // Quit

 3: ; // Document change

 4: ; // New document

 5: ; // Open document

 6: ShowMessage('close'); // Close document

 else Result := E_INVALIDARG;

 end;

end;

end

Автоматизация WORD 7

Delphi 3 

Вы можете воспользоваться любым интерфейсом, предлагаемым сервером автоматизации Word. Все реализованные интерфейсы вы можете увидеть при загрузке MSWORD8.OLB в Delphi, данный файл представляет собой библиотеку типов Word 7. Для исполнения VB в Word вы можете использовать свойство WordBasic Application. Следующий пример демонстрирует оба метода:

implementation

uses ComObj;

{$R *.DFM}

var V: OleVariant;

procedure TForm1.Button1Click(Sender: TObject);

begin

 V := CreateOleObject('Word.Application');

 V.ShowMe;

 V.WordBasic.FileNew;

 V.WordBasic.Insert('тест');

 V.Run('mymac');

 V.WordBasic.FileSave;

end;

end

ReportSmith 

Передача переменных отчета в ReportSmith III

…вы говорите можно передавать переменные? В документации только красивые схемы. Я пытаюсь передать две даты, но мне необходимо чтобы первую дату ввел пользователь, вторую я вычисляю в Delphi сам и передаю результат ReportSmith.

Вот кусор работающего у меня кода, передающий использующийся при выборе Timestamp. Я использую строковую переменную просто как способ проверить строку прежде, чем я ее добавлю в отчет. Если вы хотите, можете это убрать. Примечание: убедитесь в том, что переменная, которой вы передаете значение, написана верно. Переменные отчета Reportsmith ЧУСТВИТЕЛЬНЫ К РЕГИСТРУ.

Var S: String;

Begin

 ExportReport.InitialValues.Clear;

 S :='@SQLDate=<'''+FormatDateTime('mm/dd/yyyy hh:nn:ss',ATimeStamp)+'''>';

 ExportReport.InitialValues.Add(S);

 ExportReport.RUN;

End;

– Steve McWhirter 

SQLAnywhere 

Как правильно работать с SQLAnywhere через BDE→ODBC→SAW?

Nomadic советует: 

1 ... 106 107 108 109 110 111 112 113 114 ... 123
На этой странице вы можете бесплатно читать книгу Советы по Delphi. Версия 1.4.3 от 1.1.2001 - Валентин Озеров бесплатно.

Оставить комментарий

Рейтинговые книги