分析过TopGrid源代码的高手请进。-700分。(200分)

  • 主题发起人 主题发起人 balaschen
  • 开始时间 开始时间
B

balaschen

Unregistered / Unconfirmed
GUEST, unregistred user!
请分析过TopGrid源代码的大侠指教:
1、TopGrid的类的结构
2、各部分时如何相互交互,如键盘和鼠标事件如何被分解处理(列出过程名)

TopGrid的源代码实在是大,有四万多行,我看的头都大了,请各位大侠帮忙,分数好说,
先给200,解决后再给500。

欢迎交流:balaschen@163.net
 
我感兴趣,请问在哪里可以下载?
 
在窑洞里有下载,没有ts_Girds.pas文件,不过并不影响我们分析。
我周末跟了一下,已经高清楚部分结构。

画网格是由Paint虚函数来完成。大致调用如下:
DrawGridLine
DrawCells
DrawEmptyArea;
在仔细跟下去应该没有问题。

其用户交互事件主要由KeyDown和MouseDown来处理。
对于键盘事件,KeyDown经过判断后分别由KeyDownVK_Up,KeyDownVk_Down等过程来处理。
鼠标事件也大致如此。

看了一个下午,看懂了一些,也有一些看的一头雾水,如TtsDropDownForm类我就很不明白,其代码
比较简单,使用来作下拉网格的ParentForm用的。
对于这两个虚函数有一直不明白。
procedure CreateParams(var Params: TCreateParams); override;
begin
inherited CreateParams(Params);

if DropDownForm then
begin
with Params do
begin
Style := 0;
WndParent := 0;
if not (csDesigning in Owner.ComponentState) then
WndParent := TWinControl(Owner).Handle;
Style := Style or WS_POPUP;
WindowClass.Style := CS_DBLCLKS;
end;
end;
end

procedure CreateWnd; override;
begin
var
Style: Longint;
begin
inherited CreateWnd;

if DropDownForm then
begin
Style := WS_CHILD;
Windows.SetWindowLong(Handle, GWL_STYLE, Style);
//就在这里:调用SetWindowLong后窗口的Style应该是WS_Child,但当我在
//CreateParams过程如果设置Style:=WS_Child将会使DropDownForm变成
//一个子窗口(被限制在其Parent中),其实在CreateParams中只要把Style
//设为Style:=Style and not WS_Child其显示就没问题。我不明白为什么这
//两个过程作相反的动作
end;
end;

还有下面这三个消息函数,我试过将其去掉,好像也没不影响工作,他究竟有什么作用?
procedure WMWindowPosChanged(var Message: TWMWindowPosChanged); message WM_WINDOWPOSCHANGED;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
procedure WMMove(var Message: TWMMove); message WM_MOVE;



以上是我的一点成果和疑问,请感兴趣的网友关注一下。谢谢!
 
为什么没人感兴趣?
太简单?没意义?还是太难?
 
topGrid 比起其他表格控件有什么优点?我看过 Demo 好像没什么东西嘛,值得去看它吗?
 
To 斑竹:
无人回答,分数能否收回?
 
多人接受答案了。
 
后退
顶部