首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Delphi Grid 實現行首選擇框與拖曳排序的兩種方案

     編輯:程式設計綜合問答

需求

在 Delphi Grid 中實現:每行首欄顯示核取方塊,支援行拖曳排序。參考圖片效果。

方案一:成熟第三方控件 (推薦)

  • EhLib / TMS AdvStringGrid / DevExpress VCL:內建 CheckBox 欄、RowDragDrop 事件、排序模式,幾行程式碼完成,穩定專業。

方案二:原生 TStringGrid / TDrawGrid 自繪 (高難度)

行首選擇框

  1. 固定第 0 欄寬度 (如 24px),OnDrawCell 中繪製核取框 (用 DrawFrameControl 或自繪)。
  2. 維護 TList 或 TBits 記錄各行選中狀態。
  3. OnMouseDown 擊測第 0 欄切換狀態並 InvalidateCell。

拖曳排序

  1. 資料層面:資料結構加入 SortIndex: Integer 欄位。
  2. 介面:OnMouseDown 記錄起始行,OnMouseMove 判斷拖曳閾值顯示插入標線,OnMouseUp 計算目標位置,調整資料陣列順序並重新賦值 SortIndex,最後 Invalidate。
  3. 或參考 TListView 的 DragMode = dmAutomatic 配合 OnDragOver, OnDragDrop 實現 (需模擬 Grid 行高)。

選型建議

方案開發時間維護性功能完整度
第三方控件極短高完整 (含編輯、匯出、分組...)
原生自繪長 (數天~週)低 (邊界情況多)僅核心功能

除非專案極度精簡或禁止第三方元件,強烈建議購買/使用成熟 Grid 控件套件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved