Develop and Download Open Source Software

Browse CVS Repository

Annotation of /gikonavigoeson/gikonavi/Round.pas

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


Revision 1.20 - (hide annotations) (download) (as text)
Tue Aug 23 15:41:59 2005 UTC (18 years, 7 months ago) by h677
Branch: MAIN
CVS Tags: root-of-draw
Branch point for: Bdraw
Changes since 1.19: +75 -3 lines
File MIME type: text/x-pascal
巡回データをファイルに出力するようにした。
カラムクリックでソートするようにした。

1 hi_ 1.1 unit Round;
2    
3     interface
4    
5     uses
6     Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
7 genyakun 1.16 SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil;
8 hi_ 1.1
9     type
10     TRoundDialog = class(TForm)
11 h677 1.19 RoundPopupMenu: TPopupMenu;
12     C1: TMenuItem;
13     P1: TMenuItem;
14 hi_ 1.1 N1: TMenuItem;
15 h677 1.19 D1: TMenuItem;
16 hi_ 1.1 ItemIcon16: TImageList;
17 h677 1.19 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 hi_ 1.1 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 h677 1.20 procedure RoundListViewColumnClick(Sender: TObject;
40     Column: TListColumn);
41     procedure RoundListViewCompare(Sender: TObject; Item1,
42     Item2: TListItem; Data: Integer; var Compare: Integer);
43     procedure RoundListViewColumnRightClick(Sender: TObject;
44     Column: TListColumn; Point: TPoint);
45 hi_ 1.1 private
46     { Private 鐃緒申鐃緒申 }
47 h677 1.20 FColumnToSort: Integer;
48     FSortOrder: Boolean;
49 hi_ 1.1 function GetRoundCount: Integer;
50     procedure SetRoundItem(RoundName: string);
51     function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
52     public
53     { Public 鐃緒申鐃緒申 }
54     end;
55    
56    
57     implementation
58    
59     uses
60 h677 1.20 Giko, BoardGroup, RoundData, Math;
61 hi_ 1.1
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 genyakun 1.16 {$IF Defined(FRCRND) }
74 h677 1.19 Giko.GikoForm.LoginAction.Checked := true; // 鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?
75 genyakun 1.16 {$IFEND}
76    
77 h677 1.19 {$IFNDEF LOOSENUP} //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申{$ELSE}鐃緒申鐃緒申鐃緒申鐃?鐃緒申
78     if not Giko.GikoForm.LoginAction.Checked then begin
79     if GikoSys.Setting.UserID <> '' then begin
80     msg := '鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申' + #13#10
81     + '鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
82     if MsgBox(Handle, msg, '鐃?鐃?', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
83     Exit;
84     end;
85     Giko.GikoForm.LoginAction.Execute;
86     end;
87     if not Giko.GikoForm.LoginAction.Checked then begin
88     msg := '鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申';
89     MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
90     Exit;
91     end;
92     end;
93     {$ELSE}
94     //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?
95     if not Giko.GikoForm.LoginAction.Checked then begin
96     if GikoSys.Setting.UserID <> '' then begin
97     msg := '鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申' + #13#10
98     + '鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
99     if MsgBox(Handle, msg, '鐃?鐃?', MB_YESNO or MB_ICONQUESTION or MB_DEFBUTTON2) <> IDYES then begin
100     Exit;
101     end;
102     Giko.GikoForm.LoginAction.Execute;
103     end;
104     end;
105     //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申15鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申
106     if not Giko.GikoForm.LoginAction.Checked then begin
107     if CompareTime(GikoForm.LastRoundTime, Now, 30) then begin
108     msg := '鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申';
109     MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
110     Exit;
111     end;
112     end;
113     {$ENDIF}
114    
115     //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃緒申鐃緒申鐃緒申
116 genyakun 1.17 cnt := GetRoundCount;
117 h677 1.19 if cnt = 0 then begin
118     msg := '鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
119     MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
120     Exit;
121     end;
122    
123     {$IFNDEF LOOSENUP}
124     //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申100鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
125 genyakun 1.16 if not Giko.GikoForm.LoginAction.Checked then begin
126 h677 1.19 if cnt > 100 then begin
127     msg := '鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申';
128     MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
129     Exit;
130     end;
131 hi_ 1.1 end;
132 h677 1.19 {$ENDIF}
133 hi_ 1.1
134 h677 1.19 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
135 hi_ 1.1 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
136     RoundItem := RoundList.Items[i, grtBoard];
137 h677 1.19 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?
138 hi_ 1.1 if not RoundItem.BoolData then Continue;
139 h677 1.19 //鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?
140 hi_ 1.1 if RoundItem.RoundType = grtBoard then begin
141 h677 1.18 Board := TBoard( RoundItem.Item );
142 h677 1.19 //Board鐃緒申鐃?鐃?鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?DL鐃緒申鐃緒申
143 hi_ 1.1 if Board <> nil then begin
144     if not Board.IsThreadDatRead then
145     GikoSys.ReadSubjectFile(Board);
146     GikoForm.DownloadList(Board);
147     end;
148     end;
149     end;
150     for i := 0 to RoundList.Count[grtItem] - 1 do begin
151     RoundItem := RoundList.Items[i, grtItem];
152 h677 1.19 //鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?
153 hi_ 1.1 if not RoundItem.BoolData then Continue;
154 h677 1.19 {$IFDEF LOOSENUP}
155     //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
156     if not Giko.GikoForm.LoginAction.Checked then begin
157     msg := '鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?';
158     MsgBox(Handle, msg, '鐃?鐃緒申鐃?', MB_OK or MB_ICONSTOP);
159     break;
160     end;
161     {$ENDIF}
162     if RoundItem.RoundType = grtItem then begin
163     ThreadItem := TThreadItem( RoundItem.Item );
164 hi_ 1.1 if ThreadItem <> nil then begin
165     GikoForm.DownloadContent(ThreadItem);
166     end;
167     end;
168     end;
169 genyakun 1.17 GikoForm.LastRoundTime := Now;
170 hi_ 1.1 Close;
171     end;
172    
173     function TRoundDialog.GetRoundCount: Integer;
174     var
175     i: Integer;
176     RoundItem: TRoundItem;
177     begin
178     Result := 0;
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;
183     end;
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;
188     end;
189     end;
190    
191     function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
192     const
193     AMin: Double = (1 / 24 / 60);
194     var
195     d: TDateTime;
196     begin
197     d := Time1 + (AMin * MarginMin);
198     Result := Time2 < d;
199     end;
200    
201     procedure TRoundDialog.FormCreate(Sender: TObject);
202     var
203     i: Integer;
204     begin
205 h677 1.20 //鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申
206     RoundList.SaveRoundFile;
207 hi_ 1.1 RoundNameComboBox.Items.Add('鐃?鐃緒申鐃緒申鐃緒申鐃?');
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;
215     SetRoundItem('');
216     end;
217    
218     procedure TRoundDialog.RoundListViewChange(Sender: TObject;
219     Item: TListItem; Change: TItemChange);
220     var
221     RoundItem: TRoundItem;
222     begin
223     if TObject(Item.Data) is TRoundItem then begin
224     RoundItem := TRoundItem(Item.Data);
225     RoundItem.BoolData := Item.Checked;
226     end;
227     end;
228    
229     procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
230     var
231     i: Integer;
232     RoundItem: TRoundItem;
233     ListChangeEvent: TLVChangeEvent;
234     begin
235     ListChangeEvent := RoundListView.OnChange;
236     RoundListView.OnChange := nil;
237     try
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;
243     end;
244     end;
245     finally
246     RoundListView.OnChange := ListChangeEvent;
247     end;
248     end;
249    
250     procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
251     var
252     i: Integer;
253     RoundItem: TRoundItem;
254     ListChangeEvent: TLVChangeEvent;
255     begin
256     ListChangeEvent := RoundListView.OnChange;
257     RoundListView.OnChange := nil;
258     try
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;
264     end;
265     end;
266     finally
267     RoundListView.OnChange := ListChangeEvent;
268     end;
269     end;
270    
271     procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
272     begin
273 h677 1.20 //鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃?鐃緒申鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
274     if FColumnToSort > -1 then
275     (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
276     FColumnToSort := -1;
277    
278 hi_ 1.1 if RoundNameComboBox.ItemIndex = 0 then
279     SetRoundItem('')
280     else
281     SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
282     end;
283    
284     procedure TRoundDialog.SetRoundItem(RoundName: string);
285     var
286     ListItem: TListItem;
287     i: Integer;
288     ListChangeEvent: TLVChangeEvent;
289     begin
290     ListChangeEvent := RoundListView.OnChange;
291     RoundListView.OnChange := nil;
292     try
293     RoundListView.Clear;
294 deux 1.7 for i := 0 to RoundList.Count[grtBoard] - 1 do begin
295 hi_ 1.1 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;
303     end;
304     end;
305 deux 1.7 for i := 0 to RoundList.Count[grtItem] - 1 do begin
306 hi_ 1.1 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;
314     end;
315     end;
316     finally
317     RoundListView.OnChange := ListChangeEvent;
318     end;
319     end;
320    
321     procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
322     var
323 h677 1.8 // Board: TBoard;
324     // ThreadItem: TThreadItem;
325 hi_ 1.1 RoundItem: TRoundItem;
326     ListChangeEvent: TLVChangeEvent;
327     begin
328     ListChangeEvent := RoundListView.OnChange;
329     RoundListView.OnChange := nil;
330     try
331     if RoundListView.Selected = nil then
332     Exit;
333     if TObject(RoundListView.Selected.Data) is TRoundItem then begin
334     RoundItem := TRoundItem(RoundListView.Selected.Data);
335 h677 1.18 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;
339     end;
340     //RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
341 h677 1.20 {
342 hi_ 1.1 if RoundItem.RoundType = grtBoard then begin
343 h677 1.4 //Board := TBoard( RoundItem.Item );
344     RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
345 hi_ 1.1 Board.Round := False;
346     Board.RoundName := '';
347     end else begin
348 h677 1.4 //ThreadItem := TThreadItem( RoundItem.Item );
349 hi_ 1.1 RoundList.Delete(ThreadItem);
350     ThreadItem.Round := False;
351     ThreadItem.RoundName := '';
352     end;
353 h677 1.20 }
354 hi_ 1.1 GikoForm.ListView.Refresh;
355     end;
356     RoundListView.Selected.Delete;
357     finally
358     RoundListView.OnChange := ListChangeEvent;
359     end;
360     end;
361    
362 h677 1.20 procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
363     Column: TListColumn);
364     begin
365     if FColumnToSort > -1 then
366     (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
367    
368     if FColumnToSort = Column.Index then
369     FSortOrder := not FSortOrder
370     else
371     FSortOrder := false;
372    
373     if FSortOrder then
374     Column.ImageIndex := 3
375     else
376     Column.ImageIndex := 2;
377    
378     FColumnToSort := Column.Index;
379     (Sender as TCustomListView).AlphaSort;
380     end;
381    
382     procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
383     Item2: TListItem; Data: Integer; var Compare: Integer);
384     var
385     ix: Integer;
386     begin
387     if FColumnToSort = 0 then begin
388     if not FSortOrder then begin
389     Compare := CompareText(Item1.Caption,Item2.Caption);
390     if Compare = 0 then
391     Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
392     end else begin
393     Compare := -CompareText(Item1.Caption,Item2.Caption);
394     if Compare = 0 then
395     Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
396     end;
397     end else begin
398     ix := FColumnToSort - 1;
399     if not FSortOrder then begin
400     Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
401     if Compare = 0 then
402     Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
403     end else begin
404     Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
405     if Compare = 0 then
406     Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
407     end;
408     end;
409     end;
410     (*
411     * 鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃?鐃?鐃緒申鐃?鐃?鐃緒申鐃緒申鐃緒申鐃?鐃?鐃?鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申鐃緒申
412     *)
413     procedure TRoundDialog.RoundListViewColumnRightClick(Sender: TObject;
414     Column: TListColumn; Point: TPoint);
415     begin
416     RoundNameComboBox.OnChange(Sender);
417     end;
418    
419 hi_ 1.1 end.

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