6 Windows, Messages, SysUtils, Classes, Graphics, Controls,
7 BoardGroup, StdCtrls, ComCtrls;
10 TListViewUtils = class(TObject)
14 class procedure DrawCategoryItem(BBS: TBBS; Item: TListItem; ListView: TListView);
15 class procedure DrawBoardItem(Category: TCategory; Item: TListItem; ListView: TListView);
16 class procedure DrawThreadItem(Board: TBoard; Item: TListItem; ListView: TListView);
17 class procedure DrawItemLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
18 class procedure DrawItemNoLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
21 class procedure SetBoardTreeNode(inBBS : TBBS; treeView: TTreeView);
22 class function SetCategoryListItem(ABBS2ch: TBBS; ListView: TListView;
23 NumberVisible: Boolean): Integer;
24 class procedure ListViewSort(Sender: TObject; ListView: TListView; Column: TListColumn;
25 NumberVisible: Boolean; vSortOrder: Boolean);
26 class function ActiveListTrueColumn( column : TListColumn ) : TListColumn;
27 class function SetBoardListItem(Category: TCategory; ListView: TListView;
28 NumberVisible: Boolean): Integer;
29 class function SetThreadListItem(Board: TBoard; ListView: TListView;
30 NumberVisible: Boolean): Integer;
31 class procedure ListViewData(Sender: TObject; Item: TListItem);
37 GikoSystem, Sort, Setting, Giko, MojuUtils, GikoDataModule, DateUtils, Math;
40 //
\83c
\83\8a\81[
\81E
\83\8a\83X
\83g
\83A
\83C
\83R
\83\93
41 ITEM_ICON_2CH1 = 0; //2ch
\83A
\83C
\83R
\83\93
42 ITEM_ICON_2CH2 = 1; //2ch
\83A
\83C
\83R
\83\93
43 ITEM_ICON_CATEGORY1 = 2; //
\83J
\83e
\83S
\83\8a\83A
\83C
\83R
\83\93
44 ITEM_ICON_CATEGORY2 = 3; //
\83J
\83e
\83S
\83\8a\83A
\83C
\83R
\83\93
45 ITEM_ICON_BOARD_NOSUBJECT = 3; //
\93Ç
\82Ý
\8d\9e\82Ü
\82ê
\82Ä
\82¢
\82È
\82¢
\94Â
\83A
\83C
\83R
\83\93
46 ITEM_ICON_BOARD1 = 4; //
\94Â
\83A
\83C
\83R
\83\93
47 ITEM_ICON_BOARD2 = 5; //
\94Â
\83A
\83C
\83R
\83\93
48 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
49 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
50 ITEM_ICON_THREAD1 = 8; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82È
\82µ
\81j
51 ITEM_ICON_THREAD2 = 9; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82È
\82µ
\81j
52 ITEM_ICON_THREADNEW1 = 10; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\90V
\92\85\81j
53 ITEM_ICON_THREADNEW2 = 11; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\90V
\92\85\81j
54 ITEM_ICON_SORT1 = 12; //
\83\
\81[
\83g
\83A
\83C
\83R
\83\93
55 ITEM_ICON_SORT2 = 13; //
\83\
\81[
\83g
\83A
\83C
\83R
\83\93
56 ITEM_ICON_BOARD_LOG = 17; //
\83X
\83\8c\83\8d\83O
\82 \82è
\94Â
\83A
\83C
\83R
\83\93
57 ITEM_ICON_BOARD_NEW = 18; //
\83X
\83\8c\90V
\92\85\94Â
\83A
\83C
\83R
\83\93
60 //
\83{
\81[
\83h
\83c
\83\8a\81[
\90Ý
\92è
61 class procedure TListViewUtils.SetBoardTreeNode(
68 CategoryNode: TTreeNode;
73 //
\94Â
\83\8a\83X
\83g
\82Ì
\90Ý
\92è
75 TreeView.Items.BeginUpdate;
78 if not inBBS.IsBoardFileRead then
79 GikoSys.ReadBoardFile( inBBS );
81 //
\83L
\83\83\83r
\83l
\83b
\83g
\95\
\8e¦
\91O
\82É
\8dÄ
\83\
\81[
\83g
82 if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
83 Sort.SetSortOrder(true);
85 Sort.SetSortNoFlag(true);
86 inBBS.Sort(CategorySortProc);
89 Root := TreeView.Items.Add( nil, inBBS.Title );
90 Root.ImageIndex := ITEM_ICON_2CH1;
91 Root.SelectedIndex := ITEM_ICON_2CH2;
93 for i := inBBS.Count - 1 downto 0 do begin
94 Category := TCategory(inBBS.Items[i]);
95 CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
96 CategoryNode.Data := Category;
97 CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
98 CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
100 //
\83L
\83\83\83r
\83l
\83b
\83g
\95\
\8e¦
\91O
\82É
\8dÄ
\83\
\81[
\83g
101 if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
102 Sort.SetSortOrder(true);
103 Sort.SetSortIndex(0);
104 Sort.SetSortNoFlag(true);
105 Category.CustomSort(BoardSortProc);
108 for j := Category.Count - 1 downto 0 do begin
109 Board := TBoard(Category.Items[j]);
111 BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
112 BoardNode.Data := Board;
113 //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
114 if not Board.IsLogFile then begin
115 BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
116 BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
118 BoardNode.ImageIndex := ITEM_ICON_BOARD1;
119 BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
120 for k := 0 to Board.Count - 1 do begin
121 if Board.Items[ k ].IsLogFile then begin
122 BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
123 BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
132 CategoryNode.Expanded := Category.NodeExpand;
136 TreeView.Items.EndUpdate;
140 //ListView
\82É
\83J
\83e
\83S
\83\8a\82ð
\90Ý
\92è
\82·
\82é
141 class function TListViewUtils.SetCategoryListItem(
144 NumberVisible: Boolean
147 TitleColumn : TListColumn;
148 ListColumn : TListColumn;
149 i, id, idx : Integer;
151 ListView.Items.BeginUpdate;
153 ListView.Columns.Clear;
154 TitleColumn := ListView.Columns.Add;
155 TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
156 TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
158 for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
159 if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
160 TitleColumn.Tag := i;
163 id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
164 if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
165 (id <= Integer( High( TGikoBBSColumnID ) )) then begin
166 ListColumn := ListView.Columns.Add;
167 // ListColumn.Tag := id;
169 ListColumn.Caption := GikoBBSColumnCaption[ id ];
170 ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
174 TitleColumn.Index := idx;
176 ListView.Items.Count := 0;
177 ListView.Items.Clear;
178 ListView.Items.Count := ABBS2ch.Count;
180 GikoForm.ListNameLabel.Caption := ABBS2ch.Title;
181 GikoForm.FolderImage.Picture := nil;
182 GikoForm.ItemIcon16.GetBitmap(1, GikoForm.FolderImage.Picture.Bitmap);
184 for i := ListView.Columns.Count - 1 downto 0 do begin
185 if (GikoSys.Setting.BBSSortIndex
186 = Integer(GikoSys.Setting.BBSColumnOrder[ ListView.Column[ i ].Tag ])) then begin
187 ListViewSort( nil, ListView, ListView.Column[ i ],
188 NumberVisible, GikoSys.Setting.BBSSortOrder);
193 Result := ABBS2ch.Count;
195 ListView.Items.EndUpdate;
199 class procedure TListViewUtils.ListViewSort(
203 NumberVisible: Boolean;
210 wkCategory: TCategory;
213 idx := ActiveListTrueColumn( Column ).Tag;
215 for i := 0 to ListView.Columns.Count - 1 do begin
216 ListView.Column[i].ImageIndex := -1;
219 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
221 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
224 Sort.SetSortNoFlag(NumberVisible);
226 if TObject( GikoForm.ActiveList ) is TBBS then begin
227 wkBBS := TBBS( GikoForm.ActiveList );
228 orderList := GikoSys.Setting.BBSColumnOrder;
229 Sort.SetSortOrder(vSortOrder);
230 Sort.SetSortIndex(Integer( orderList[ idx ] ));
231 GikoSys.Setting.BBSSortIndex := Sort.GetSortIndex;
232 GikoSys.Setting.BBSSortOrder := Sort.GetSortOrder;
233 wkBBS.Sort(Sort.CategorySortProc);
234 end else if TObject( GikoForm.ActiveList ) is TCategory then begin
235 wkCategory := TCategory( GikoForm.ActiveList );
236 orderList := GikoSys.Setting.CategoryColumnOrder;
237 Sort.SetSortOrder(vSortOrder);
238 Sort.SetSortIndex(Integer( orderList[ idx ] ));
239 GikoSys.Setting.CategorySortIndex := Sort.GetSortIndex;
240 GikoSys.Setting.CategorySortOrder := Sort.GetSortOrder;
241 wkCategory.CustomSort(BoardSortProc);
242 end else if TObject( GikoForm.ActiveList ) is TBoard then begin
243 wkBoard := TBoard( GikoForm.ActiveList );
244 orderList := GikoSys.Setting.BoardColumnOrder;
245 Sort.SetSortOrder(vSortOrder);
246 Sort.SetSortIndex(Integer( orderList[ idx ] ));
247 GikoSys.Setting.BoardSortIndex := Sort.GetSortIndex;
248 GikoSys.Setting.BoardSortOrder := Sort.GetSortOrder;
249 wkBoard.CustomSort(ThreadItemSortProc);
256 \brief ListView
\82Ì Column
\82ð
\90^
\82Ì
\83J
\83\89\83\80\82É
\95Ï
\8a·
258 Delphi 6 Personal
\82Å
\82Ì ListView
\82Å
\82Í ListViewColumnClick
\83C
\83x
\83\93\83g
\82Å
259 \90³
\82µ
\82¢
\83J
\83\89\83\80\82ª
\93n
\82³
\82ê
\82È
\82¢
\82½
\82ß
\81A
\90³
\82µ
\82¢
\83J
\83\89\83\80\82É
\95Ï
\8a·
\82µ
\82Ü
\82·
\81B
261 class function TListViewUtils.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
263 //
\90³
\82µ
\82
\95Ï
\8a·
\82·
\82é
\95û
\96@
\82ª
\95ª
\82©
\82ç
\82È
\82¢
\82Ì
\82Å
\95Û
\97¯
267 //ListView
\82ÉBoardItem
\82ð
\90Ý
\92è
\82·
\82é
268 class function TListViewUtils.SetBoardListItem(
271 NumberVisible: Boolean
274 TitleColumn : TListColumn;
275 ListColumn : TListColumn;
276 i, id, idx : Integer;
278 ListView.Items.BeginUpdate;
280 ListView.Columns.Clear;
281 TitleColumn := ListView.Columns.Add;
282 TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
283 TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
285 for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
286 if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
287 TitleColumn.Tag := i;
290 id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
291 if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
292 (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
293 ListColumn := ListView.Columns.Add;
294 // ListColumn.Tag := id;
296 ListColumn.Caption := GikoCategoryColumnCaption[ id ];
297 ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
301 TitleColumn.Index := idx;
303 ListView.Items.Count := 0;
304 ListView.Items.Clear;
305 ListView.Items.Count := Category.Count;
307 for i := Category.Count - 1 downto 0 do begin
308 if( Category.Items[i].ParentCategory <> Category ) then begin
309 Category.Items[i].ParentCategory := Category;
310 Category.Items[i].No := i + 1;
313 // UpFolderAction.Enabled := True;
314 // AllItemAction.Enabled := False;
315 // LogItemAction.Enabled := False;
316 // NewItemAction.Enabled := False;
317 // SelectItemAction.Enabled := False;
318 // ListDownloadToolButton.Enabled := False;
319 // BoardReservToolButton.Enabled := False;
320 // ListThreadDownloadToolButton.Enabled := False;
322 GikoForm.ListNameLabel.Caption := Category.Title;
323 GikoForm.FolderImage.Picture := nil;
324 GikoForm.ItemIcon16.GetBitmap(3, GikoForm.FolderImage.Picture.Bitmap);
326 for i := ListView.Columns.Count - 1 downto 0 do begin
327 if (GikoSys.Setting.CategorySortIndex =
328 Integer( GikoSys.Setting.CategoryColumnOrder[ ListView.Columns[i].Tag ] )) then begin
329 ListViewSort( nil, ListView, ListView.Column[ i ],
330 NumberVisible, GikoSys.Setting.CategorySortOrder);
335 Result := Category.Count;
337 ListView.Items.EndUpdate;
340 //ListView
\82ÉThreadItem
\82ð
\90Ý
\92è
\82·
\82é
341 class function TListViewUtils.SetThreadListItem(
344 NumberVisible: Boolean
347 TitleColumn : TListColumn;
348 ListColumn : TListColumn;
349 i, id, idx : Integer;
351 ListView.Items.BeginUpdate;
353 //Screen.Cursor := crHourGlass;
356 //
\83`
\83\89\82Â
\82«
\96h
\8e~
\82Ì
\82½
\82ß
\81A
\95Ï
\8dX
\82³
\82ê
\82Ä
\82¢
\82é
\8fê
\8d\87\82Ì
\82Ý
357 //
\81¦
\96¼
\8fÌ
\82Í
\88á
\82¤
\82ª
\83J
\83\89\83\80\90\94\82ª
\93¯
\82¶
\81A
\82Æ
\82¢
\82Á
\82½
\8fê
\8d\87\82É
\91Î
\8f\88\82Å
\82«
\82È
\82¢
\82Ì
\82Å
\92\8d\88Ó
358 if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
361 ListView.Columns.Clear;
362 TitleColumn := ListView.Columns.Add;
363 TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
364 TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
366 for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
367 if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
368 TitleColumn.Tag := i;
371 id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
372 if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
373 (id <= Integer( High( TGikoBoardColumnID ) )) then begin
374 ListColumn := ListView.Columns.Add;
375 ListColumn.Caption := GikoBoardColumnCaption[ id ];
376 // ListColumn.Tag := id;
378 ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
379 ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
383 TitleColumn.Index := idx;
386 ListView.Items.Count := 0;
387 ListView.Items.Clear;
389 {case GikoForm.ViewType of
390 gvtAll: ListView.Items.Count := Board.Count;
391 gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
392 gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
393 gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
396 case GikoForm.ViewType of
397 gvtAll: ListView.Items.Count := Board.Count;
400 Board.LogThreadCount := Board.GetLogThreadCount;
401 ListView.Items.Count := Board.LogThreadCount;
405 Board.NewThreadCount := Board.GetNewThreadCount;
406 ListView.Items.Count := Board.NewThreadCount;
410 Board.ArchiveThreadCount := Board.GetArchiveThreadCount;
411 ListView.Items.Count := Board.ArchiveThreadCount;
415 Board.LiveThreadCount := Board.GetLiveThreadCount;
416 ListView.Items.Count := Board.LiveThreadCount;
420 Board.UserThreadCount:= Board.GetUserThreadCount;
421 ListView.Items.Count := Board.UserThreadCount;
425 GikoForm.ListNameLabel.Caption := Board.Title;
426 GikoForm.FolderImage.Picture := nil;
427 GikoForm.ItemIcon16.GetBitmap(5, GikoForm.FolderImage.Picture.Bitmap);
429 for i := ListView.Columns.Count - 1 downto 0 do begin
430 if (GikoSys.Setting.BoardSortIndex
431 = Integer( GikoSys.Setting.BoardColumnOrder[ ListView.Columns[ i ].Tag ] )) then begin
432 ListViewSort( nil, ListView, ListView.Column[ i ],
433 NumberVisible, GikoSys.Setting.BoardSortOrder);
438 Result := Board.Count;
440 ListView.Items.EndUpdate;
444 class procedure TListViewUtils.ListViewData(Sender: TObject; Item: TListItem);
446 ActivListObj : TObject;
447 ListView : TListView;
449 if (Sender <> nil) and (Sender is TListView) then begin
450 ListView := TListView(Sender);
451 ActivListObj := GikoForm.ActiveList;
452 if ActivListObj is TBBS then begin
453 DrawCategoryItem(TBBS(ActivListObj), Item, ListView);
454 end else if ActivListObj is TCategory then begin
455 DrawBoardItem(TCategory(ActivListObj), Item, ListView);
456 end else if ActivListObj is TBoard then begin
457 DrawThreadItem(TBoard(ActivListObj), Item, ListView);
461 //!
\83\8a\83X
\83g
\83r
\83\85\81[
\82Ì
\83A
\83C
\83e
\83\80\82ð
\95`
\89æ
\82·
\82é
\81i
\83J
\83e
\83S
\83\8a\81[
\97p
\81j
462 class procedure TListViewUtils.DrawCategoryItem(
463 BBS: TBBS; Item: TListItem; ListView: TListView
466 Category : TCategory;
469 //=====
\83J
\83e
\83S
\83\8a\83\8a\83X
\83g =====
470 ListView.StateImages := nil;
472 if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
473 or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
474 or (not (BBS.Items[Item.index] is TCategory)) then Exit;
476 Category := TCategory(BBS.Items[Item.index]);
478 if (Category = nil) then Exit;
480 if GikoDM.ListNumberVisibleAction.Checked then
481 Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
483 Item.Caption := Category.Title;
485 Item.ImageIndex := ITEM_ICON_CATEGORY1;
486 Item.Data := Category;
488 //!
\83\8a\83X
\83g
\83r
\83\85\81[
\82Ì
\83A
\83C
\83e
\83\80\82ð
\95`
\89æ
\82·
\82é
\81i
\94Â
\97p
\81j
489 class procedure TListViewUtils.DrawBoardItem(
490 Category: TCategory; Item: TListItem; ListView: TListView
496 //=====
\94Â
\83\8a\83X
\83g =====
497 ListView.StateImages := nil;
499 if (Category = nil) or (Category.Count <= 0) or (Item = nil)
500 or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
501 or (not (Category.Items[Item.Index] is TBoard)) then Exit;
503 Board := TBoard(Category.Items[Item.Index]);
505 if (Board = nil) then Exit;
507 if GikoDM.ListNumberVisibleAction.Checked then
508 Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
510 Item.Caption := Board.Title;
512 if Item.SubItems.Count <> ListView.Columns.Count then begin
514 Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
515 for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
516 Item.SubItems.Add('');
519 Item.ImageIndex := ITEM_ICON_BOARD1;
521 for i := 0 to ListView.Columns.Count - 1 do begin
522 if GikoSys.Setting.CategoryColumnOrder.Count <= i then
524 case GikoSys.Setting.CategoryColumnOrder[ i ] of
526 // Item.Caption
\82Í SubItems
\82É
\8aÜ
\82Ü
\82ê
\96³
\82¢
\82Ì
\82Å
531 Item.SubItems[ idx ] := Board.RoundName // '
\97\
\96ñ'
533 Item.SubItems[ idx ] := '';
536 if Board.RoundDate = ZERO_DATE then begin
537 Item.SubItems[ idx ] := '';
539 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
547 //!
\83\8a\83X
\83g
\83r
\83\85\81[
\82Ì
\83A
\83C
\83e
\83\80\82ð
\95`
\89æ
\82·
\82é
\81i
\83X
\83\8c\83b
\83h
\97p
\81j
548 class procedure TListViewUtils.DrawThreadItem(
549 Board: TBoard; Item: TListItem;ListView : TListView
552 ThreadItem: TThreadItem;
557 //=====
\83X
\83\8c\83\8a\83X
\83g =====
558 if GikoSys.Setting.ListIconVisible then
559 ListView.StateImages := GikoForm.StateIconImageList
561 ListView.StateImages := nil;
564 case GikoForm.ViewType of
565 gvtAll: BoardCnt := Board.Count;
566 gvtLog: BoardCnt := Board.LogThreadCount;
567 gvtNew: BoardCnt := Board.NewThreadCount;
568 gvtArch: BoardCnt := Board.ArchiveThreadCount;
569 gvtLive: BoardCnt := Board.LiveThreadCount;
570 gvtUser: BoardCnt := Board.UserThreadCount;
575 if (BoardCnt <= 0) or (Item = nil) or (Item.Index >= BoardCnt)
576 or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
578 //
\89ü
\91P
\82·
\82×
\82«
\83u
\83\8d\83b
\83N/////////////////////////////////////////////////////
580 case GikoForm.ViewType of
581 gvtAll: if Item.Index >= Board.Count then Exit else
582 ThreadItem := TThreadItem(Board.Items[Item.Index]);
583 gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
584 gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
585 gvtArch: ThreadItem := Board.GetArchiveThread(Item.Index);
586 gvtLive: ThreadItem := Board.GetLiveThread(Item.Index);
587 gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
589 //////////////////////////////////////////////////////////////////////////
591 if (ThreadItem = nil) then Exit;
593 RepStr := CustomStringReplace(ThreadItem.Title, '<', '<' );
594 RepStr := CustomStringReplace(RepStr, '>', '>' );
595 RepStr := CustomStringReplace(RepStr, '"', '"' );
596 RepStr := CustomStringReplace(RepStr, '&', '&' );
597 //RepStr := StringReplace(RepStr, '
\81\97\81M', ',', [rfReplaceAll]);
598 if Item.SubItems.Count <> ListView.Columns.Count then begin
600 Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
601 for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
602 Item.SubItems.Add('');
605 if GikoDM.ListNumberVisibleAction.Checked then
606 Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
608 Item.Caption := RepStr;
610 case ThreadItem.AgeSage of
611 gasNone: Item.StateIndex := -1;
612 gasNew: Item.StateIndex := 0;
613 gasAge: Item.StateIndex := 1;
614 gasSage: Item.StateIndex := 2;
615 gasArch: Item.StateIndex := 3;
618 if ThreadItem.IsLogFile then begin
619 DrawItemLogThread(ThreadItem, Item, ListView.Columns.Count);
621 DrawItemNoLogThread(ThreadItem, Item, GikoSys.Setting.BoardColumnOrder.Count);
624 Item.Data := ThreadItem;
626 //!
\83\8d\83O
\97L
\82è
\83X
\83\8c\83b
\83h
\82ð
\95`
\89æ
\82·
\82é
627 class procedure TListViewUtils.DrawItemLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
633 for i := 0 to ColumnCount - 1 do begin
634 if GikoSys.Setting.BoardColumnOrder.Count <= i then
637 case GikoSys.Setting.BoardColumnOrder[ i ] of
639 // Item.Caption
\82Í SubItems
\82É
\8aÜ
\82Ü
\82ê
\96³
\82¢
\82Ì
\82Å
642 Item.SubItems[ idx ] := IntToStr(Thread.AllResCount);
644 Item.SubItems[ idx ] := IntToStr(Thread.Count);
646 Item.SubItems[ idx ] := IntToStr(Thread.AllResCount - Thread.Count);
648 if Thread.NewResCount = 0 then
649 Item.SubItems[ idx ] := ''
651 Item.SubItems[ idx ] := IntToStr(Thread.NewResCount);
653 Item.SubItems[ idx ] := '';
656 Item.SubItems[ idx ] := Thread.RoundName
658 Item.SubItems[ idx ] := '';
659 gbcRoundDate://gbcLastModified:
660 if (Thread.RoundDate = ZERO_DATE) then begin
661 Item.SubItems[ idx ] := '';
663 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.RoundDate);
665 if Thread.CreateDate = ZERO_DATE then begin
666 Item.SubItems[ idx ] := '';
668 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.CreateDate);
670 if (Thread.LastModified = ZERO_DATE) then begin
671 Item.SubItems[ idx ] := '';
673 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.LastModified);
676 if (Thread.CreateDate <> ZERO_DATE) then begin
677 if (Thread.AgeSage <> gasArch) then begin
678 spanday := DaySpan(Sort.GetSortDate, Thread.CreateDate);
680 spanday := DaySpan(Thread.LastModified, Thread.CreateDate);
682 if (spanday > 0) then begin
683 Item.SubItems[ idx ] := Format('%f', [Thread.AllResCount / spanday]);
685 Item.SubItems[ idx ] := '';
688 Item.SubItems[ idx ] := '';
695 if Thread.NewArrival then
696 Item.ImageIndex := ITEM_ICON_THREADNEW1
698 Item.ImageIndex := ITEM_ICON_THREADLOG1;
700 //!
\83\8d\83O
\82È
\82µ
\83X
\83\8c\83b
\83h
\82ð
\95`
\89æ
\82·
\82é
701 class procedure TListViewUtils.DrawItemNoLogThread(Thread: TThreadItem; Item: TListItem; ColumnCount: Integer);
707 for i := 0 to ColumnCount - 1do begin
708 case GikoSys.Setting.BoardColumnOrder[ i ] of
710 // Item.Caption
\82Í SubItems
\82É
\8aÜ
\82Ü
\82ê
\96³
\82¢
\82Ì
\82Å
713 Item.SubItems[ idx ] := IntToStr(Thread.AllResCount);
714 gbcRoundDate://gbcLastModified:
715 Item.SubItems[ idx ] := '';
717 if Thread.CreateDate = ZERO_DATE then begin
718 Item.SubItems[ idx ] := '';
720 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Thread.CreateDate);
722 Item.SubItems[ idx ] := '';
725 if (Thread.CreateDate <> ZERO_DATE) then begin
726 if (Thread.AgeSage <> gasArch) then begin
727 spanday := DaySpan(Sort.GetSortDate, Thread.CreateDate);
729 spanday := DaySpan(Thread.LastModified, Thread.CreateDate);
732 if (spanday > 0) then begin
733 Item.SubItems[ idx ] := Format('%f', [Thread.AllResCount / spanday]);
735 Item.SubItems[ idx ] := '';
738 Item.SubItems[ idx ] := '';
742 Item.SubItems[ idx ] := '';
747 if Thread.NewArrival then
748 Item.ImageIndex := ITEM_ICON_THREADNEW1
750 Item.ImageIndex := ITEM_ICON_THREAD1;