[prev in list] [next in list] [prev in thread] [next in thread] 

List:       xaudio-sdk
Subject:    Re: [xaudio-sdk] messages
From:       Mark Chambers <mark.chambers () objectmastery ! com>
Date:       2001-05-29 0:32:45
[Download RAW message or body]

Michael Schlagmueller wrote:

> Hi ! Does anyone know how to communticate between two different
> (self-written) applications ? I guess I have to use windows messages
> (OS: WIN98) but I don't know how to do it.The easiest example: the
> first program has a button und when I press this button a function in
> the 2nd program will be executed.Does anyone know how to handle that ?
> (i'm using Delphi 4 but i can also code C++) Greetz  Michael

This is off topic but a very useful technique and short enough to post.
Sorry to anyone who is not interested.

You could use a windows message and an atom.  The following example
allows a client to send a filename and line number to a delphi
designtime package to open the specified file at the specified line.  We
use it to allow our test harness to interact with delphi.  It should
give you a good example of how to pass limited information from one app
to another.


p.s. there is some debugging code in here - you should be able to just
delete any showmessages.


This is the sender unit

unit FTest;

interface

uses
  Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

uses
    omIDEControllerClients

  ;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowFileLine(Edit1.Text, StrToInt(Edit2.Text));
end;

end.


This is the 'sender' helper unit


unit omIDEControllerClients;

interface

procedure ShowFileLine(FileName: string; LineNum: Integer);

implementation

uses
    SysUtils
  , Windows
  , Messages
  ;

procedure ShowFileLine(FileName: string; LineNum: Integer);
var
  WmX: Word;
  Buffer: array[0..255] of char;
  Atom: TAtom;
  Str: string;
begin
  Wmx:= RegisterWindowMessage('omIDEController');
  Str:= FileName + '@' + IntToStr(LineNum);
  Atom:= GlobalAddAtom(StrPCopy(Buffer, Str));

  SendMessage(HWND_Broadcast, WmX, 0, Atom);
  GlobalDeleteAtom(Atom);
end;

and this is the receiver (which we build into a package, but that you
can put into one of the forms in your receiving application).

unit omIDEControllers;

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
  StdCtrls, ComCtrls{, ToolWin, ImgList};


type
  TFormIDEController = class(TForm)
  public
    procedure DefaultHandler(var Message); override;
  end;


var
  FormIDEController: TFormIDEController = nil;


implementation
{$R *.DFM}
uses
    ExptIntf
  , EditIntf
  , ToolIntf
  , ToolsAPI
  , IniFiles
  , omURLs
  , omStrUtils
  , omMathUtils
  ;


procedure ShowMessage(Str: string);
begin
//  Dialogs.ShowMessage(Str);
end;


procedure TFormIDEController.DefaultHandler(var Message);
var
  Buffer: array[0..255] of char;
  WmX: Word;
  Str: string;
  TargetFileName: string;
  LineStr: string;
  LineNum: Integer;
  Index: Integer;
  ProjectDof: TIniFile;
  FileName: TomFilename;

  FModIntf: TIModuleInterface;
  FEditIntf: TIEditorInterface;
  EditView: TIEditView;
  EditPos: TEditPos;
  Exename: string;
  UnitName: string;
  ProjectDir: string;
  SearchPath: string;
  TempPath: string;

  Found: Boolean;

begin
  inherited DefaultHandler(Message);

  Wmx:= RegisterWindowMessage('omIDEController');

  with TMessage(Message) do begin
    if Msg = WmX then begin
      if GlobalGetAtomName(lParam, Buffer, 255) <> 0 then begin
        SetForegroundWindow(Application.Handle);

        Str:= StrPas(Buffer);
        Index:= Pos('@', Str);
        TargetFileName:= Copy(Str, 1, Index-1);
        LineStr:= Copy(Str, Index+1, Maxint);
        LineNum:= StrToInt(LineStr);
        ShowMessage('TargetFileName = ' + TargetFileName);

        ProjectDir := ExtractFileDir(ToolServices.GetProjectName);
        ShowMessage('ProjectName = ' + ToolServices.GetProjectName);

        Found:= False;
        FileName:= TomFilename.Create;
        try
          // make full filename if TargetFilename is relative
          if (ExtractFilename(TargetFileName) <> TargetFileName) then
begin
            ChDir(ProjectDir);
            TargetFileName := ExpandFilename(TargetFileName);
            if (not FileExists(TargetFileName)) then begin
              Dialogs.ShowMessage('File "' + TargetFilename + '" not
found.');
              exit;
            end
            else begin
              Found:= true;
              Filename.Full:= TargetFileName;
            end
          end;

          // see if the file is mentioned in the project
          if not Found then begin
            for Index:= 0 to ToolServices.GetUnitCount - 1 do begin
              UnitName:= ToolServices.GetUnitName(Index);
              FileName.Full:= UnitName;
              ShowMessage(
                  'Unit[' + IntToStr(Index) + ']:' + UnitName +
                  #13 +
                  'Partial: "' + Filename.Partial + '"' +
                  #13 +
                  'TargetFileName: "' + TargetFileName + '"'
                  );
              if SameText(FileName.Partial, TargetFileName) then begin
                Found:= True;
                break;
              end;
            end;
          end;

          // see if we can find it on the path
          if not Found then begin
            ExeName:= ParamStr(0);
            Index:= Pos('Delphi5', ExeName);
            Delete(ExeName, Index+7, MaxInt);

            ShowMessage('$(Delphi)=' + ExeName);

            FileName.Full:= ToolServices.GetProjectName;
            FileName.Extension:= 'dof';
            ProjectDof:= TInifile.Create(FileName.Full);
            try
              SearchPath:= ProjectDof.ReadString('Directories',
'SearchPath', '');

              SubstituteText('$(Delphi)', ExeName, SearchPath, true);
              ShowMessage('SearchPath = ' + SearchPath);

              TempPath:= FileSearch(TargetFileName, SearchPath);
              ShowMessage('FileSearch: for "' + TargetFileName + ' -> "'
+ TempPath + '"');
              Found:= TempPath <> '';
              Filename.Full:= TempPath;

            finally
              FreeAndNil(ProjectDof);
            end;
          end;

          if not found then begin
            Dialogs.ShowMessage('File "' + TargetFilename + '" not
found.');
            exit;
          end;

          ShowMessage('Opening...' + FileName.Full);
          Toolservices.OpenFile(FileName.Full);
          FModIntf := ToolServices.GetModuleInterface(FileName.Full);
          try
            if not Assigned(FModIntf) then begin
              Exit;
            end;
            FModIntf.ShowSource;
            FEditIntf := FModIntf.GetEditorInterface;
            if not Assigned(FEditIntf) then begin
              Exit;
            end;
            EditView := FEditIntf.GetView(0);
            if not Assigned(EditView) then begin
              Exit;
            end;
            EditPos.Col := 1;
            EditPos.Line := Max(1, LineNum - 10);
            EditView.TopPos := EditPos;

            EditPos.Col := 1;
            EditPos.Line := LineNum;
            EditView.CursorPos := EditPos;
            FModIntf.ShowSource;
          finally
            FModIntf.Free;
          end;

        finally
          FreeAndNil(FileName);
        end;
      end;
    end;
  end;
end;


initialization
  if (BorlandIDEServices <> nil) then begin
    FormIDEController := TFormIDEController.Create(nil);
  end;

finalization
  if FormIDEController <> nil then begin
    FormIDEController.Free;
  end;

end.

[Attachment #3 (text/html)]

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<body bgcolor="#FFFFFF">
&nbsp;
<p>Michael Schlagmueller wrote:
<blockquote TYPE=CITE><style></style>
<font face="Arial"><font size=-1>Hi
!</font></font>&nbsp;<font face="Arial"><font size=-1>Does anyone know
how to communticate between two different (self-written) applications ?
I guess I have to use windows messages (OS: WIN98) but I don't know how
to do it.</font></font><font face="Arial"><font size=-1>The easiest example:
the first program has a button und when I press this button a function
in the 2nd program will be executed.</font></font><font face="Arial"><font \
size=-1>Does anyone know how to handle that ? (i'm using Delphi 4 but i can also code
C++)</font></font>&nbsp;<font face="Arial"><font size=-1>Greetz</font></font><font \
face="Arial"><font size=-1>&nbsp; Michael</font></font></blockquote>

<p><br>This is off topic but a very useful technique and short enough to
post.&nbsp; Sorry to anyone who is not interested.
<p>You could use a windows message and an atom.&nbsp; The following example
allows a client to send a filename and line number to a delphi designtime
package to open the specified file at the specified line.&nbsp; We use
it to allow our test harness to interact with delphi.&nbsp; It should give
you a good example of how to pass limited information from one app to another.
<br>&nbsp;
<p>p.s. there is some debugging code in here - you should be able to just
delete any showmessages.
<br>&nbsp;
<p>This is the sender unit
<p><tt><font color="#3333FF">unit FTest;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">interface</font></tt><tt><font color="#3333FF"></font></tt> \
<p><tt><font color="#3333FF">uses</font></tt> <br><tt><font color="#3333FF">&nbsp; \
Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,</font></tt>
<br><tt><font color="#3333FF">&nbsp; StdCtrls;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">type</font></tt>
<br><tt><font color="#3333FF">&nbsp; TForm1 = class(TForm)</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; Button1: TButton;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; Edit1: TEdit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; Label1: TLabel;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; Edit2: TEdit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; procedure Button1Click(Sender:
TObject);</font></tt>
<br><tt><font color="#3333FF">&nbsp; private</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; { Private declarations
}</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp; public</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; { Public declarations
}</font></tt>
<br><tt><font color="#3333FF">&nbsp; end;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">var</font></tt>
<br><tt><font color="#3333FF">&nbsp; Form1: TForm1;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">implementation</font></tt><tt><font color="#3333FF"></font></tt> \
<p><tt><font color="#3333FF">{$R *.DFM}</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">uses</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; omIDEControllerClients</font></tt>
<br><tt><font color="#3333FF">&nbsp;</font></tt>
<br><tt><font color="#3333FF">&nbsp; ;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">procedure \
TForm1.Button1Click(Sender: TObject);</font></tt> <br><tt><font \
color="#3333FF">begin</font></tt> <br><tt><font color="#3333FF">&nbsp; \
ShowFileLine(Edit1.Text, StrToInt(Edit2.Text));</font></tt> <br><tt><font \
color="#3333FF">end;</font></tt><tt><font color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">end.</font></tt> <br><tt><font \
color="#3333FF"></font></tt>&nbsp;<tt><font color="#3333FF"></font></tt> <p>This is \
the 'sender' helper unit <br>&nbsp;<font color="#3333FF"></font>
<p><tt><font color="#3333FF">unit omIDEControllerClients;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">interface</font></tt><tt><font color="#3333FF"></font></tt> \
<p><tt><font color="#3333FF">procedure ShowFileLine(FileName: string; LineNum: \
Integer);</font></tt><tt><font color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">implementation</font></tt><tt><font color="#3333FF"></font></tt> \
<p><tt><font color="#3333FF">uses</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp; SysUtils</font></tt> <br><tt><font \
color="#3333FF">&nbsp; , Windows</font></tt> <br><tt><font color="#3333FF">&nbsp; , \
Messages</font></tt> <br><tt><font color="#3333FF">&nbsp; ;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">procedure \
ShowFileLine(FileName: string; LineNum: Integer);</font></tt>
<br><tt><font color="#3333FF">var</font></tt>
<br><tt><font color="#3333FF">&nbsp; WmX: Word;</font></tt>
<br><tt><font color="#3333FF">&nbsp; Buffer: array[0..255] of char;</font></tt>
<br><tt><font color="#3333FF">&nbsp; Atom: TAtom;</font></tt>
<br><tt><font color="#3333FF">&nbsp; Str: string;</font></tt>
<br><tt><font color="#3333FF">begin</font></tt>
<br><tt><font color="#3333FF">&nbsp; Wmx:= \
RegisterWindowMessage('omIDEController');</font></tt> <br><tt><font \
color="#3333FF">&nbsp; Str:= FileName + '@' + IntToStr(LineNum);</font></tt> \
<br><tt><font color="#3333FF">&nbsp; Atom:= GlobalAddAtom(StrPCopy(Buffer, \
Str));</font></tt><tt><font color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp; SendMessage(HWND_Broadcast, WmX, 0, Atom);</font></tt>
<br><tt><font color="#3333FF">&nbsp; GlobalDeleteAtom(Atom);</font></tt>
<br><tt><font color="#3333FF">end;</font></tt>
<p>and this is the receiver (which we build into a package, but that you
can put into one of the forms in your receiving application).
<p><tt><font color="#3333FF">unit omIDEControllers;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">interface</font></tt>
<br><tt><font color="#3333FF">uses</font></tt>
<br><tt><font color="#3333FF">&nbsp; Windows, Messages, SysUtils, Classes,
Graphics, Controls, Forms, Dialogs,</font></tt>
<br><tt><font color="#3333FF">&nbsp; StdCtrls, ComCtrls{, ToolWin, \
ImgList};</font></tt> <br><tt><font color="#3333FF"></font></tt>&nbsp;<tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">type</font></tt>
<br><tt><font color="#3333FF">&nbsp; TFormIDEController = class(TForm)</font></tt>
<br><tt><font color="#3333FF">&nbsp; public</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; procedure DefaultHandler(var
Message); override;</font></tt>
<br><tt><font color="#3333FF">&nbsp; end;</font></tt>
<br><tt><font color="#3333FF"></font></tt>&nbsp;<tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">var</font></tt>
<br><tt><font color="#3333FF">&nbsp; FormIDEController: TFormIDEController
= nil;</font></tt>
<br><tt><font color="#3333FF"></font></tt>&nbsp;<tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">implementation</font></tt>
<br><tt><font color="#3333FF">{$R *.DFM}</font></tt>
<br><tt><font color="#3333FF">uses</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; ExptIntf</font></tt>
<br><tt><font color="#3333FF">&nbsp; , EditIntf</font></tt>
<br><tt><font color="#3333FF">&nbsp; , ToolIntf</font></tt>
<br><tt><font color="#3333FF">&nbsp; , ToolsAPI</font></tt>
<br><tt><font color="#3333FF">&nbsp; , IniFiles</font></tt>
<br><tt><font color="#3333FF">&nbsp; , omURLs</font></tt>
<br><tt><font color="#3333FF">&nbsp; , omStrUtils</font></tt>
<br><tt><font color="#3333FF">&nbsp; , omMathUtils</font></tt>
<br><tt><font color="#3333FF">&nbsp; ;</font></tt>
<br><tt><font color="#3333FF"></font></tt>&nbsp;<tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">procedure ShowMessage(Str: \
string);</font></tt> <br><tt><font color="#3333FF">begin</font></tt>
<br><tt><font color="#3333FF">//&nbsp; Dialogs.ShowMessage(Str);</font></tt>
<br><tt><font color="#3333FF">end;</font></tt>
<br><tt><font color="#3333FF"></font></tt>&nbsp;<tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">procedure \
TFormIDEController.DefaultHandler(var Message);</font></tt>
<br><tt><font color="#3333FF">var</font></tt>
<br><tt><font color="#3333FF">&nbsp; Buffer: array[0..255] of char;</font></tt>
<br><tt><font color="#3333FF">&nbsp; WmX: Word;</font></tt>
<br><tt><font color="#3333FF">&nbsp; Str: string;</font></tt>
<br><tt><font color="#3333FF">&nbsp; TargetFileName: string;</font></tt>
<br><tt><font color="#3333FF">&nbsp; LineStr: string;</font></tt>
<br><tt><font color="#3333FF">&nbsp; LineNum: Integer;</font></tt>
<br><tt><font color="#3333FF">&nbsp; Index: Integer;</font></tt>
<br><tt><font color="#3333FF">&nbsp; ProjectDof: TIniFile;</font></tt>
<br><tt><font color="#3333FF">&nbsp; FileName: TomFilename;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">&nbsp; FModIntf: \
TIModuleInterface;</font></tt> <br><tt><font color="#3333FF">&nbsp; FEditIntf: \
TIEditorInterface;</font></tt> <br><tt><font color="#3333FF">&nbsp; EditView: \
TIEditView;</font></tt> <br><tt><font color="#3333FF">&nbsp; EditPos: \
TEditPos;</font></tt> <br><tt><font color="#3333FF">&nbsp; Exename: \
string;</font></tt> <br><tt><font color="#3333FF">&nbsp; UnitName: \
string;</font></tt> <br><tt><font color="#3333FF">&nbsp; ProjectDir: \
string;</font></tt> <br><tt><font color="#3333FF">&nbsp; SearchPath: \
string;</font></tt> <br><tt><font color="#3333FF">&nbsp; TempPath: \
string;</font></tt><tt><font color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp; Found: Boolean;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">begin</font></tt>
<br><tt><font color="#3333FF">&nbsp; inherited \
DefaultHandler(Message);</font></tt><tt><font color="#3333FF"></font></tt> \
<p><tt><font color="#3333FF">&nbsp; Wmx:= \
RegisterWindowMessage('omIDEController');</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">&nbsp; with \
TMessage(Message) do begin</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp; if Msg = WmX then begin</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if GlobalGetAtomName(lParam, Buffer, \
255) &lt;> 0 then begin</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
SetForegroundWindow(Application.Handle);</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Str:= \
StrPas(Buffer);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Index:= Pos('@', \
Str);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TargetFileName:= Copy(Str, \
1, Index-1);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LineStr:= Copy(Str, \
Index+1, Maxint);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LineNum:= \
StrToInt(LineStr);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
ShowMessage('TargetFileName = ' + TargetFileName);</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProjectDir := \
ExtractFileDir(ToolServices.GetProjectName);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ShowMessage('ProjectName = \
' + ToolServices.GetProjectName);</font></tt><tt><font color="#3333FF"></font></tt> \
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Found:= \
False;</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileName:= \
TomFilename.Create;</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// make full filename if TargetFilename is relative</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if (ExtractFilename(TargetFileName) &lt;> TargetFileName) then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ChDir(ProjectDir);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 TargetFileName := ExpandFilename(TargetFileName);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if (not FileExists(TargetFileName)) then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Dialogs.ShowMessage('File "' + TargetFilename + '" not found.');</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 exit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 else begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Found:= true;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Filename.Full:= TargetFileName;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// see if the file is mentioned in the project</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if not Found then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 for Index:= 0 to ToolServices.GetUnitCount - 1 do begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 UnitName:= ToolServices.GetUnitName(Index);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 FileName.Full:= UnitName;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ShowMessage(</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 'Unit[' + IntToStr(Index) + ']:' + UnitName +</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 #13 +</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 'Partial: "' + Filename.Partial + '"' +</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 #13 +</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 'TargetFileName: "' + TargetFileName + '"'</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 );</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if SameText(FileName.Partial, TargetFileName) then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Found:= True;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 break;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
// see if we can find it on the path</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if not Found then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ExeName:= ParamStr(0);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Index:= Pos('Delphi5', ExeName);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Delete(ExeName, Index+7, MaxInt);</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ShowMessage('$(Delphi)=' + ExeName);</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
FileName.Full:= ToolServices.GetProjectName;</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
FileName.Extension:= 'dof';</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
ProjectDof:= TInifile.Create(FileName.Full);</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
try</font></tt> <br><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 SearchPath:= ProjectDof.ReadString('Directories', 'SearchPath', \
'');</font></tt><tt><font color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 SubstituteText('$(Delphi)', ExeName, SearchPath, true);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ShowMessage('SearchPath = ' + SearchPath);</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 TempPath:= FileSearch(TargetFileName, SearchPath);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ShowMessage('FileSearch: for "' + TargetFileName + ' -> "' + TempPath +
'"');</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Found:= TempPath &lt;> '';</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Filename.Full:= TempPath;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 finally</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 FreeAndNil(ProjectDof);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
if not found then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Dialogs.ShowMessage('File "' + TargetFilename + '" not found.');</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 exit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ShowMessage('Opening...' + FileName.Full);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Toolservices.OpenFile(FileName.Full);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FModIntf := ToolServices.GetModuleInterface(FileName.Full);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
try</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if not Assigned(FModIntf) then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Exit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 FModIntf.ShowSource;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 FEditIntf := FModIntf.GetEditorInterface;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if not Assigned(FEditIntf) then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Exit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditView := FEditIntf.GetView(0);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 if not Assigned(EditView) then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 Exit;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditPos.Col := 1;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditPos.Line := Max(1, LineNum - 10);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditView.TopPos := EditPos;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditPos.Col := 1;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditPos.Line := LineNum;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 EditView.CursorPos := EditPos;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 FModIntf.ShowSource;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
finally</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 FModIntf.Free;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end;</font></tt><tt><font color="#3333FF"></font></tt>
<p><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
finally</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FreeAndNil(FileName);</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; end;</font></tt>
<br><tt><font color="#3333FF">&nbsp; end;</font></tt>
<br><tt><font color="#3333FF">end;</font></tt>
<br><tt><font color="#3333FF"></font></tt>&nbsp;<tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">initialization</font></tt>
<br><tt><font color="#3333FF">&nbsp; if (BorlandIDEServices &lt;> nil)
then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; FormIDEController := \
TFormIDEController.Create(nil);</font></tt> <br><tt><font color="#3333FF">&nbsp; \
end;</font></tt><tt><font color="#3333FF"></font></tt> <p><tt><font \
color="#3333FF">finalization</font></tt> <br><tt><font color="#3333FF">&nbsp; if \
FormIDEController &lt;> nil then begin</font></tt>
<br><tt><font color="#3333FF">&nbsp;&nbsp;&nbsp; FormIDEController.Free;</font></tt>
<br><tt><font color="#3333FF">&nbsp; end;</font></tt><tt><font \
color="#3333FF"></font></tt> <p><tt><font color="#3333FF">end.</font></tt>
</body>
</html>


_______________________________________________
xaudio-sdk mailing list
xaudio-sdk@mpegtv.com
http://mailman.bok.net/mailman/listinfo/xaudio-sdk


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic