function CompareDate(Item1, Item2: TDateTime): Integer;
procedure SetSortDate(Date: TDateTime);
function GetSortDate(): TDateTime;
-var
- SortOrder: Boolean;
- SortIndex: Integer;
- SortNoFlag: Boolean;
+ procedure SetSortOrder(Order: Boolean);
+ function GetSortOrder: Boolean;
+ procedure SetSortIndex(Index: Integer);
+ function GetSortIndex: Integer;
+ procedure SetSortNoFlag(Flag: Boolean);
+ function GetSortNoFlag: Boolean;
implementation
+
var
FSortDate: TDateTime;
+ FSortOrder: Boolean;
+ FSortIndex: Integer;
+ FSortNoFlag: Boolean;
+
+function CaclVigor(Thread: TThreadItem): Double;
+var
+ span : Double;
+begin
+ if (Thread.AgeSage <> gasArch) then begin
+ span := DaySpan(Sort.GetSortDate, Thread.CreateDate);
+ end else begin
+ span := DaySpan(Thread.LastModified, Thread.CreateDate);
+ end;
+ if (span > 0) then begin
+ Result := Thread.AllResCount / span;
+ end else begin
+ Result := 0;
+ end;
+end;
+procedure SetSortOrder(Order: Boolean);
+begin
+ FSortOrder := Order;
+end;
+function GetSortOrder: Boolean;
+begin
+ Result := FSortOrder;
+end;
+procedure SetSortIndex(Index: Integer);
+begin
+ FSortIndex := Index;
+end;
+function GetSortIndex: Integer;
+begin
+ Result := FSortIndex;
+end;
+procedure SetSortNoFlag(Flag: Boolean);
+begin
+ FSortNoFlag := Flag;
+end;
+function GetSortNoFlag: Boolean;
+begin
+ Result := FSortNoFlag;
+end;
function CategorySortProc(Item1, Item2: Pointer): integer;
var
CategoryItem1 := TCategory(Item1);
CategoryItem2 := TCategory(Item2);
- case TGikoBBSColumnID( SortIndex ) of
+ case TGikoBBSColumnID( FSortIndex ) of
gbbscTitle:
- if SortNoFlag then
+ if FSortNoFlag then
Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
else
Result := AnsiCompareText(CategoryItem1.Title, CategoryItem2.Title);
Result := CompareInt(CategoryItem1.No, CategoryItem2.No)
end;
- if not SortOrder then
+ if not FSortOrder then
Result := Result * -1;
end;
begin
BoardItem1 := TBoard(List.Objects[Item1]);
BoardItem2 := TBoard(List.Objects[Item2]);
- case TGikoCategoryColumnID( SortIndex ) of
+ case TGikoCategoryColumnID( FSortIndex ) of
gccTitle:
- if SortNoFlag then
+ if FSortNoFlag then
Result := CompareInt(BoardItem1.No, BoardItem2.No)
else
Result := AnsiCompareText(BoardItem1.Title, BoardItem2.Title);
Result := CompareInt(BoardItem1.No, BoardItem2.No)
end;
- if not SortOrder then
+ if not FSortOrder then
Result := Result * -1;
end;
var
ThreadItem1: TThreadItem;
ThreadItem2: TThreadItem;
- SpanDay1, SpanDay2: Double;
- NowDateTime: TDateTime;
begin
ThreadItem1 := TThreadItem(List.Objects[ Item1 ]);
ThreadItem2 := TThreadItem(List.Objects[ Item2 ]);
- case TGikoBoardColumnID( SortIndex ) of
+ case TGikoBoardColumnID( FSortIndex ) of
gbcTitle:
begin
- if SortNoFlag then
+ if FSortNoFlag then
Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
else
Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)
gbcRoundDate: Result := CompareDateTime(ThreadItem1.RoundDate, ThreadItem2.RoundDate); {gbcLastModified:}
gbcCreated: Result := CompareDateTime(ThreadItem1.CreateDate, ThreadItem2.CreateDate);
gbcLastModified: Result := CompareDateTime(ThreadItem1.LastModified, ThreadItem2.LastModified); {gbcLastModified:}
- gbcVigor:
- begin
- SpanDay1 := DaySpan(FSortDate, ThreadItem1.CreateDate);
- SpanDay2 := DaySpan(FSortDate, ThreadItem2.CreateDate);
- if (SpanDay1 > 0) and (SpanDay2 > 0) then begin
- Result := CompareValue(
- ThreadItem1.AllResCount / SpanDay1,
- ThreadItem2.AllResCount / SpanDay2);
- end else if (SpanDay1 > 0) then begin
- Result := 1;
- end else if (SpanDay2 > 0) then begin
- Result := -1;
- end else begin
- Result := 0;
- end;
- end;
+ gbcVigor: Result := CompareValue(CaclVigor(ThreadItem1), CaclVigor(ThreadItem2));
else
Result := 0;
end;
else
Result := CompareDate(ThreadItem1.LastModified, ThreadItem2.LastModified);
}
- if not SortOrder then
+ if not FSortOrder then
Result := Result * -1;
// \83\\81[\83g\95]\89¿\82ª\93¯\82¶\8fê\8d\87\82Í\81A\91æ1\83J\83\89\83\80\82Ì\8f¸\8f\87\82É\83\\81[\83g
if Result = 0 then begin
- if SortNoFlag then
+ if FSortNoFlag then
Result := CompareInt(ThreadItem1.No, ThreadItem2.No)
else
Result := AnsiCompareText(ThreadItem1.Title, ThreadItem2.Title)