两个StringGrid的不连续多行数据的选择和相互拖入的问题

ksliguowei 2005-03-06 07:26:21
在一个FROM 上有两个TStringGrid 控件,分别在FORM 的左边和右边,
如:
+-------------------------------------+
| | |
| | |
| StringGrid1 | StringGrid2 |
| | |
| | |
+-------------------------------------+
问题1:
如何实现用鼠标左键(或右键)选择不连续的多行数据,注意,是不连续的多行,连续的多行可以通过设置OPINION 属性实现,不连续的我不会.(和Total commander 6.0工具设置用右键选择后的功能一样).可以用鼠标多次单击该行来实现放弃(当前行选择时)或选择(当前行未选择时)该行.
问题2:
如何将问题1所选择的多行数据用鼠标左键拖动到另外一个StringGrid中,如从StringGrid1 拖动到 StringGrid2中.
如果第一个问题解决了.我应该能解决第二个问题的
我用的是C++ Builder 5.0
...全文
235 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ksliguowei 2005-03-14
  • 打赏
  • 举报
回复
谢谢大家
ksliguowei 2005-03-09
  • 打赏
  • 举报
回复
dbGrid不是很灵活的.网上有速达公司的sdgrid,不过它是继承StringGrid 的.也不能实现这个功能.
free1688 2005-03-09
  • 打赏
  • 举报
回复
当然有第三方控件可以实现了,具体名字我想不起来了,我现在的dbgrid就是类试的第三方控件。
ksliguowei 2005-03-08
  • 打赏
  • 举报
回复
有其他的控件可以实现这些功能么?
xinxing0123 2005-03-08
  • 打赏
  • 举报
回复
学习。。
magicsnake 2005-03-08
  • 打赏
  • 举报
回复
void __fastcall TForm1::StringGrid2DragOver(TObject *Sender,
TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
// 这里判断Source来源的类型是否是TStringGrid或者来源的名称是否是 StringGrid1,如果是那么Accept = true;
}
void __fastcall TForm1::StringGrid2DragDrop(TObject *Sender,
TObject *Source, int X, int Y)
{
// 这里判断Source里选择的是那几行,将相应行的数据插入到StringGrid2,同时StringGrid1删除相应行;
}
我不懂电脑 2005-03-07
  • 打赏
  • 举报
回复
只能使用画布自画了。

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TRect rect;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
StringGrid1->Canvas->Brush->Color = clRed;

rect = StringGrid1->CellRect(ACol, ARow); //行的话根据该行单元格集合计算出该行的区域
StringGrid1->Canvas->FillRect(rect);
}
//---------------------------------------------------------------------------


void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Brush->Color = clRed;
StringGrid1->Canvas->FillRect(rect);
}
//---------------------------------------------------------------------------
ksliguowei 2005-03-07
  • 打赏
  • 举报
回复
谢谢各位,我明天结帖.我想再看看其他高手的意见!如果可能,希望各位高手也说一下第二个问题的解决方法!
magicsnake 2005-03-07
  • 打赏
  • 举报
回复
自己扩充 TStringGrid 类吧,这个应该不难
samchoy 2005-03-06
  • 打赏
  • 举报
回复
试试按着Ctrl键时进行选择

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧