home *** CD-ROM | disk | FTP | other *** search
/ The Houseplan Collection / HRCD2005.ISO / data1.cab / Zusatz / 3DS / DATA2.Z / EventDemo.pas < prev    next >
Pascal/Delphi Source File  |  1998-08-06  |  4KB  |  143 lines

  1. unit EventDemo;
  2.  
  3. interface
  4.  
  5. uses
  6.   ArConEventWrapper, Windows, Classes, Forms, SysUtils, Controls, StdCtrls;
  7.  
  8. type
  9.   TMainForm = class(TForm)
  10.     Label1: TLabel;
  11.     NumWnd: TEdit;
  12.     BtnClose: TButton;
  13.     EventList: TListBox;
  14.     Label2: TLabel;
  15.     StoryList: TListBox;
  16.     Label3: TLabel;
  17.     GetClick: TButton;
  18.     Label4: TLabel;
  19.     DLLVersion: TEdit;
  20.     procedure OnFormCreated(Sender: TObject);
  21.     procedure OnFormClose(Sender: TObject; var Action: TCloseAction);
  22.     procedure CloseForm(Sender: TObject);
  23.     procedure GetClickClick(Sender: TObject);
  24.  
  25.   private
  26.     { Private-Deklarationen }
  27.   public
  28.     { Public-Deklarationen }
  29.   end;
  30.  
  31. var
  32.   MainForm: TMainForm;
  33.  
  34. implementation
  35. uses ActiveX, ComObj, MakroUtil, ArCon_TLB;
  36.  
  37. {$R *.DFM}
  38.  
  39. var
  40.   ArConEXE: IArCon;
  41.   EventWrapper: TArConEvents;
  42.   ConnectionID: DWORD;
  43.  
  44. procedure AddEvent(s : String);
  45. begin
  46.      MainForm.EventList.Items.Add(s);
  47. end;
  48.  
  49. procedure TMainForm.OnFormCreated(Sender: TObject);
  50. var
  51.   sink : IUnknown;                      { IUnknown Interface des Ereignis-Objektes }
  52.   cpCont : IConnectionPointContainer;   { Liste aller Verbindugnsm÷glichkeiten }
  53.   conPoint : IConnectionPoint;          { unsere gesuchte Verbindung zu ArCon-Events }
  54.   aProject: IProject;                   { Ein ArCon Projekt }
  55.  
  56.   i, count,
  57.   AnzahlFenster: Integer;
  58.   curBuilding: IBuilding;
  59.   stories: IStoryCollection;
  60.   story: IStory;
  61.   majorVersion, subVersion: DWORD;
  62.  
  63. begin
  64.   { ArCon EXE starten (bzw. Verbindung aufnehmen) }
  65.   CreateOleObject('ArCon.Application.1').QueryInterface(IArCon, ArConEXE);
  66.  
  67.   { Zur Event-Behandlung ein Ereignis-Senken-Objekt erstellen }
  68.   EventWrapper := TArConEvents.Create(AddEvent);
  69.  
  70.   { Das Ereignis-Objekt an die Event-Schnittstelle von ArCon binden }
  71.   ArConEXE.QueryInterface(IConnectionPointContainer, cpCont);
  72.   cpCont.FindConnectionPoint(_ArConEvents, conPoint);
  73.   EventWrapper.GetInterface(IUnknown, sink);
  74.   conPoint.Advise(sink, ConnectionID);
  75.  
  76.   { Anzeige l÷schen }
  77.   EventList.Items.Clear;
  78.  
  79.   { Fertig, ArCon darf uns jetzt Events liefern }
  80.   ArConEXE.StartMe(Handle, '');
  81.  
  82.   { OK, jetzt kommen die Events }
  83.   EventList.Items.Add('Verbindung zu ArCon hergestellt');
  84.  
  85.   { Falls noch kein Projekt geladen ist, erzeugen wir ein Standard-Projekt. }
  86.   if ArConEXE.Get_Mode = AC_NoMode then
  87.   begin
  88.       aProject := ArConEXE.NewProject;
  89.         ArConEXE.CreateProject(aProject);
  90.   end;
  91.  
  92.   AnzahlFenster := ArConEXE.Get_AvailableWindows;
  93.   NumWnd.Text := IntToStr(AnzahlFenster);
  94.  
  95.   curBuilding := ArConEXE.Get_CurrentBuilding;
  96.   if curBuilding <> nil then
  97.   begin
  98.     stories := curBuilding.Get_Stories;
  99.     count := stories.Get_Count;
  100.     for i := 1 to count do
  101.     begin
  102.         story := stories.Item(i);
  103.       StoryList.Items.Add(story.Name);
  104.     end;
  105.   end;
  106.  
  107.   ArConUtilityVersion(majorVersion, subVersion);
  108.   DLLVersion.Text := 'V' + IntToStr(majorVersion) + '.' + IntToStr(subVersion);
  109. end;
  110.  
  111. procedure TMainForm.OnFormClose(Sender: TObject; var Action: TCloseAction);
  112. var
  113.   cpCont : IConnectionPointContainer;
  114.   conPoint : IConnectionPoint;
  115. begin
  116.   { Keine weiteren Events mehr von ArCon }
  117.   ArConEXE.EndMe;
  118.  
  119.   { Die Event-Verbindung mu▀ wieder abgebaut werden, bevor wir
  120.     uns verabschieden. Dazu suchen wir den passenden Verbindungspunkt
  121.     und melden die Verbindung mit der gespeicherten ID ab. }
  122.   ArConEXE.QueryInterface(IConnectionPointContainer, cpCont);
  123.   cpCont.FindConnectionPoint(_ArConEvents, conPoint);
  124.   conPoint.UnAdvise(ConnectionID);
  125. end;
  126.  
  127. procedure TMainForm.CloseForm(Sender: TObject);
  128. begin
  129.     Close;
  130. end;
  131.  
  132. procedure TMainForm.GetClickClick(Sender: TObject);
  133. var
  134.    bmp : HBITMAP;
  135.    v   : VARIANT;
  136. begin
  137.    bmp := LoadBitmap(HInstance, 'IDB_GETCLICK');
  138.    ArConPictureFromBitmap(bmp, v);
  139.    ArConEXE.GetOneClick('Bitte klicken Sie einen Punkt an', v, 0);
  140. end;
  141.  
  142. end.
  143.