程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 在StringGrid中用右鍵菜單實現復制粘貼

在StringGrid中用右鍵菜單實現復制粘貼

編輯:關於C++

ccrun(老妖)本無心寫這篇文章,因為功能及代碼比較簡單,恐有人不屑。只是在回復csdn一位朋友的帖子,久不寫這種代碼了,一時認真起來,把注釋寫了個詳細,順便就貼上來吧,也許對剛入門的朋友有所幫助。

所實現的效果就是在StrinGrid上點右鍵,然後彈出一個菜單,可以復制當前單元格中的內容,然後粘貼到其他單元格中。

在Form上放置一個PopupMenu,添加兩個MenuItem,分明為miCopy和miPaste,然後在StringGrid的OnMouseUp事件和miCopy,miPaste的OnClick事件中添加以下代碼:

#include <vcl\Clipbrd.hpp>
TPoint g_ptSelect; // 記錄在StringGrid上點右鍵彈出菜單時的鼠標位置
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if(Button == mbRight) // 在StringGrid上右點鍵
{
// 選中當前選中的單元格:
int nCol, nRow;
StringGrid1->MouseToCell(X, Y, nCol, nRow);
// 如果在第一行或第一列,或者不在單元格中,則不處理
if(nCol < 1 || nRow < 1)
return;
StringGrid1->Col = nCol;
StringGrid1->Row = nRow;
// 記錄下當前的鼠標位置,因為在菜單彈出以後,鼠標選擇菜單時坐標會改變
g_ptSelect = Mouse->CursorPos;
// 彈出菜單
PopupMenu1->Popup(Mouse->CursorPos.x, Mouse->CursorPos.y);
}
}
//---------------------------------------------------------------------------
// 63 63 72 75 6E 2E 63 6F 6D
void __fastcall TForm1::miCopyClick(TObject *Sender)
{
// 確定是復制哪個Cell
TPoint pt(StringGrid1->ScreenToClient(g_ptSelect));
int nCol, nRow;
StringGrid1->MouseToCell(pt.x, pt.y, nCol, nRow);
// 將選中的內容復制到剪貼板
Clipboard()->AsText = StringGrid1->Cells[nCol][nRow];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::miPasteClick(TObject *Sender)
{
// 確定要粘貼到哪個Cell
TPoint pt(StringGrid1->ScreenToClient(g_ptSelect));
int nCol, nRow;
StringGrid1->MouseToCell(pt.x, pt.y, nCol, nRow);
// 將剪貼板中的內容粘貼到單元格
StringGrid1->Cells[nCol][nRow] = Clipboard()->AsText;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved