2011-10-08 73 views

回答

3

假设,即NGLN是正确的,你需要设置Grid.MouseActions适当的间断......选择选项来选择一种选择,你会允许,然后你就可以调用这个过程:

PROCEDURE InvertSelection(Grid : TAdvStringGrid); 
    VAR 
    C,R : Cardinal; 

    BEGIN 
    IF Grid.MouseActions.DisjunctCellSelect THEN 
     FOR R:=Grid.FixedRows TO PRED(Grid.RowCount) DO FOR C:=Grid.FixedCols TO PRED(Grid.ColCount) DO Grid.SelectedCells[C,R]:=NOT Grid.SelectedCells[C,R] 
    ELSE IF Grid.MouseActions.DisjunctRowSelect THEN 
     FOR R:=Grid.FixedRows TO PRED(Grid.RowCount) DO Grid.RowSelect[R]:=NOT Grid.RowSelect[R] 
    ELSE IF Grid.MouseActions.DisjunctColSelect THEN 
     FOR C:=Grid.FixedCols TO PRED(Grid.ColCount) DO Grid.ColSelect[C]:=NOT Grid.ColSelect[C] 
    END; 

这将使所有未选定的行/列/单元格被选中,反之亦然。

+0

对不起,但此功能不起作用。你是否尝试使用这些代码? – YoungMaster

+0

@YoungMaster,我测试过它,它工作。您可能会错过如何在您的'TAdvStringGrid'上设置MouseActions.DisjunctCellSelect或MouseActions.DisjunctRowSelect或MouseActions.DisjunctColSelect属性为True的部分。其中一个必须设置,它允许你选择别的不是矩形。这是完全可以接受的答案;) – TLama

相关问题