KnigaRead.com/
KnigaRead.com » Компьютеры и Интернет » Программирование » Валентин Озеров - Советы по Delphi. Версия 1.4.3 от 1.1.2001

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

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Валентин Озеров, "Советы по Delphi. Версия 1.4.3 от 1.1.2001" бесплатно, без регистрации.
Перейти на страницу:

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 советует: 

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*