zoukankan      html  css  js  c++  java
  • c++ builder ListView实现可编辑任意列(转)

     1 // ---------------------------------------------------------------------------
     2 // Form的构造函数中填充StrinGrid单元格
     3 __fastcall TForm1::TForm1(TComponent* Owner)
     4     : TForm(Owner)
     5 {
     6     for (int i = StringGrid1->FixedRows; i < StringGrid1->RowCount; i++)
     7     {
     8         for (int j = StringGrid1->FixedCols; j < StringGrid1->ColCount; j++)
     9         {
    10             StringGrid1->Cells[i][j] = i * 10 + j;
    11         }
    12     }
    13 }
    14  
    15 // ---------------------------------------------------------------------------
    16 // 在StrinGrid的OnDrawCell事件中在指定的单元格绘制按钮
    17 void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
    18       int ARow, TRect &Rect, TGridDrawState State)
    19 {
    20     TStringGrid *sg = dynamic_cast<TStringGrid *>(Sender);
    21  
    22     // 填充背景,准备重绘
    23     sg->Canvas->FillRect(Rect);
    24  
    25     // 如果当前正在绘制第三行第四列的格子(准备内嵌按钮的格子)
    26     if (ARow == 3 && ACol == 4)
    27     {
    28         // 63 63 72 75 6E 2E 63 6F 6D
    29         // 用StringGrid的Tag作按钮弹起或按下的标志, 1为弹起, 0为按下
    30         if (sg->Tag == 1)
    31             DrawFrameControl(sg->Canvas->Handle, &Rect,
    32                     DFC_BUTTON, DFCS_BUTTONPUSH | DFCS_PUSHED);
    33         else
    34             DrawFrameControl(sg->Canvas->Handle, &Rect,
    35                     DFC_BUTTON, DFCS_BUTTONPUSH);
    36     }
    37  
    38     // 以背景透明方式绘制出单元格的字符串
    39     sg->Canvas->Brush->Style = bsClear;
    40  
    41     sg->Canvas->TextOut(Rect.Left + 2,
    42             (Rect.Height() - sg->Canvas->TextHeight("A") ) / 2 + Rect.Top,
    43             sg->Cells[ARow][ACol]);
    44 }
    45  
    46 // ---------------------------------------------------------------------------
    47 // 在StringGrid的OnMouseDown事件中判断如果当前鼠标下的格子是指定的格子
    48 // 就改变StringGrid->Tag并使其重绘,以显示出按钮被按下的样子
    49 void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
    50       TMouseButton Button, TShiftState Shift, int X, int Y)
    51 {
    52     TStringGrid *sg = dynamic_cast<TStringGrid *>(Sender);
    53     if (!sg) return;
    54  
    55     // 获取StringGrid中当前鼠标下的行和列
    56     int nCol, nRow;
    57     TPoint ptMouse = sg->ScreenToClient(Mouse->CursorPos);
    58     sg->MouseToCell(ptMouse.x, ptMouse.y, nCol, nRow);
    59  
    60     sg->Tag = nRow == 3 && nCol == 4? 1: 0;
    61     sg->Invalidate();
    62 }
    63  
    64 // ---------------------------------------------------------------------------
    65 // 在StringGrid的OnMouseUp事件中判断如果当前鼠标下的格子是指定的格子
    66 // 就改变StringGrid->Tag并使其重绘,以显示出按钮被弹起的样子
    67 void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
    68       TMouseButton Button, TShiftState Shift, int X, int Y)
    69 {
    70     TStringGrid *sg = dynamic_cast<TStringGrid *>(Sender);
    71     if (!sg) return;
    72  
    73     // 获取StringGrid中当前鼠标下的行和列
    74     int nCol, nRow;
    75     TPoint ptMouse = StringGrid1->ScreenToClient(Mouse->CursorPos);
    76     sg->MouseToCell(ptMouse.x, ptMouse.y, nCol, nRow);
    77  
    78     sg->Tag = 0; // 注意这里和上面OnMouseDown的不同
    79     sg->Invalidate();
    80  
    81     // 在OnMouseUp事件中处理点击事件
    82     if (nRow == 3 && nCol == 4)
    83     {
    84         // 这里加入自己的代码即可
    85  
    86         ShowMessage(String().sprintf(
    87                 TEXT("按钮 %s 被点击"), sg->Cells[nRow][nCol]));
    88     }
    89 }
  • 相关阅读:
    zookeeper使用场景
    zookeeper安装配置
    hadoop 远程调试
    deep learning笔记
    Sentiment Analysis(1)-Dependency Tree-based Sentiment Classification using CRFs with Hidden Variables
    PRML阅读笔记 introduction
    Python 学习笔记(2)
    python nltk 学习笔记(5) Learning to Classify Text
    python nltk 学习笔记(4) Writing Structured Programs
    python nltk 学习笔记(3) processing raw text
  • 原文地址:https://www.cnblogs.com/kernel0815/p/3281656.html
Copyright © 2011-2022 走看看