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.17 - (show annotations) (download) (as text)
Sat Apr 2 09:01:33 2005 UTC (19 years ago) by genyakun
Branch: MAIN
CVS Tags: v_step1, root-of-remodel
Branch point for: remodeling
Changes since 1.16: +12 -28 lines
File MIME type: text/x-pascal
巡回規制緩和(リミットは30分に一回、100アイテム以下)

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 private
40 { Private 鐃緒申鐃緒申 }
41 function GetRoundCount: Integer;
42 procedure SetRoundItem(RoundName: string);
43 function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
44 public
45 { Public 鐃緒申鐃緒申 }
46 end;
47
48 //var
49 // RoundDialog: TRoundDialog;
50
51 implementation
52
53 uses
54 Giko, BoardGroup, RoundData;
55
56 {$R *.DFM}
57
58 procedure TRoundDialog.RoundButtonClick(Sender: TObject);
59 var
60 i: Integer;
61 cnt: Integer;
62 msg: string;
63 Board: TBoard;
64 ThreadItem: TThreadItem;
65 RoundItem: TRoundItem;
66 begin
67 {$IF Defined(FRCRND) }
68 Giko.GikoForm.LoginAction.Checked := true; // 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?
69 {$IFEND}
70
71 cnt := GetRoundCount;
72 if not Giko.GikoForm.LoginAction.Checked then begin
73 if CompareTime(GikoForm.LastRoundTime, Now, 30) then begin
74 msg := '鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申';
75 MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
76 Exit;
77 end;
78 if cnt > 100 then begin
79 msg := '鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
80 MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
81 Exit;
82 end;
83 end;
84
85 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
86 RoundItem := RoundList.Items[i, grtBoard];
87 if not RoundItem.BoolData then Continue;
88 if not Giko.GikoForm.LoginAction.Checked then Exit;
89 if RoundItem.RoundType = grtBoard then begin
90 //Board := TBoard( RoundItem.Item );
91 Board := BBSsFindBoardFromURL(RoundItem.URL);
92 if Board <> nil then begin
93 if not Board.IsThreadDatRead then
94 GikoSys.ReadSubjectFile(Board);
95 GikoForm.DownloadList(Board);
96 end;
97 end;
98 end;
99 for i := 0 to RoundList.Count[grtItem] - 1 do begin
100 RoundItem := RoundList.Items[i, grtItem];
101 if not RoundItem.BoolData then Continue;
102 if not Giko.GikoForm.LoginAction.Checked then Exit;
103 if RoundItem.RoundType = grtItem then begin
104 //ThreadItem := TThreadItem( RoundItem.Item );
105 ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
106 if ThreadItem <> nil then begin
107 // GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
108 GikoForm.DownloadContent(ThreadItem);
109 end;
110 end;
111 end;
112 GikoForm.LastRoundTime := Now;
113 Close;
114 end;
115
116 function TRoundDialog.GetRoundCount: Integer;
117 var
118 i: Integer;
119 RoundItem: TRoundItem;
120 begin
121 Result := 0;
122 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
123 RoundItem := RoundList.Items[i, grtBoard];
124 if RoundItem.BoolData then
125 Result := Result + 1;
126 end;
127 for i := 0 to RoundList.Count[grtItem] - 1 do begin
128 RoundItem := RoundList.Items[i, grtItem];
129 if RoundItem.BoolData then
130 Result := Result + 1;
131 end;
132 end;
133
134 function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
135 const
136 AMin: Double = (1 / 24 / 60);
137 var
138 d: TDateTime;
139 begin
140 d := Time1 + (AMin * MarginMin);
141 Result := Time2 < d;
142 end;
143
144 procedure TRoundDialog.FormCreate(Sender: TObject);
145 var
146 i: Integer;
147 begin
148 RoundNameComboBox.Items.Add('鐃?鐃緒申鐃緒申鐃緒申鐃?');
149 for i := 0 to RoundList.RoundNameList.Count - 1 do
150 RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
151 for i := 0 to RoundList.Count[grtBoard] - 1 do
152 RoundList.Items[i, grtBoard].BoolData := False;
153 for i := 0 to RoundList.Count[grtItem] - 1 do
154 RoundList.Items[i, grtItem].BoolData := False;
155 RoundNameComboBox.ItemIndex := 0;
156 SetRoundItem('');
157 end;
158
159 procedure TRoundDialog.RoundListViewChange(Sender: TObject;
160 Item: TListItem; Change: TItemChange);
161 var
162 RoundItem: TRoundItem;
163 begin
164 if TObject(Item.Data) is TRoundItem then begin
165 RoundItem := TRoundItem(Item.Data);
166 RoundItem.BoolData := Item.Checked;
167 end;
168 end;
169
170 procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
171 var
172 i: Integer;
173 RoundItem: TRoundItem;
174 ListChangeEvent: TLVChangeEvent;
175 begin
176 ListChangeEvent := RoundListView.OnChange;
177 RoundListView.OnChange := nil;
178 try
179 for i := 0 to RoundListView.Items.Count - 1 do begin
180 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
181 RoundItem := TRoundItem(RoundListView.Items[i].Data);
182 RoundItem.BoolData := True;
183 RoundListView.Items[i].Checked := True;
184 end;
185 end;
186 finally
187 RoundListView.OnChange := ListChangeEvent;
188 end;
189 end;
190
191 procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
192 var
193 i: Integer;
194 RoundItem: TRoundItem;
195 ListChangeEvent: TLVChangeEvent;
196 begin
197 ListChangeEvent := RoundListView.OnChange;
198 RoundListView.OnChange := nil;
199 try
200 for i := 0 to RoundListView.Items.Count - 1 do begin
201 if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
202 RoundItem := TRoundItem(RoundListView.Items[i].Data);
203 RoundItem.BoolData := False;
204 RoundListView.Items[i].Checked := False;
205 end;
206 end;
207 finally
208 RoundListView.OnChange := ListChangeEvent;
209 end;
210 end;
211
212 procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
213 begin
214 if RoundNameComboBox.ItemIndex = 0 then
215 SetRoundItem('')
216 else
217 SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
218 end;
219
220 procedure TRoundDialog.SetRoundItem(RoundName: string);
221 var
222 ListItem: TListItem;
223 i: Integer;
224 ListChangeEvent: TLVChangeEvent;
225 begin
226 ListChangeEvent := RoundListView.OnChange;
227 RoundListView.OnChange := nil;
228 try
229 RoundListView.Clear;
230 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
231 if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
232 ListItem := RoundListView.Items.Add;
233 ListItem.Data := RoundList.Items[i, grtBoard];
234 ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
235 ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
236 ListItem.SubItems.Add('-');
237 ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
238 ListItem.ImageIndex := 0;
239 end;
240 end;
241 for i := 0 to RoundList.Count[grtItem] - 1 do begin
242 if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
243 ListItem := RoundListView.Items.Add;
244 ListItem.Data := RoundList.Items[i, grtItem];
245 ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
246 ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
247 ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
248 ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
249 ListItem.ImageIndex := 1;
250 end;
251 end;
252 finally
253 RoundListView.OnChange := ListChangeEvent;
254 end;
255 end;
256
257 procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
258 var
259 // Board: TBoard;
260 // ThreadItem: TThreadItem;
261 RoundItem: TRoundItem;
262 ListChangeEvent: TLVChangeEvent;
263 begin
264 ListChangeEvent := RoundListView.OnChange;
265 RoundListView.OnChange := nil;
266 try
267 if RoundListView.Selected = nil then
268 Exit;
269 if TObject(RoundListView.Selected.Data) is TRoundItem then begin
270 RoundItem := TRoundItem(RoundListView.Selected.Data);
271 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
272 {
273 if RoundItem.RoundType = grtBoard then begin
274 //Board := TBoard( RoundItem.Item );
275 RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
276 Board.Round := False;
277 Board.RoundName := '';
278 end else begin
279 //ThreadItem := TThreadItem( RoundItem.Item );
280 RoundList.Delete(ThreadItem);
281 ThreadItem.Round := False;
282 ThreadItem.RoundName := '';
283 end;
284 }
285 GikoForm.ListView.Refresh;
286 end;
287 RoundListView.Selected.Delete;
288 finally
289 RoundListView.OnChange := ListChangeEvent;
290 end;
291 end;
292
293 end.

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