我试图在VCL Forms应用程序中同步滚动两个TDBGrid组件,我很难拦截每个网格组件的WndProc而没有一些堆栈问题.我尝试在滚动事件下发送WM_VSCROLL消息,但这仍然导致不正确的操作.它需要用于单击滚动条,以及突出显示单元格或向上或向下鼠标按钮.整个想法是让两个网格彼此相邻,显示一种匹配对话框.
试着
SendMessage( gridX.Handle, WM_VSCROLL, SB_LINEDOWN, 0 );
Run Code Online (Sandbox Code Playgroud)
也
procedure TForm1.GridXCustomWndProc( var Msg: TMessage );
begin
Msg.Result := CallWindowProc( POldWndProc, gridX.Handle, Msg.Msg, Msg.wParam, Msg.lParam );
if ( Msg.Msg = WM_VSCROLL ) then
begin
gridY.SetActiveRow( gridX.GetActiveRow );
gridY.Perform( Msg.Msg, Msg.wParam, Msg.lParam );
SetScrollPos( gridY.Handle, SB_VERT, HIWORD( Msg.wParam ), True );
end;
end;
Run Code Online (Sandbox Code Playgroud)
和
procedure TForm1.GridxCustomWndProc( var Msg: TMessage );
begin
if ( Msg.Msg = WM_VSCROLL ) then
begin
gridY.SetActiveRow( gridX.GetActiveRow );
gridY.Perform( Msg.Msg, Msg.wParam, Msg.lParam );
SetScrollPos( gridY.Handle, SB_VERT, HIWORD( …Run Code Online (Sandbox Code Playgroud) 我在下面的代码中设置了断点,它表示"断点".还为dataStore添加监视表达式.
function(){
var self = {};
var dataStore = [];
var areEq = UNAB.objectsAreEqual;
self.put = function(key, value){
/*breakpoint*/ dataStore.push({key:key, value:value});
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
在这个断点处,Firebug告诉我"ReferenceError:dataStore未定义".尝试检查"areEq"时的结果相同.但是,dataStore.push执行时没有错误.另外一个强调:为"self"添加一个监视表达式不会显示我期望的自我对象,只有一个属性"put",而是"window"对象.
知道到底发生了什么事吗?
我一直很喜欢微软已经使用的新安装程序,主要是因为他们使用WPF的Blend安装,我想知道我是否可以为我的应用程序制作这样的东西?
主要担心是创建程序文件目录并使用Windows注册应用程序,以便将其添加到添加/删除应用程序列表中.
有没有人对此有一点经验?
谢谢
我有很多行的形式
ko04062 ko:CXCR3
ko04062 ko:CX3CR1
ko04062 ko:CCL3
ko04062 ko:CCL5
ko04080 ko:GZMA
Run Code Online (Sandbox Code Playgroud)
并且非常希望摆脱右侧列的ko:位.我正在尝试使用sed,如下所示:
echo "ko05414 ko:ITGA4" | sed 's/\(^ko\d{5}\)\tko:\(.*$\)/\1\2/'
Run Code Online (Sandbox Code Playgroud)
它只是输出我回声的原始字符串.我是命令行脚本,sed,管道等新手,所以如果/当我做一些非常愚蠢的事情时,请不要太生气.
令我困惑的主要事情是,如果我将该\1\2位反转\2\1或仅使用一个组,则会发生同样的事情.我想,这意味着我遗漏了一些关于将echo输出管道输入到sed的机制,或者我的正则表达式错误或者我使用的是sed错误或者sed没有打印替换的结果.
任何帮助将不胜感激!
我不确定ASP.Net的ControlCollection如何工作,所以也许有人可以为我阐明这一点.
我最近发现了扩展方法和Linq的神奇之处.好吧,我很遗憾地发现这不是有效的语法
var c=Controls.Where(x => x.ID=="Some ID").SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
但是从我所知道的,Controls确实实现了IEnumerable提供这种方法的接口,那么是什么给出了?为什么这不起作用?我至少找到了一个体面的解决这个问题的工作:
var list = (IEnumerable<Control>)Controls;
var this_item = list.Where(x => x.ID == "Some ID").SingleOrDefault();
Run Code Online (Sandbox Code Playgroud) 据我了解,您可以使用NERDTree插件直接从MacVim添加文件.我导航到NERDtree并点击'm'调出NERDTree文件系统菜单,如本文所述:vim和NERD Tree扩展 - 添加文件
问题是,我在调用'm'后得到这个输出:
NERDTree Menu. Use j/k/enter and the shortcuts indicated
==========================================================
Error detected while processing function <SNR>14_showMenu..30..31:
line 4:
E716: Key not present in Dictionary: menuItems)-1)
E116: Invalid arguments for function len(self.menuItems)-1)
E116: Invalid arguments for function range(0, len(self.menuItems)-1)
E15: Invalid expression: range(0, len(self.menuItems)-1)
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud) 我有一个问题拼接两个数组.我们假设我有两个数组:
a = array([1,2,3])
b = array([4,5,6])
Run Code Online (Sandbox Code Playgroud)
我什么时候vstack((a,b))得到
[[1,2,3],[4,5,6]]
Run Code Online (Sandbox Code Playgroud)
如果我这样做,hstack((a,b))我得到:
[1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是:
[[1,4],[2,5],[3,6]]
Run Code Online (Sandbox Code Playgroud)
如何在不使用for循环的情况下完成此操作(需要快速)?
我想自动化 ssh 登录。经过一些研究,似乎 tcl/expect 是要走的路线。
但是,我的问题是,当交互接管我的终端时,东西不能按预期工作(不是故意的)。
例如,如果我调整终端的大小,它不会“占用”。此外,有时交互没有响应,有时它只是无缘无故地挂起。我在下面包含了我的代码。我对代码的问题是,我错过了什么吗?
另外,有没有更好的方法来做到这一点(使用另一种脚本语言?)我需要终端非常敏感,这与我在控制台上手动输入 ssh 没有什么不同。
proc Login {username server password} {
set prompt "(%|>|\#|\\\$) $"
spawn /usr/bin/ssh $username@$server
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
exp_send "yes\r"
exp_continue
#continue to match statements within this expect {}
}
-nocase "password: " {
exp_send "$password\r"
interact
}
}
}
Run Code Online (Sandbox Code Playgroud)