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.11 - (show annotations) (download) (as text)
Fri Nov 19 14:24:45 2004 UTC (19 years, 5 months ago) by h677
Branch: MAIN
Changes since 1.10: +58 -2 lines
File MIME type: text/x-pascal
・ォ・鬣爭ッ・?テ・ッ、ヌ・ス。シ・ネ、ヌ、ュ、?隍ヲ、ヒ、キ、ソ。」

1 unit Round;
2
3 interface
4
5 uses
6 Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7 SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil;
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, 5) then begin
74 // msg := '?ス?ス?スx?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スT?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スo?ス?ス?ス?ス?ス?ス?ス?ス';
75 // GikoSys.MsgBox(msg, '?スG?ス?ス?ス[', MB_OK or MB_ICONSTOP);
76 // Exit;
77 // end;
78 {$IF Defined(FRCRND) }
79 Giko.GikoForm.LoginAction.Checked := true; // ?ス?ス?ス?ス?ス?ス?ス?ス?スp?スr
80 {$IFEND}
81
82 if not Giko.GikoForm.LoginAction.Checked then begin
83 if GikoSys.Setting.UserID <> '' then begin
84 msg := '?ス?ス?スO?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スo?ス?ス?ス?ス?ス?ス?ス?ス' + #13#10
85 + '?ス?ス?ス?ス?スO?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス';
86 if MsgBox(Handle, msg, '?スm?スF', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
87 Exit;
88 end;
89 Giko.GikoForm.LoginAction.Execute;
90 end;
91 end;
92
93 if not Giko.GikoForm.LoginAction.Checked then begin
94 msg := '?ス?ス?スO?スC?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スo?ス?ス?ス?ス?ス?ス?ス?ス';// + #13#10
95 // + '?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スl?ス?ス?スM?スR?スi?スr?スX?ス?ス?スb?スh?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス';
96 MsgBox(Handle, msg, '?スG?ス?ス?ス[', MB_OK or MB_ICONSTOP);
97 Exit;
98 end;
99
100 cnt := GetRoundCount;
101 if cnt = 0 then begin
102 msg := '?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?スP?ス?ス?ス?ス?ス?ス?ス`?スF?スb?スN?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス?ス';
103 MsgBox(Handle, msg, '?スG?ス?ス?ス[', MB_OK or MB_ICONSTOP);
104 Exit;
105 end;
106
107 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
108 RoundItem := RoundList.Items[i, grtBoard];
109 if not RoundItem.BoolData then Continue;
110 if not Giko.GikoForm.LoginAction.Checked then Exit;
111 if RoundItem.RoundType = grtBoard then begin
112 //Board := TBoard( RoundItem.Item );
113 Board := BBSsFindBoardFromURL(RoundItem.URL);
114 if Board <> nil then begin
115 if not Board.IsThreadDatRead then
116 GikoSys.ReadSubjectFile(Board);
117 GikoForm.DownloadList(Board);
118 end;
119 end;
120 end;
121 for i := 0 to RoundList.Count[grtItem] - 1 do begin
122 RoundItem := RoundList.Items[i, grtItem];
123 if not RoundItem.BoolData then Continue;
124 if not Giko.GikoForm.LoginAction.Checked then Exit;
125 if RoundItem.RoundType = grtItem then begin
126 //ThreadItem := TThreadItem( RoundItem.Item );
127 ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
128 if ThreadItem <> nil then begin
129 // GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
130 GikoForm.DownloadContent(ThreadItem);
131 end;
132 end;
133 end;
134 // GikoForm.LastRoundTime := Now;
135 Close;
136 end;
137
138 function TRoundDialog.GetRoundCount: Integer;
139 var
140 i: Integer;
141 RoundItem: TRoundItem;
142 begin
143 Result := 0;
144 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
145 RoundItem := RoundList.Items[i, grtBoard];
146 if RoundItem.BoolData then
147 Result := Result + 1;
148 end;
149 for i := 0 to RoundList.Count[grtItem] - 1 do begin
150 RoundItem := RoundList.Items[i, grtItem];
151 if RoundItem.BoolData then
152 Result := Result + 1;
153 end;
154 end;
155
156 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
157 const
158 AMin: Double = (1 / 24 / 60);
159 var
160 d: TDateTime;
161 begin
162 d := Time1 + (AMin * MarginMin);
163 Result := Time2 < d;
164 end;
165
166 procedure TRoundDialog.FormCreate(Sender: TObject);
167 var
168 i: Integer;
169 begin
170 FColumnToSort := -1;
171 RoundNameComboBox.Items.Add('?スi?ス?ス?ス?ス?ス?ス?スj');
172 for i := 0 to RoundList.RoundNameList.Count - 1 do
173 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
174 for i := 0 to RoundList.Count[grtBoard] - 1 do
175 RoundList.Items[i, grtBoard].BoolData := False;
176 for i := 0 to RoundList.Count[grtItem] - 1 do
177 RoundList.Items[i, grtItem].BoolData := False;
178 RoundNameComboBox.ItemIndex := 0;
179 SetRoundItem('');
180 end;
181
182 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
183 Item: TListItem; Change: TItemChange);
184 var
185 RoundItem: TRoundItem;
186 begin
187 if TObject(Item.Data) is TRoundItem then begin
188 RoundItem := TRoundItem(Item.Data);
189 RoundItem.BoolData := Item.Checked;
190 end;
191 end;
192
193 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
194 var
195 i: Integer;
196 RoundItem: TRoundItem;
197 ListChangeEvent: TLVChangeEvent;
198 begin
199 ListChangeEvent := RoundListView.OnChange;
200 RoundListView.OnChange := nil;
201 try
202 for i := 0 to RoundListView.Items.Count - 1 do begin
203 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
204 RoundItem := TRoundItem(RoundListView.Items[i].Data);
205 RoundItem.BoolData := True;
206 RoundListView.Items[i].Checked := True;
207 end;
208 end;
209 finally
210 RoundListView.OnChange := ListChangeEvent;
211 end;
212 end;
213
214 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
215 var
216 i: Integer;
217 RoundItem: TRoundItem;
218 ListChangeEvent: TLVChangeEvent;
219 begin
220 ListChangeEvent := RoundListView.OnChange;
221 RoundListView.OnChange := nil;
222 try
223 for i := 0 to RoundListView.Items.Count - 1 do begin
224 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
225 RoundItem := TRoundItem(RoundListView.Items[i].Data);
226 RoundItem.BoolData := False;
227 RoundListView.Items[i].Checked := False;
228 end;
229 end;
230 finally
231 RoundListView.OnChange := ListChangeEvent;
232 end;
233 end;
234
235 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
236 begin
237 if RoundNameComboBox.ItemIndex = 0 then
238 SetRoundItem('')
239 else
240 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
241 end;
242
243 procedure TRoundDialog.SetRoundItem(RoundName: string);
244 var
245 ListItem: TListItem;
246 i: Integer;
247 ListChangeEvent: TLVChangeEvent;
248 begin
249 ListChangeEvent := RoundListView.OnChange;
250 RoundListView.OnChange := nil;
251 try
252 RoundListView.Clear;
253 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
254 if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
255 ListItem := RoundListView.Items.Add;
256 ListItem.Data := RoundList.Items[i, grtBoard];
257 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
258 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
259 ListItem.SubItems.Add('-');
260 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
261 ListItem.ImageIndex := 0;
262 end;
263 end;
264 for i := 0 to RoundList.Count[grtItem] - 1 do begin
265 if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
266 ListItem := RoundListView.Items.Add;
267 ListItem.Data := RoundList.Items[i, grtItem];
268 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
269 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
270 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
271 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
272 ListItem.ImageIndex := 1;
273 end;
274 end;
275 finally
276 RoundListView.OnChange := ListChangeEvent;
277 end;
278 end;
279
280 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
281 var
282 // Board: TBoard;
283 // ThreadItem: TThreadItem;
284 RoundItem: TRoundItem;
285 ListChangeEvent: TLVChangeEvent;
286 begin
287 ListChangeEvent := RoundListView.OnChange;
288 RoundListView.OnChange := nil;
289 try
290 if RoundListView.Selected = nil then
291 Exit;
292 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
293 RoundItem := TRoundItem(RoundListView.Selected.Data);
294 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
295 {
296 if RoundItem.RoundType = grtBoard then begin
297 //Board := TBoard( RoundItem.Item );
298 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
299 Board.Round := False;
300 Board.RoundName := '';
301 end else begin
302 //ThreadItem := TThreadItem( RoundItem.Item );
303 RoundList.Delete(ThreadItem);
304 ThreadItem.Round := False;
305 ThreadItem.RoundName := '';
306 end;
307 }
308 GikoForm.ListView.Refresh;
309 end;
310 RoundListView.Selected.Delete;
311 finally
312 RoundListView.OnChange := ListChangeEvent;
313 end;
314 end;
315
316 procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
317 Column: TListColumn);
318 begin
319 if FColumnToSort > -1 then
320 (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
321
322 if FColumnToSort = Column.Index then
323 FSortOrder := not FSortOrder
324 else
325 FSortOrder := false;
326
327 if FSortOrder then
328 Column.ImageIndex := 3
329 else
330 Column.ImageIndex := 2;
331
332 FColumnToSort := Column.Index;
333 (Sender as TCustomListView).AlphaSort;
334 end;
335
336 procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
337 Item2: TListItem; Data: Integer; var Compare: Integer);
338 var
339 ix: Integer;
340 begin
341 if FColumnToSort = 0 then begin
342 if not FSortOrder then begin
343 Compare := CompareText(Item1.Caption,Item2.Caption);
344 if Compare = 0 then
345 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
346 end else begin
347 Compare := -CompareText(Item1.Caption,Item2.Caption);
348 if Compare = 0 then
349 Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
350 end;
351 end else begin
352 ix := FColumnToSort - 1;
353 if not FSortOrder then begin
354 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
355 if Compare = 0 then
356 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
357 end else begin
358 Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
359 if Compare = 0 then
360 Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
361 end;
362 end;
363 end;
364
365 end.

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