/[projects]/dao/DelphiScanner/Components/tpsystools_4.04/source/COM/_StEclipses.pas
ViewVC logotype

Annotation of /dao/DelphiScanner/Components/tpsystools_4.04/source/COM/_StEclipses.pas

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2671 - (hide annotations) (download)
Tue Aug 25 18:15:15 2015 UTC (8 years, 10 months ago) by torben
File size: 6397 byte(s)
Added tpsystools component
1 torben 2671 (* ***** BEGIN LICENSE BLOCK *****
2     * Version: MPL 1.1
3     *
4     * The contents of this file are subject to the Mozilla Public License Version
5     * 1.1 (the "License"); you may not use this file except in compliance with
6     * the License. You may obtain a copy of the License at
7     * http://www.mozilla.org/MPL/
8     *
9     * Software distributed under the License is distributed on an "AS IS" basis,
10     * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11     * for the specific language governing rights and limitations under the
12     * License.
13     *
14     * The Original Code is TurboPower SysTools
15     *
16     * The Initial Developer of the Original Code is
17     * TurboPower Software
18     *
19     * Portions created by the Initial Developer are Copyright (C) 1996-2002
20     * the Initial Developer. All Rights Reserved.
21     *
22     * Contributor(s):
23     *
24     * ***** END LICENSE BLOCK ***** *)
25    
26     {
27     TODO:
28     1. What is the 'Path' of TStEclipseRecord?
29     }
30    
31     unit _StEclipses;
32    
33     interface
34    
35     uses
36     Windows, ComObj, ActiveX, StEclpse, SysTools_TLB;
37    
38     type
39     TStEclipseRecord = class(TAutoIntfObject, IStEclipseRecord)
40     private
41     FOwner : StEclpse.TStEclipseRecord;
42     public
43     constructor Create(AOwner: StEclpse.TStEclipseRecord);
44     protected
45     function Get_EType: TStEclipseType; safecall;
46     function Get_Magnitude: Double; safecall;
47     function Get_Hemisphere: TStHemisphereType; safecall;
48     function Get_LContacts: IStContactTimes; safecall;
49     function Get_Path: OleVariant; safecall;
50     end;
51    
52     TStContactTimes = class(TAutoIntfObject, IStContactTimes)
53     private
54     FOwner : StEclpse.TStContactTimes;
55     public
56     constructor Create(AOwner: StEclpse.TStContactTimes);
57     protected
58     function Get_UT1: TDateTime; safecall;
59     function Get_UT2: TDateTime; safecall;
60     function Get_FirstContact: TDateTime; safecall;
61     function Get_SecondContact: TDateTime; safecall;
62     function Get_MidEclipse: TDateTime; safecall;
63     function Get_ThirdContact: TDateTime; safecall;
64     function Get_FourthContact: TDateTime; safecall;
65     end;
66    
67     TStEclipses = class(TAutoObject, IStEclipses, IEnumVariant)
68     private
69     FOwner : StEclpse.TStEclipses;
70     FEnumPos : Integer;
71     public
72     procedure Initialize; override;
73     destructor Destroy; override;
74     protected
75     function Get__NewEnum: IUnknown; safecall;
76    
77     { IEnumVariant }
78     function Next(celt: LongInt; out elt; pceltFetched: PLongInt): HResult; stdcall;
79     function Skip(celt: LongInt): HResult; stdcall;
80     function Reset: HResult; stdcall;
81     function Clone(out Enum: IEnumVariant): HResult; stdcall;
82    
83     function Get_Eclipses(Index: Integer): IStEclipseRecord; safecall;
84     procedure FindEclipses(Year: Integer); safecall;
85     function Get_Count: Integer; safecall;
86     end;
87    
88     implementation
89    
90     uses ComServ, StList;
91    
92     constructor TStEclipseRecord.Create(AOwner: StEclpse.TStEclipseRecord);
93     begin
94     inherited Create(ComServer.TypeLib, IStEclipseRecord);
95     FOwner := AOwner;
96     end;
97    
98     function TStEclipseRecord.Get_EType: TStEclipseType;
99     begin
100     Result := TStEclipseType(FOwner.EType);
101     end;
102    
103     function TStEclipseRecord.Get_Magnitude: Double;
104     begin
105     Result := FOwner.Magnitude;
106     end;
107    
108     function TStEclipseRecord.Get_Hemisphere: TStHemisphereType;
109     begin
110     Result := TStHemisphereType(FOwner.Hemisphere);
111     end;
112    
113     function TStEclipseRecord.Get_LContacts: IStContactTimes;
114     begin
115     Result := TStContactTimes.Create(FOwner.LContacts);
116     end;
117    
118     function TStEclipseRecord.Get_Path: OleVariant;
119     begin
120     // Result := 0;
121     end;
122    
123    
124     constructor TStContactTimes.Create(AOwner: StEclpse.TStContactTimes);
125     begin
126     inherited Create(ComServer.TypeLib, IStContactTimes);
127     FOwner := AOwner;
128     end;
129    
130     function TStContactTimes.Get_UT1: TDateTime;
131     begin
132     Result := FOwner.UT1;
133     end;
134    
135     function TStContactTimes.Get_UT2: TDateTime;
136     begin
137     Result := FOwner.UT2;
138     end;
139    
140     function TStContactTimes.Get_FirstContact: TDateTime;
141     begin
142     Result := FOwner.FirstContact;
143     end;
144    
145     function TStContactTimes.Get_SecondContact: TDateTime;
146     begin
147     Result := FOwner.SecondContact;
148     end;
149    
150     function TStContactTimes.Get_MidEclipse: TDateTime;
151     begin
152     Result := FOwner.MidEclipse;
153     end;
154    
155     function TStContactTimes.Get_ThirdContact: TDateTime;
156     begin
157     Result := FOwner.ThirdContact;
158     end;
159    
160     function TStContactTimes.Get_FourthContact: TDateTime;
161     begin
162     Result := FOwner.FourthContact;
163     end;
164    
165     procedure TStEclipses.Initialize;
166     begin
167     inherited Initialize;
168     FOwner := StEclpse.TStEclipses.Create(TStListNode);
169     FEnumPos := 0;
170     end;
171    
172     destructor TStEclipses.Destroy;
173     begin
174     FOwner.Free;
175     inherited Destroy;
176     end;
177    
178     function TStEclipses.Get__NewEnum: IUnknown;
179     begin
180     Result := Self;
181     end;
182    
183     function TStEclipses.Next(celt: LongInt; out elt; pceltFetched: PLongInt): HResult;
184     var
185     V : OleVariant;
186     I : Integer;
187     begin
188     Result := S_FALSE;
189     try
190     if pceltFetched <> nil then
191     pceltFetched^ := 0;
192     for I := 0 to celt - 1 do begin
193     if FEnumPos >= FOwner.Count then begin
194     FEnumPos := 0;
195     Exit;
196     end;
197     V := Get_Eclipses(FEnumPos);
198     TVariantArgList(elt)[I] := TVariantArg(V);
199    
200     // Prevent COM garbage collection
201     TVarData(V).VType := varEmpty;
202     TVarData(V).VInteger := 0;
203    
204     Inc(FEnumPos);
205     if pceltFetched <> nil then
206     Inc(pceltFetched^);
207     end;
208     except
209     end;
210     if (pceltFetched = nil) or ((pceltFetched <> nil) and (pceltFetched^ = celt)) then
211     Result := S_OK;
212     end;
213    
214     function TStEclipses.Skip(celt: LongInt): HResult;
215     begin
216     Inc(FEnumPos, celt);
217     Result := S_OK;
218     end;
219    
220     function TStEclipses.Reset: HResult;
221     begin
222     FEnumPos := 0;
223     Result := S_OK;
224     end;
225    
226     function TStEclipses.Clone(out Enum: IEnumVariant): HResult;
227     begin
228     Enum := nil;
229     Result := S_OK;
230     try
231     Enum := Self.Create;
232     TStEclipses(Enum).FOwner := FOwner;
233     except
234     Result := E_OUTOFMEMORY;
235     end;
236     end;
237    
238     function TStEclipses.Get_Eclipses(Index: Integer): IStEclipseRecord;
239     begin
240     Result := TStEclipseRecord.Create(FOwner.Eclipses[Index]^);
241     end;
242    
243     procedure TStEclipses.FindEclipses(Year: Integer);
244     begin
245     FOwner.FindEclipses(Year);
246     end;
247    
248     function TStEclipses.Get_Count: Integer;
249     begin
250     Result := FOwner.Count;
251     end;
252    
253     initialization
254     TAutoObjectFactory.Create(ComServer, TStEclipses, Class_StEclipses, ciMultiInstance, tmBoth);
255     end.

  ViewVC Help
Powered by ViewVC 1.1.20