delphi能否直热门获取其他外部程序中TDBGridEh控件中的数据?
我有想用Delphi做个程序,随时提示另一个程序中TDBGrid中的数据,求高手给个方法?效果类似如下图:...
我有想用Delphi做个程序,随时提示另一个程序中TDBGrid中的数据,求高手给个方法?
效果类似如下图: 展开
效果类似如下图: 展开
3个回答
展开全部
使用钩子原理+dll注入。首先使用FindwindowEx能获取到表格的句柄,再转化为表格,将表格的内容赋值给你的新表格。
function MsgWndProc(hwnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var
// SG: TStringGrid;
SG:TDrawgrid;
X, Y: Integer;
begin
case Msg of
CM_QUERYROW:
begin
Result := -1;
if P^.DestWnd <> 0 then
begin
SG := Pointer(FindControl(P^.DestWnd));
if SG <> nil then Result := SG.RowCount;
end;
Exit;
end;
CM_QUERYCOL:
begin
Result := -1;
if P^.DestWnd <> 0 then
begin
SG := Pointer(FindControl(P^.DestWnd));
if SG <> nil then Result := SG.ColCount;
end;
Exit;
end;
CM_HOOKCELL:
begin
Result := -1;
P^.Text[0] := #0;
if P^.DestWnd <> 0 then
begin
SG := Pointer(FindControl(P^.DestWnd));
if SG <> nil then
begin
X := WParam;
Y := LParam;
if (X >= 0) and (X < SG.ColCount) and (Y >= 0) and (Y < SG.RowCount) then
begin
Result := Length(SG.Cells[X, Y]);//就是这里 获取不到它的单元格值?
if Result > 0 then
begin
StrPLCopy(P^.Text, SG.Cells[X, Y], 1024);
end;
end;
end;
end;
Exit;
end;
end;
Result := DefWindowProc(hwnd, Msg, WParam, LParam);
end;
这个我已经测试通过。
function MsgWndProc(hwnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
var
// SG: TStringGrid;
SG:TDrawgrid;
X, Y: Integer;
begin
case Msg of
CM_QUERYROW:
begin
Result := -1;
if P^.DestWnd <> 0 then
begin
SG := Pointer(FindControl(P^.DestWnd));
if SG <> nil then Result := SG.RowCount;
end;
Exit;
end;
CM_QUERYCOL:
begin
Result := -1;
if P^.DestWnd <> 0 then
begin
SG := Pointer(FindControl(P^.DestWnd));
if SG <> nil then Result := SG.ColCount;
end;
Exit;
end;
CM_HOOKCELL:
begin
Result := -1;
P^.Text[0] := #0;
if P^.DestWnd <> 0 then
begin
SG := Pointer(FindControl(P^.DestWnd));
if SG <> nil then
begin
X := WParam;
Y := LParam;
if (X >= 0) and (X < SG.ColCount) and (Y >= 0) and (Y < SG.RowCount) then
begin
Result := Length(SG.Cells[X, Y]);//就是这里 获取不到它的单元格值?
if Result > 0 then
begin
StrPLCopy(P^.Text, SG.Cells[X, Y], 1024);
end;
end;
end;
end;
Exit;
end;
end;
Result := DefWindowProc(hwnd, Msg, WParam, LParam);
end;
这个我已经测试通过。
追问
你的答案应该没问题,只是我是新手,能否详细给个例子啊,我想知道具体怎样用?
多谢你了!!!发邮件给我:120289389@qq.com
展开全部
用FindWindowEx
更多追问追答
追问
FindwindowEx能获取到数据??
追答
FindwindowEx能获取到表格的句柄,再转化为表格,将表格的内容赋值给你的新表格
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以参考这篇文章。相信对你有帮助
http://edu.codepub.com/2010/0120/19938.php
http://edu.codepub.com/2010/0120/19938.php
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询