Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/Round.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.14 - (show annotations) (download) (as text)
Sat Jan 15 06:16:07 2005 UTC (19 years, 3 months ago) by genyakun
Branch: MAIN
Changes since 1.13: +5 -0 lines
File MIME type: text/x-pascal
巡回出来る数に制限を設けた(500個)

1 unit Round;
2
3 interface
4
5 uses
6 Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7 SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil, Dialogs;
8
9 type
10 TRoundDialog = class(TForm)
11 RoundPopupMenu: TPopupMenu;
12 C1: TMenuItem;
13 P1: TMenuItem;
14 N1: TMenuItem;
15 D1: TMenuItem;
16 ItemIcon16: TImageList;
17 Panel1: TPanel;
18 Label1: TLabel;
19 Label2: TLabel;
20 RoundNameComboBox: TComboBox;
21 Panel2: TPanel;
22 Panel3: TPanel;
23 AllSelectButton: TButton;
24 AllCancelButton: TButton;
25 RoundDeleteButton: TButton;
26 Panel4: TPanel;
27 Button1: TButton;
28 RoundButton: TButton;
29 StatusBar1: TStatusBar;
30 RoundListView: TListView;
31 procedure RoundButtonClick(Sender: TObject);
32 procedure FormCreate(Sender: TObject);
33 procedure RoundListViewChange(Sender: TObject; Item: TListItem;
34 Change: TItemChange);
35 procedure AllSelectButtonClick(Sender: TObject);
36 procedure AllCancelButtonClick(Sender: TObject);
37 procedure RoundNameComboBoxChange(Sender: TObject);
38 procedure RoundDeleteButtonClick(Sender: TObject);
39 procedure RoundListViewColumnClick(Sender: TObject;
40 Column: TListColumn);
41 procedure RoundListViewCompare(Sender: TObject; Item1,
42 Item2: TListItem; Data: Integer; var Compare: Integer);
43 private
44 { Private 鐃緒申鐃緒申 }
45 FColumnToSort: Integer;
46 FSortOrder: Boolean;
47 function GetRoundCount: Integer;
48 procedure SetRoundItem(RoundName: string);
49 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
50 public
51 { Public 鐃緒申鐃緒申 }
52 end;
53
54 //var
55 // RoundDialog: TRoundDialog;
56
57 implementation
58
59 uses
60 Giko, BoardGroup, RoundData, Math;
61
62 {$R *.DFM}
63
64 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
65 var
66 i: Integer;
67 cnt: Integer;
68 msg: string;
69 Board: TBoard;
70 ThreadItem: TThreadItem;
71 RoundItem: TRoundItem;
72 begin
73 if CompareTime(GikoForm.LastRoundTime, Now, 3) then begin
74 msg := '鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
75 MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
76 Exit;
77 end;
78 //{$IF Defined(FRCRND) }
79 // Giko.GikoForm.LoginAction.Checked := true; // 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?
80 //{$IFEND}
81
82 cnt := GetRoundCount;
83 if cnt = 0 then begin
84 msg := '鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
85 MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
86 Exit;
87 end;
88 if cnt > 500 then begin
89 msg := '500鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
90 MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
91 Exit;
92 end;
93
94 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
95 RoundItem := RoundList.Items[i, grtBoard];
96 if not RoundItem.BoolData then Continue;
97 if not Giko.GikoForm.LoginAction.Checked then Exit;
98 if RoundItem.RoundType = grtBoard then begin
99 //Board := TBoard( RoundItem.Item );
100 Board := BBSsFindBoardFromURL(RoundItem.URL);
101 if Board <> nil then begin
102 if not Board.IsThreadDatRead then
103 GikoSys.ReadSubjectFile(Board);
104 GikoForm.DownloadList(Board);
105 end;
106 end;
107 end;
108 for i := 0 to RoundList.Count[grtItem] - 1 do begin
109 RoundItem := RoundList.Items[i, grtItem];
110 if not RoundItem.BoolData then Continue;
111 // if not Giko.GikoForm.LoginAction.Checked then Exit;
112 if RoundItem.RoundType = grtItem then begin
113 //ThreadItem := TThreadItem( RoundItem.Item );
114 ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
115 if ThreadItem <> nil then begin
116 // GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
117 GikoForm.DownloadContent(ThreadItem);
118 end;
119 end;
120 end;
121 GikoForm.LastRoundTime := Now;
122 Close;
123 end;
124
125 function TRoundDialog.GetRoundCount: Integer;
126 var
127 i: Integer;
128 RoundItem: TRoundItem;
129 begin
130 Result := 0;
131 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
132 RoundItem := RoundList.Items[i, grtBoard];
133 if RoundItem.BoolData then
134 Result := Result + 1;
135 end;
136 for i := 0 to RoundList.Count[grtItem] - 1 do begin
137 RoundItem := RoundList.Items[i, grtItem];
138 if RoundItem.BoolData then
139 Result := Result + 1;
140 end;
141 end;
142
143 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
144 const
145 AMin: Double = (1 / 24 / 60);
146 var
147 d: TDateTime;
148 begin
149 d := Time1 + (AMin * MarginMin);
150 Result := Time2 < d;
151 end;
152
153 procedure TRoundDialog.FormCreate(Sender: TObject);
154 var
155 i: Integer;
156 begin
157 FColumnToSort := -1;
158 RoundNameComboBox.Items.Add('鐃?鐃緒申鐃緒申鐃緒申鐃?');
159 for i := 0 to RoundList.RoundNameList.Count - 1 do
160 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
161 for i := 0 to RoundList.Count[grtBoard] - 1 do
162 RoundList.Items[i, grtBoard].BoolData := False;
163 for i := 0 to RoundList.Count[grtItem] - 1 do
164 RoundList.Items[i, grtItem].BoolData := False;
165 RoundNameComboBox.ItemIndex := 0;
166 SetRoundItem('');
167 RoundList.SaveRoundFile;
168 end;
169
170 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
171 Item: TListItem; Change: TItemChange);
172 var
173 RoundItem: TRoundItem;
174 begin
175 if TObject(Item.Data) is TRoundItem then begin
176 RoundItem := TRoundItem(Item.Data);
177 RoundItem.BoolData := Item.Checked;
178 end;
179 end;
180
181 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
182 var
183 i: Integer;
184 RoundItem: TRoundItem;
185 ListChangeEvent: TLVChangeEvent;
186 begin
187 ListChangeEvent := RoundListView.OnChange;
188 RoundListView.OnChange := nil;
189 try
190 for i := 0 to RoundListView.Items.Count - 1 do begin
191 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
192 RoundItem := TRoundItem(RoundListView.Items[i].Data);
193 RoundItem.BoolData := True;
194 RoundListView.Items[i].Checked := True;
195 end;
196 end;
197 finally
198 RoundListView.OnChange := ListChangeEvent;
199 end;
200 end;
201
202 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
203 var
204 i: Integer;
205 RoundItem: TRoundItem;
206 ListChangeEvent: TLVChangeEvent;
207 begin
208 ListChangeEvent := RoundListView.OnChange;
209 RoundListView.OnChange := nil;
210 try
211 for i := 0 to RoundListView.Items.Count - 1 do begin
212 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
213 RoundItem := TRoundItem(RoundListView.Items[i].Data);
214 RoundItem.BoolData := False;
215 RoundListView.Items[i].Checked := False;
216 end;
217 end;
218 finally
219 RoundListView.OnChange := ListChangeEvent;
220 end;
221 end;
222
223 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
224 begin
225 if RoundNameComboBox.ItemIndex = 0 then
226 SetRoundItem('')
227 else
228 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
229 end;
230
231 procedure TRoundDialog.SetRoundItem(RoundName: string);
232 var
233 ListItem: TListItem;
234 i: Integer;
235 ListChangeEvent: TLVChangeEvent;
236 begin
237 ListChangeEvent := RoundListView.OnChange;
238 RoundListView.OnChange := nil;
239 try
240 RoundListView.Clear;
241 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
242 if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
243 ListItem := RoundListView.Items.Add;
244 ListItem.Data := RoundList.Items[i, grtBoard];
245 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
246 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
247 ListItem.SubItems.Add('-');
248 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
249 ListItem.ImageIndex := 0;
250 end;
251 end;
252 for i := 0 to RoundList.Count[grtItem] - 1 do begin
253 if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
254 ListItem := RoundListView.Items.Add;
255 ListItem.Data := RoundList.Items[i, grtItem];
256 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
257 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
258 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
259 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
260 ListItem.ImageIndex := 1;
261 end;
262 end;
263 finally
264 RoundListView.OnChange := ListChangeEvent;
265 end;
266 end;
267
268 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
269 var
270 // Board: TBoard;
271 // ThreadItem: TThreadItem;
272 RoundItem: TRoundItem;
273 ListChangeEvent: TLVChangeEvent;
274 begin
275 ListChangeEvent := RoundListView.OnChange;
276 RoundListView.OnChange := nil;
277 try
278 if RoundListView.Selected = nil then
279 Exit;
280 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
281 RoundItem := TRoundItem(RoundListView.Selected.Data);
282 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
283 {
284 if RoundItem.RoundType = grtBoard then begin
285 //Board := TBoard( RoundItem.Item );
286 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
287 Board.Round := False;
288 Board.RoundName := '';
289 end else begin
290 //ThreadItem := TThreadItem( RoundItem.Item );
291 RoundList.Delete(ThreadItem);
292 ThreadItem.Round := False;
293 ThreadItem.RoundName := '';
294 end;
295 }
296 GikoForm.ListView.Refresh;
297 end;
298 RoundListView.Selected.Delete;
299 finally
300 RoundListView.OnChange := ListChangeEvent;
301 end;
302 end;
303
304 procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
305 Column: TListColumn);
306 begin
307 if FColumnToSort > -1 then
308 (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
309
310 if FColumnToSort = Column.Index then
311 FSortOrder := not FSortOrder
312 else
313 FSortOrder := false;
314
315 if FSortOrder then
316 Column.ImageIndex := 3
317 else
318 Column.ImageIndex := 2;
319
320 FColumnToSort := Column.Index;
321 (Sender as TCustomListView).AlphaSort;
322 end;
323
324 procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
325 Item2: TListItem; Data: Integer; var Compare: Integer);
326 var
327 ix: Integer;
328 begin
329 if FColumnToSort = 0 then begin
330 if not FSortOrder then begin
331 Compare := CompareText(Item1.Caption,Item2.Caption);
332 if Compare = 0 then
333 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
334 end else begin
335 Compare := -CompareText(Item1.Caption,Item2.Caption);
336 if Compare = 0 then
337 Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
338 end;
339 end else begin
340 ix := FColumnToSort - 1;
341 if not FSortOrder then begin
342 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
343 if Compare = 0 then
344 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
345 end else begin
346 Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
347 if Compare = 0 then
348 Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
349 end;
350 end;
351 end;
352
353 end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26