Chapter 20 - Project ListServ |
Project Structure
| ListServ.dpr |
program ListServ;
uses
Forms,
ListForm in 'ListForm.pas' ,
ListServ_TLB in 'ListServ_TLB.pas',
ListObj in 'ListObj.pas' ;
begin
Application.Initialize;
Application.CreateForm(TListServForm, ListServForm);
Application.Run;
end.
| ListForm.pas |
unit ListForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TListServForm = class(TForm)
ListBox1: TListBox;
private
public
end;
var
ListServForm: TListServForm;
implementation
end.
| ListServ_TLB.pas |
unit ListServ_TLB;
interface
uses ActiveX, Classes, Graphics, StdVcl, Variants, Windows;
const
ListServMajorVersion = 1;
ListServMinorVersion = 0;
LIBID_ListServ: TGUID = '{3BDFE8EA-CA1A-4918-8643-8F8D5EE2371E}';
IID_IListServer: TGUID = '{DD9E3D16-E878-4ECC-9F1D-CDEE4B2C3B02}';
CLASS_CoListServ: TGUID = '{4D54A7F2-9D93-469A-BEB9-F8C8F25F3408}';
type
IListServer = interface;
IListServerDisp = dispinterface;
CoListServ = IListServer;
IListServer = interface(IDispatch)
['{DD9E3D16-E878-4ECC-9F1D-CDEE4B2C3B02}']
function Get_Items: IStrings; safecall;
procedure Set_Items(const Value: IStrings); safecall;
function Get_Font: IFontDisp; safecall;
procedure Set_Font(const Value: IFontDisp); safecall;
property Items: IStrings read Get_Items write Set_Items;
property Font: IFontDisp read Get_Font write Set_Font;
end;
IListServerDisp = dispinterface
['{DD9E3D16-E878-4ECC-9F1D-CDEE4B2C3B02}']
property Items: IStrings dispid 1;
property Font: IFontDisp dispid 2;
end;
CoCoListServ = class
class function Create: IListServer;
class function CreateRemote(const MachineName: string): IListServer;
end;
implementation
uses ComObj;
class function CoCoListServ.Create: IListServer;
begin
Result := CreateComObject(CLASS_CoListServ) as IListServer;
end;
class function CoCoListServ.CreateRemote(const MachineName: string): IListServer;
begin
Result := CreateRemoteComObject(MachineName, CLASS_CoListServ) as IListServer;
end;
end.
| ListObj.pas |
unit ListObj;
interface
uses
ComObj, ActiveX, StdVCL, Classes, Graphics, ListServ_TLB;
type
TListServer = class(TAutoObject, IListServer)
private
fItems: TStrings;
fFont: TFont;
protected
function Get_Font: IFontDisp; safecall;
function Get_Items: IStrings; safecall;
procedure Set_Font(const Value: IFontDisp); safecall;
procedure Set_Items(const Value: IStrings); safecall;
public
destructor Destroy; override;
procedure Initialize; override;
end;
implementation
uses
ComServ, ListForm, AxCtrls;
procedure TListServer.Initialize;
begin
inherited Initialize;
fItems := TStringList.Create;
fFont := TFont.Create;
end;
destructor TListServer.Destroy;
begin
fItems.Free;
fFont.Free;
inherited Destroy;
end;
function TListServer.Get_Font: IFontDisp;
begin
fFont.Assign (ListServForm.Font);
GetOleFont (fFont, Result);
end;
procedure TListServer.Set_Font(const Value: IFontDisp);
begin
SetOleFont (fFont, Value);
ListServForm.Font.Assign (fFont);
ListServForm.Listbox1.Invalidate;
end;
function TListServer.Get_Items: IStrings;
begin
GetOleStrings (ListServForm.Listbox1.Items, Result);
end;
procedure TListServer.Set_Items(const Value: IStrings);
begin
SetOleStrings (ListServForm.Listbox1.Items, Value);
end;
initialization
TAutoObjectFactory.Create(ComServer, TListServer,
CLASS_CoListServ, ciMultiInstance, tmSingle);
end.
| ListForm.dfm |
object ListServForm: TListServForm
Left = 192
Top = 107
Width = 379
Height = 282
Caption = 'List Server'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
PixelsPerInch = 96
TextHeight = 13
object ListBox1: TListBox
Left = 32
Top = 16
Width = 305
Height = 217
ItemHeight = 13
TabOrder = 0
end
end
|
|