6 Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7 SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil;
10 TRoundDialog = class(TForm)
11 RoundPopupMenu: TPopupMenu;
16 ItemIcon16: TImageList;
20 RoundNameComboBox: TComboBox;
23 AllSelectButton: TButton;
24 AllCancelButton: TButton;
25 RoundDeleteButton: TButton;
29 StatusBar1: TStatusBar;
30 RoundListView: TListView;
31 procedure RoundButtonClick(Sender: TObject);
32 procedure FormCreate(Sender: TObject);
33 procedure RoundListViewChange(Sender: TObject; Item: TListItem;
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;
41 procedure RoundListViewCompare(Sender: TObject; Item1,
42 Item2: TListItem; Data: Integer; var Compare: Integer);
43 procedure RoundListViewColumnRightClick(Sender: TObject;
44 Column: TListColumn; Point: TPoint);
47 FColumnToSort: Integer;
49 function GetRoundCount: Integer;
50 procedure SetRoundItem(RoundName: string);
51 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
60 Giko, BoardGroup, RoundData, Math, GikoDataModule;
64 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
70 ThreadItem: TThreadItem;
71 RoundItem: TRoundItem;
73 {$IF Defined(FRCRND) }
74 GikoDM.LoginAction.Checked := true; //
\93®
\8dì
\8e\8e\8c±
\97p
\93r
77 {$IFNDEF LOOSENUP} //
\8f\84\89ñ
\90§
\8cÀ
\82ð
\8aÉ
\82ß
\82é
\82±
\82Æ
\82É
\82µ
\82Ä
\82½
\82ç{$ELSE}
\82Ì
\95û
\82ð
\8eg
\82¤
78 if not GikoDM.LoginAction.Checked then begin
79 if GikoSys.Setting.UserID <> '' then begin
80 msg := '
\83\8d\83O
\83C
\83\93\82µ
\82È
\82¢
\82Æ
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ' + #13#10
81 + '
\8d¡
\83\8d\83O
\83C
\83\93\82µ
\82Ü
\82·
\82©';
82 if MsgBox(Handle, msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
85 GikoDM.LoginAction.Execute;
87 if not GikoDM.LoginAction.Checked then begin
88 msg := '
\83\8d\83O
\83C
\83\93\82µ
\82È
\82¢
\82Æ
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ';
89 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
94 //
\8bK
\90§
\82ð
\8aÉ
\82ß
\82½
\82Ù
\82¤
\82Í
\81A
\83X
\83\8c\88ê
\97\97\82Ì
\82Ý
\8f\84\89ñ
\89Â
\94\
95 if not GikoDM.LoginAction.Checked then begin
96 if GikoSys.Setting.UserID <> '' then begin
97 msg := '
\83\8d\83O
\83C
\83\93\82µ
\82È
\82¢
\82Æ
\83X
\83\8c\83b
\83h
\82Ì
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ' + #13#10
98 + '
\8d¡
\83\8d\83O
\83C
\83\93\82µ
\82Ü
\82·
\82©';
99 if MsgBox(Handle, msg, '
\8am
\94F', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
102 GikoDM.LoginAction.Execute;
105 //
\81\9c\82È
\82µ
\8f\84\89ñ
\82Í15
\95ª
\88È
\8fã
\82Ì
\8aÔ
\8au
\82ð
\95K
\97v
\82Æ
\82·
\82é
106 if not GikoDM.LoginAction.Checked then begin
107 if CompareTime(GikoForm.LastRoundTime, Now, 30) then begin
108 msg := '
\88ê
\93x
\8f\84\89ñ
\82·
\82é
\82Æ
\82R
\82O
\95ª
\8aÔ
\8f\84\89ñ
\82Í
\8fo
\97\88\82Ü
\82¹
\82ñ';
109 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
115 //
\88ê
\82Â
\82à
\8f\84\89ñ
\82É
\90Ý
\92è
\82µ
\82Ä
\82¢
\82È
\82©
\82Á
\82½
\82ç
\83G
\83\89\81[
\82É
\82·
\82é
116 cnt := GetRoundCount;
117 if cnt = 0 then begin
118 msg := '
\8f\84\89ñ
\82µ
\82½
\82¢
\8d\80\96Ú
\82É
\82P
\82Â
\88È
\8fã
\83`
\83F
\83b
\83N
\82ð
\93ü
\82ê
\82Ä
\82
\82¾
\82³
\82¢';
119 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
124 //
\81\9c\82È
\82µ
\8f\84\89ñ
\82Í
\82P
\93x
\82É100
\8cÂ
\82Ü
\82Å
\82É
\82·
\82é
125 if not GikoDM.LoginAction.Checked then begin
126 if cnt > 100 then begin
127 msg := '
\82P
\82O
\82O
\8cÂ
\88È
\8fã
\82Í
\88ê
\93x
\82É
\8f\84\89ñ
\82Å
\82«
\82Ü
\82¹
\82ñ';
128 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
134 //
\8f\84\89ñ
\82É
\93o
\98^
\82³
\82ê
\82Ä
\82¢
\82é
\94Â
\82Ì
\90\94\82¾
\82¯
\82Ü
\82í
\82·
135 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
136 RoundItem := RoundList.Items[i, grtBoard];
137 //
\8f\84\89ñ
\82Ì
\83`
\83F
\83b
\83N
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¯
\82ê
\82Î
\83X
\83\8b\81[
138 if not RoundItem.BoolData then Continue;
139 //
\8am
\8eÀ
\82É
\94Â
\82Ì
\82Í
\82¸
\82¾
\82¯
\82Ç
\83`
\83F
\83b
\83N
140 if RoundItem.RoundType = grtBoard then begin
141 Board := TBoard( RoundItem.Item );
142 //Board
\82Ì
\83I
\83u
\83W
\83F
\83N
\83g
\82ª
\91¶
\8dÝ
\82·
\82ê
\82Î
\81ADL
\82·
\82é
143 if Board <> nil then begin
144 if not Board.IsThreadDatRead then
145 GikoSys.ReadSubjectFile(Board);
146 GikoForm.DownloadList(Board);
150 for i := 0 to RoundList.Count[grtItem] - 1 do begin
151 RoundItem := RoundList.Items[i, grtItem];
152 //
\8f\84\89ñ
\82Ì
\83`
\83F
\83b
\83N
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¯
\82ê
\82Î
\83X
\83\8b\81[
153 if not RoundItem.BoolData then Continue;
155 //
\81\9c\82È
\82µ
\8f\84\89ñ
\82Í
\83X
\83\8c\83b
\83h
\82Í
\82Å
\82«
\82È
\82¢
\82±
\82Æ
\82É
\82·
\82é
156 if not GikoDM.LoginAction.Checked then begin
157 msg := '
\83\8d\83O
\83C
\83\93\82µ
\82È
\82¢
\82Æ
\83X
\83\8c\83b
\83h
\82Ì
\8f\84\89ñ
\82Í
\82Å
\82«
\82Ü
\82¹
\82ñ
\81B';
158 MsgBox(Handle, msg, '
\83G
\83\89\81[', MB_OK or MB_ICONSTOP);
162 if RoundItem.RoundType = grtItem then begin
163 ThreadItem := TThreadItem( RoundItem.Item );
164 if ThreadItem <> nil then begin
165 GikoForm.DownloadContent(ThreadItem);
169 GikoForm.LastRoundTime := Now;
173 function TRoundDialog.GetRoundCount: Integer;
176 RoundItem: TRoundItem;
179 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
180 RoundItem := RoundList.Items[i, grtBoard];
181 if RoundItem.BoolData then
182 Result := Result + 1;
184 for i := 0 to RoundList.Count[grtItem] - 1 do begin
185 RoundItem := RoundList.Items[i, grtItem];
186 if RoundItem.BoolData then
187 Result := Result + 1;
191 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
193 AMin: Double = (1 / 24 / 60);
197 d := Time1 + (AMin * MarginMin);
201 procedure TRoundDialog.FormCreate(Sender: TObject);
205 //
\8c»
\8dÝ
\82Ì
\8f\84\89ñ
\83f
\81[
\83^
\82ð
\83t
\83@
\83C
\83\8b\83A
\83E
\83g
\82·
\82é
206 RoundList.SaveRoundFile;
207 RoundNameComboBox.Items.Add('
\81i
\82·
\82×
\82Ä
\81j');
208 for i := 0 to RoundList.RoundNameList.Count - 1 do
209 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
210 for i := 0 to RoundList.Count[grtBoard] - 1 do
211 RoundList.Items[i, grtBoard].BoolData := False;
212 for i := 0 to RoundList.Count[grtItem] - 1 do
213 RoundList.Items[i, grtItem].BoolData := False;
214 RoundNameComboBox.ItemIndex := 0;
218 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
219 Item: TListItem; Change: TItemChange);
221 RoundItem: TRoundItem;
223 if TObject(Item.Data) is TRoundItem then begin
224 RoundItem := TRoundItem(Item.Data);
225 RoundItem.BoolData := Item.Checked;
229 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
232 RoundItem: TRoundItem;
233 ListChangeEvent: TLVChangeEvent;
235 ListChangeEvent := RoundListView.OnChange;
236 RoundListView.OnChange := nil;
238 for i := 0 to RoundListView.Items.Count - 1 do begin
239 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
240 RoundItem := TRoundItem(RoundListView.Items[i].Data);
241 RoundItem.BoolData := True;
242 RoundListView.Items[i].Checked := True;
246 RoundListView.OnChange := ListChangeEvent;
250 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
253 RoundItem: TRoundItem;
254 ListChangeEvent: TLVChangeEvent;
256 ListChangeEvent := RoundListView.OnChange;
257 RoundListView.OnChange := nil;
259 for i := 0 to RoundListView.Items.Count - 1 do begin
260 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
261 RoundItem := TRoundItem(RoundListView.Items[i].Data);
262 RoundItem.BoolData := False;
263 RoundListView.Items[i].Checked := False;
267 RoundListView.OnChange := ListChangeEvent;
271 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
273 //
\83J
\83\89\83\80\82Ì
\83\
\81[
\83g
\8bL
\8d\86\83C
\83\81\81[
\83W
\82ð
\89ð
\8f\9c\82·
\82é
274 if FColumnToSort > -1 then
275 RoundListView.Column[FColumnToSort].ImageIndex := -1;
277 if RoundNameComboBox.ItemIndex = 0 then
280 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
284 procedure TRoundDialog.SetRoundItem(RoundName: string);
288 ListChangeEvent: TLVChangeEvent;
290 ListChangeEvent := RoundListView.OnChange;
291 RoundListView.OnChange := nil;
294 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
295 if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
296 ListItem := RoundListView.Items.Add;
297 ListItem.Data := RoundList.Items[i, grtBoard];
298 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
299 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
300 ListItem.SubItems.Add('-');
301 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
302 ListItem.ImageIndex := 0;
305 for i := 0 to RoundList.Count[grtItem] - 1 do begin
306 if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
307 ListItem := RoundListView.Items.Add;
308 ListItem.Data := RoundList.Items[i, grtItem];
309 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
310 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
311 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
312 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
313 ListItem.ImageIndex := 1;
317 RoundListView.OnChange := ListChangeEvent;
321 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
324 // ThreadItem: TThreadItem;
325 RoundItem: TRoundItem;
326 ListChangeEvent: TLVChangeEvent;
328 ListChangeEvent := RoundListView.OnChange;
329 RoundListView.OnChange := nil;
331 if RoundListView.Selected = nil then
333 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
334 RoundItem := TRoundItem(RoundListView.Selected.Data);
335 if( RoundItem.Item is TBoard ) then begin
336 TBoard(RoundItem.Item).Round := false;
337 end else if( RoundItem.Item is TThreadItem ) then begin
338 TThreadItem(RoundItem.Item).Round := false;
340 //RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
342 if RoundItem.RoundType = grtBoard then begin
343 //Board := TBoard( RoundItem.Item );
344 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
345 Board.Round := False;
346 Board.RoundName := '';
348 //ThreadItem := TThreadItem( RoundItem.Item );
349 RoundList.Delete(ThreadItem);
350 ThreadItem.Round := False;
351 ThreadItem.RoundName := '';
354 GikoForm.ListView.Refresh;
356 RoundListView.Selected.Delete;
358 RoundListView.OnChange := ListChangeEvent;
362 procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
363 Column: TListColumn);
365 if (Sender is TCustomListView) then begin
367 if FColumnToSort > -1 then
368 (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
370 if FColumnToSort = Column.Index then
371 FSortOrder := not FSortOrder
376 Column.ImageIndex := 3
378 Column.ImageIndex := 2;
380 FColumnToSort := Column.Index;
381 (Sender as TCustomListView).AlphaSort;
385 procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
386 Item2: TListItem; Data: Integer; var Compare: Integer);
390 if FColumnToSort = 0 then begin
391 if not FSortOrder then begin
392 Compare := CompareText(Item1.Caption,Item2.Caption);
394 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
396 Compare := -CompareText(Item1.Caption,Item2.Caption);
398 Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
401 ix := FColumnToSort - 1;
402 if not FSortOrder then begin
403 Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
405 Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
407 Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
409 Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
414 *
\83J
\83\89\83\80\8fã
\82Å
\89E
\83N
\83\8a\83b
\83N
\82µ
\82½
\82ç
\83\
\81[
\83g
\82ð
\89ð
\8f\9c\82µ
\82Ä
\8f\89\8aú
\8fó
\91Ô
\82É
\96ß
\82·
416 procedure TRoundDialog.RoundListViewColumnRightClick(Sender: TObject;
417 Column: TListColumn; Point: TPoint);
419 RoundNameComboBox.OnChange(Sender);