home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Houseplan Collection
/
HRCD2005.ISO
/
data1.cab
/
Zusatz
/
3DS
/
DATA2.Z
/
EventDemo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1998-08-06
|
4KB
|
143 lines
unit EventDemo;
interface
uses
ArConEventWrapper, Windows, Classes, Forms, SysUtils, Controls, StdCtrls;
type
TMainForm = class(TForm)
Label1: TLabel;
NumWnd: TEdit;
BtnClose: TButton;
EventList: TListBox;
Label2: TLabel;
StoryList: TListBox;
Label3: TLabel;
GetClick: TButton;
Label4: TLabel;
DLLVersion: TEdit;
procedure OnFormCreated(Sender: TObject);
procedure OnFormClose(Sender: TObject; var Action: TCloseAction);
procedure CloseForm(Sender: TObject);
procedure GetClickClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
MainForm: TMainForm;
implementation
uses ActiveX, ComObj, MakroUtil, ArCon_TLB;
{$R *.DFM}
var
ArConEXE: IArCon;
EventWrapper: TArConEvents;
ConnectionID: DWORD;
procedure AddEvent(s : String);
begin
MainForm.EventList.Items.Add(s);
end;
procedure TMainForm.OnFormCreated(Sender: TObject);
var
sink : IUnknown; { IUnknown Interface des Ereignis-Objektes }
cpCont : IConnectionPointContainer; { Liste aller Verbindugnsm÷glichkeiten }
conPoint : IConnectionPoint; { unsere gesuchte Verbindung zu ArCon-Events }
aProject: IProject; { Ein ArCon Projekt }
i, count,
AnzahlFenster: Integer;
curBuilding: IBuilding;
stories: IStoryCollection;
story: IStory;
majorVersion, subVersion: DWORD;
begin
{ ArCon EXE starten (bzw. Verbindung aufnehmen) }
CreateOleObject('ArCon.Application.1').QueryInterface(IArCon, ArConEXE);
{ Zur Event-Behandlung ein Ereignis-Senken-Objekt erstellen }
EventWrapper := TArConEvents.Create(AddEvent);
{ Das Ereignis-Objekt an die Event-Schnittstelle von ArCon binden }
ArConEXE.QueryInterface(IConnectionPointContainer, cpCont);
cpCont.FindConnectionPoint(_ArConEvents, conPoint);
EventWrapper.GetInterface(IUnknown, sink);
conPoint.Advise(sink, ConnectionID);
{ Anzeige l÷schen }
EventList.Items.Clear;
{ Fertig, ArCon darf uns jetzt Events liefern }
ArConEXE.StartMe(Handle, '');
{ OK, jetzt kommen die Events }
EventList.Items.Add('Verbindung zu ArCon hergestellt');
{ Falls noch kein Projekt geladen ist, erzeugen wir ein Standard-Projekt. }
if ArConEXE.Get_Mode = AC_NoMode then
begin
aProject := ArConEXE.NewProject;
ArConEXE.CreateProject(aProject);
end;
AnzahlFenster := ArConEXE.Get_AvailableWindows;
NumWnd.Text := IntToStr(AnzahlFenster);
curBuilding := ArConEXE.Get_CurrentBuilding;
if curBuilding <> nil then
begin
stories := curBuilding.Get_Stories;
count := stories.Get_Count;
for i := 1 to count do
begin
story := stories.Item(i);
StoryList.Items.Add(story.Name);
end;
end;
ArConUtilityVersion(majorVersion, subVersion);
DLLVersion.Text := 'V' + IntToStr(majorVersion) + '.' + IntToStr(subVersion);
end;
procedure TMainForm.OnFormClose(Sender: TObject; var Action: TCloseAction);
var
cpCont : IConnectionPointContainer;
conPoint : IConnectionPoint;
begin
{ Keine weiteren Events mehr von ArCon }
ArConEXE.EndMe;
{ Die Event-Verbindung mu▀ wieder abgebaut werden, bevor wir
uns verabschieden. Dazu suchen wir den passenden Verbindungspunkt
und melden die Verbindung mit der gespeicherten ID ab. }
ArConEXE.QueryInterface(IConnectionPointContainer, cpCont);
cpCont.FindConnectionPoint(_ArConEvents, conPoint);
conPoint.UnAdvise(ConnectionID);
end;
procedure TMainForm.CloseForm(Sender: TObject);
begin
Close;
end;
procedure TMainForm.GetClickClick(Sender: TObject);
var
bmp : HBITMAP;
v : VARIANT;
begin
bmp := LoadBitmap(HInstance, 'IDB_GETCLICK');
ArConPictureFromBitmap(bmp, v);
ArConEXE.GetOneClick('Bitte klicken Sie einen Punkt an', v, 0);
end;
end.