procedure TfrmMain.CreateTabSheet( myFormClass: TFormClass;var Reference: TForm);
var
MyForm : TForm;
begin
tabsheet := TRzTabSheet.Create(RpgcMain);
try
tabsheet.Caption := Reference.Caption;
tabsheet.PageControl := RpgcMain;
tabsheet.Name := stabsheetname;
MyForm := myFormClass.Create(tabsheet);
try
MyForm.Parent := tabsheet;
MyForm.BorderStyle := bsnone;
MyForm.WindowState := wsmaximized;
RpgcMain.ActivePage := tabsheet;
MyForm.Show;
except
FreeAndNil(MyForm);
end;
except
FreeAndNil(tabsheet);
end;
end; 把窗体放入PageControl后,如何处理PageControl中Form内的KeyDown事件
var
MyForm : TForm;
begin
tabsheet := TRzTabSheet.Create(RpgcMain);
try
tabsheet.Caption := Reference.Caption;
tabsheet.PageControl := RpgcMain;
tabsheet.Name := stabsheetname;
MyForm := myFormClass.Create(tabsheet);
try
MyForm.Parent := tabsheet;
MyForm.BorderStyle := bsnone;
MyForm.WindowState := wsmaximized;
RpgcMain.ActivePage := tabsheet;
MyForm.Show;
except
FreeAndNil(MyForm);
end;
except
FreeAndNil(tabsheet);
end;
end; 把窗体放入PageControl后,如何处理PageControl中Form内的KeyDown事件
可以舉個例子說明一下預想的過程,再說明一下實際碰到的狀況。這樣人家才知道問題所在
if key = #13 then begin
if IsTEdit then
begin
Key:= #0;
Perform(WM_NEXTDLGCTL,0,0);
end
end;//FormKeyDown
if key=VK_F7 then
begin
key:=0;
edit1.SetFocus;
end
else if key=VK_F8 then
begin
key:=0;
edit2.SetFocus;
end
else if key=VK_F9 then
begin
key:=0;
edit4.SetFocus;
end;
FormKeyPress\FormKeyDown都不响应
2、看你的程式,我猜測你的目的:你的form.keypreview為True,來控制UI上的focus
所以問題點在,當你keydown時,消息預先發給parentform,這個parentform是由GetParentform取得,那么問題就是出在所取得的parentform,它應該是最底端的form,而不是你的控件所在的form。簡單說,keydown時,消息傳錯了form了,不是你預想中的form,因此控制不了你UI
还是得转发,用sendmessage?谢谢!
begin
inherited;
if msg.CharCode=VK_F7 then
begin
edit1.SetFocus;
Handled := True;
end
else if msg.CharCode=VK_F8 then
begin
edit2.SetFocus;
Handled := True;
end
else if msg.CharCode=VK_F9 then
begin
edit4.SetFocus;
Handled := True;
end;
end;
在pagecontrol中的form,己经设置和处理了keydown,而且每一个form都有keydown,这样...
調用Windows.SetParent,不必去指定Form.Parent:= TabSheetXX.
比如:SetParent(MyForm.Handle,tabsheet.Handle);
這樣可以避免getparentform取到最底層的form,也就解決了快捷鍵的傳播問題。可以試試看看
用在什么地方?试过了,也许调用不对,不起作用!