首页  编辑  

字符网格排序

Tags: /超级猛料/Friends.网友专栏/zswang/函数大全/   Date Created:

(*//

标题:字符网格排序

说明:升序、降序;示例点击标题排序

设计:Zswang

日期:2002-04-27

支持:wjhu111@21cn.com

//*)

///////Begin Source

function StringGridRowSwap(mStringGrid: TStringGrid;

 mFromRow, mToRow: Integer): Boolean;

var

 S: string;

begin

 Result := False;

 if (mToRow = mFromRow) then Exit;

 if not Assigned(mStringGrid) then Exit;

 if (mFromRow < 0) or (mFromRow >= mStringGrid.RowCount) then Exit;

 if (mToRow < 0) or (mToRow >= mStringGrid.RowCount) then Exit;

 try

   S := mStringGrid.Rows[mFromRow].Text;

   mStringGrid.Rows[mFromRow].Text := mStringGrid.Rows[mToRow].Text;

   mStringGrid.Rows[mToRow].Text := S;

 except

   Exit;

 end;

 Result := True;

end; { StringGridRowSwap }

function StringGridRowSort(mStringGrid: TStringGrid;

 mColIndex: Integer; mDesc: Boolean = False): Boolean;

var

 I, J: Integer;

begin

 Result := False;

 if not Assigned(mStringGrid) then Exit;

 if (mColIndex < 0) or (mColIndex >= mStringGrid.ColCount) then Exit;

 for I := mStringGrid.FixedRows to mStringGrid.RowCount - 2 do

   for J := I + 1 to mStringGrid.RowCount - 1 do

     if mDesc then

       if mStringGrid.Cells[mColIndex, I] < mStringGrid.Cells[mColIndex, J] then

         StringGridRowSwap(mStringGrid, I, J)

       else

     else if mStringGrid.Cells[mColIndex, I] > mStringGrid.Cells[mColIndex, J] then

       StringGridRowSwap(mStringGrid, I, J);

 Result := True;

end; { StringGridRowSort }

///////End Source

///////Begin Demo

procedure TForm1.StringGrid1MouseDown(Sender: TObject;

 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

{$J+}

const

 vOldCol: Integer = -1;

{$J-}

var

 vCol, vRow: Integer;

begin

 if Button = mbRight then Exit;

 TStringGrid(Sender).MouseToCell(X, Y, vCol, vRow);

 if (vRow < 0) or (vRow >= TStringGrid(Sender).FixedRows) then Exit;

 StringGridRowSort(TStringGrid(Sender), vCol, vOldCol = vCol);

 if vOldCol = vCol then

   vOldCol := - vOldCol

 else vOldCol := vCol;

end;

///////End Demo