+++ /dev/null
-unit Round;
-
-interface
-
-uses
- Windows, Classes, Controls, Forms, StdCtrls, ComCtrls, Menus,
- SysUtils, ImgList, ExtCtrls, GikoSystem, GikoUtil, Dialogs;
-
-type
- TRoundDialog = class(TForm)
- RoundPopupMenu: TPopupMenu;
- C1: TMenuItem;
- P1: TMenuItem;
- N1: TMenuItem;
- D1: TMenuItem;
- ItemIcon16: TImageList;
- Panel1: TPanel;
- Label1: TLabel;
- Label2: TLabel;
- RoundNameComboBox: TComboBox;
- Panel2: TPanel;
- Panel3: TPanel;
- AllSelectButton: TButton;
- AllCancelButton: TButton;
- RoundDeleteButton: TButton;
- Panel4: TPanel;
- Button1: TButton;
- RoundButton: TButton;
- StatusBar1: TStatusBar;
- RoundListView: TListView;
- procedure RoundButtonClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure RoundListViewChange(Sender: TObject; Item: TListItem;
- Change: TItemChange);
- procedure AllSelectButtonClick(Sender: TObject);
- procedure AllCancelButtonClick(Sender: TObject);
- procedure RoundNameComboBoxChange(Sender: TObject);
- procedure RoundDeleteButtonClick(Sender: TObject);
- procedure RoundListViewColumnClick(Sender: TObject;
- Column: TListColumn);
- procedure RoundListViewCompare(Sender: TObject; Item1,
- Item2: TListItem; Data: Integer; var Compare: Integer);
- private
- { Private \90é\8c¾ }
- FColumnToSort: Integer;
- FSortOrder: Boolean;
- function GetRoundCount: Integer;
- procedure SetRoundItem(RoundName: string);
- function CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
- public
- { Public \90é\8c¾ }
- end;
-
-//var
-// RoundDialog: TRoundDialog;
-
-implementation
-
-uses
- Giko, BoardGroup, RoundData, Math;
-
-{$R *.DFM}
-
-procedure TRoundDialog.RoundButtonClick(Sender: TObject);
-var
- i: Integer;
- cnt: Integer;
- msg: string;
- Board: TBoard;
- ThreadItem: TThreadItem;
- RoundItem: TRoundItem;
-begin
- if CompareTime(GikoForm.LastRoundTime, Now, 3) then begin
- msg := '\88ê\93x\8f\84\89ñ\82·\82é\82Æ\82R\95ª\8aÔ\8f\84\89ñ\82Í\8fo\97\88\82Ü\82¹\82ñ\81B';
- MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
- Exit;
- end;
-//{$IF Defined(FRCRND) }
-// Giko.GikoForm.LoginAction.Checked := true; // \93®\8dì\8e\8e\8c±\97p\93r
-//{$IFEND}
-
- cnt := GetRoundCount;
- if cnt = 0 then begin
- 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¢';
- MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
- Exit;
- end;
- if cnt > 500 then begin
- msg := '500\88È\8fã\82Ì\8f\84\89ñ\82Í\82Å\82«\82Ü\82¹\82ñ';
- MsgBox(Handle, msg, '\83G\83\89\81[', MB_OK or MB_ICONSTOP);
- Exit;
- end;
-
- for i := 0 to RoundList.Count[grtBoard] - 1 do begin
- RoundItem := RoundList.Items[i, grtBoard];
- if not RoundItem.BoolData then Continue;
- if not Giko.GikoForm.LoginAction.Checked then Exit;
- if RoundItem.RoundType = grtBoard then begin
- //Board := TBoard( RoundItem.Item );
- Board := BBSsFindBoardFromURL(RoundItem.URL);
- if Board <> nil then begin
- if not Board.IsThreadDatRead then
- GikoSys.ReadSubjectFile(Board);
- GikoForm.DownloadList(Board);
- end;
- end;
- end;
- for i := 0 to RoundList.Count[grtItem] - 1 do begin
- RoundItem := RoundList.Items[i, grtItem];
- if not RoundItem.BoolData then Continue;
-// if not Giko.GikoForm.LoginAction.Checked then Exit;
- if RoundItem.RoundType = grtItem then begin
- //ThreadItem := TThreadItem( RoundItem.Item );
- ThreadItem := BBSsFindThreadFromURL(RoundItem.URL);
- if ThreadItem <> nil then begin
-// GikoForm.AddMessageList('debug2:' + IntToStr(i), nil);
- GikoForm.DownloadContent(ThreadItem);
- end;
- end;
- end;
- GikoForm.LastRoundTime := Now;
- Close;
-end;
-
-function TRoundDialog.GetRoundCount: Integer;
-var
- i: Integer;
- RoundItem: TRoundItem;
-begin
- Result := 0;
- for i := 0 to RoundList.Count[grtBoard] - 1 do begin
- RoundItem := RoundList.Items[i, grtBoard];
- if RoundItem.BoolData then
- Result := Result + 1;
- end;
- for i := 0 to RoundList.Count[grtItem] - 1 do begin
- RoundItem := RoundList.Items[i, grtItem];
- if RoundItem.BoolData then
- Result := Result + 1;
- end;
-end;
-
-function TRoundDialog.CompareTime(Time1: TDateTime; Time2: TDateTime; MarginMin: Integer): Boolean;
-const
- AMin: Double = (1 / 24 / 60);
-var
- d: TDateTime;
-begin
- d := Time1 + (AMin * MarginMin);
- Result := Time2 < d;
-end;
-
-procedure TRoundDialog.FormCreate(Sender: TObject);
-var
- i: Integer;
-begin
- FColumnToSort := -1;
- RoundNameComboBox.Items.Add('\81i\82·\82×\82Ä\81j');
- for i := 0 to RoundList.RoundNameList.Count - 1 do
- RoundNameComboBox.Items.Add(RoundList.RoundNameList[i]);
- for i := 0 to RoundList.Count[grtBoard] - 1 do
- RoundList.Items[i, grtBoard].BoolData := False;
- for i := 0 to RoundList.Count[grtItem] - 1 do
- RoundList.Items[i, grtItem].BoolData := False;
- RoundNameComboBox.ItemIndex := 0;
- SetRoundItem('');
- RoundList.SaveRoundFile;
-end;
-
-procedure TRoundDialog.RoundListViewChange(Sender: TObject;
- Item: TListItem; Change: TItemChange);
-var
- RoundItem: TRoundItem;
-begin
- if TObject(Item.Data) is TRoundItem then begin
- RoundItem := TRoundItem(Item.Data);
- RoundItem.BoolData := Item.Checked;
- end;
-end;
-
-procedure TRoundDialog.AllSelectButtonClick(Sender: TObject);
-var
- i: Integer;
- RoundItem: TRoundItem;
- ListChangeEvent: TLVChangeEvent;
-begin
- ListChangeEvent := RoundListView.OnChange;
- RoundListView.OnChange := nil;
- try
- for i := 0 to RoundListView.Items.Count - 1 do begin
- if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
- RoundItem := TRoundItem(RoundListView.Items[i].Data);
- RoundItem.BoolData := True;
- RoundListView.Items[i].Checked := True;
- end;
- end;
- finally
- RoundListView.OnChange := ListChangeEvent;
- end;
-end;
-
-procedure TRoundDialog.AllCancelButtonClick(Sender: TObject);
-var
- i: Integer;
- RoundItem: TRoundItem;
- ListChangeEvent: TLVChangeEvent;
-begin
- ListChangeEvent := RoundListView.OnChange;
- RoundListView.OnChange := nil;
- try
- for i := 0 to RoundListView.Items.Count - 1 do begin
- if TObject(RoundListView.Items[i].Data) is TRoundItem then begin
- RoundItem := TRoundItem(RoundListView.Items[i].Data);
- RoundItem.BoolData := False;
- RoundListView.Items[i].Checked := False;
- end;
- end;
- finally
- RoundListView.OnChange := ListChangeEvent;
- end;
-end;
-
-procedure TRoundDialog.RoundNameComboBoxChange(Sender: TObject);
-begin
- if RoundNameComboBox.ItemIndex = 0 then
- SetRoundItem('')
- else
- SetRoundItem(RoundNameComboBox.Items[RoundNameComboBox.itemIndex]);
-end;
-
-procedure TRoundDialog.SetRoundItem(RoundName: string);
-var
- ListItem: TListItem;
- i: Integer;
- ListChangeEvent: TLVChangeEvent;
-begin
- ListChangeEvent := RoundListView.OnChange;
- RoundListView.OnChange := nil;
- try
- RoundListView.Clear;
- for i := 0 to RoundList.Count[grtBoard] - 1 do begin
- if (RoundList.Items[i, grtBoard].RoundName = RoundName) or (RoundName = '') then begin
- ListItem := RoundListView.Items.Add;
- ListItem.Data := RoundList.Items[i, grtBoard];
- ListItem.Caption := RoundList.Items[i, grtBoard].RoundName;
- ListItem.SubItems.Add(RoundList.Items[i, grtBoard].BoardTitle);
- ListItem.SubItems.Add('-');
- ListItem.Checked := RoundList.Items[i, grtBoard].BoolData;
- ListItem.ImageIndex := 0;
- end;
- end;
- for i := 0 to RoundList.Count[grtItem] - 1 do begin
- if (RoundList.Items[i, grtItem].RoundName = RoundName) or (RoundName = '') then begin
- ListItem := RoundListView.Items.Add;
- ListItem.Data := RoundList.Items[i, grtItem];
- ListItem.Caption := RoundList.Items[i, grtItem].RoundName;
- ListItem.SubItems.Add(RoundList.Items[i, grtItem].BoardTitle);
- ListItem.SubItems.Add(RoundList.Items[i, grtItem].ThreadTitle);
- ListItem.Checked := RoundList.Items[i, grtItem].BoolData;
- ListItem.ImageIndex := 1;
- end;
- end;
- finally
- RoundListView.OnChange := ListChangeEvent;
- end;
-end;
-
-procedure TRoundDialog.RoundDeleteButtonClick(Sender: TObject);
-var
-// Board: TBoard;
-// ThreadItem: TThreadItem;
- RoundItem: TRoundItem;
- ListChangeEvent: TLVChangeEvent;
-begin
- ListChangeEvent := RoundListView.OnChange;
- RoundListView.OnChange := nil;
- try
- if RoundListView.Selected = nil then
- Exit;
- if TObject(RoundListView.Selected.Data) is TRoundItem then begin
- RoundItem := TRoundItem(RoundListView.Selected.Data);
- RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
- {
- if RoundItem.RoundType = grtBoard then begin
- //Board := TBoard( RoundItem.Item );
- RoundList.Delete(RoundItem.URL,RoundItem.RoundType);
- Board.Round := False;
- Board.RoundName := '';
- end else begin
- //ThreadItem := TThreadItem( RoundItem.Item );
- RoundList.Delete(ThreadItem);
- ThreadItem.Round := False;
- ThreadItem.RoundName := '';
- end;
- }
- GikoForm.ListView.Refresh;
- end;
- RoundListView.Selected.Delete;
- finally
- RoundListView.OnChange := ListChangeEvent;
- end;
-end;
-
-procedure TRoundDialog.RoundListViewColumnClick(Sender: TObject;
- Column: TListColumn);
-begin
- if FColumnToSort > -1 then
- (Sender as TCustomListView).Column[FColumnToSort].ImageIndex := -1;
-
- if FColumnToSort = Column.Index then
- FSortOrder := not FSortOrder
- else
- FSortOrder := false;
-
- if FSortOrder then
- Column.ImageIndex := 3
- else
- Column.ImageIndex := 2;
-
- FColumnToSort := Column.Index;
- (Sender as TCustomListView).AlphaSort;
-end;
-
-procedure TRoundDialog.RoundListViewCompare(Sender: TObject; Item1,
- Item2: TListItem; Data: Integer; var Compare: Integer);
-var
- ix: Integer;
-begin
- if FColumnToSort = 0 then begin
- if not FSortOrder then begin
- Compare := CompareText(Item1.Caption,Item2.Caption);
- if Compare = 0 then
- Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
- end else begin
- Compare := -CompareText(Item1.Caption,Item2.Caption);
- if Compare = 0 then
- Compare := -CompareValue(Item1.ImageIndex,item2.ImageIndex);
- end;
- end else begin
- ix := FColumnToSort - 1;
- if not FSortOrder then begin
- Compare := CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
- if Compare = 0 then
- Compare := CompareValue(Item1.ImageIndex, item2.ImageIndex);
- end else begin
- Compare := -CompareText(Item1.SubItems[ix],Item2.SubItems[ix]);
- if Compare = 0 then
- Compare := -CompareValue(Item1.ImageIndex, item2.ImageIndex);
- end;
- end;
-end;
-
-end.