我
我不会了
Unregistered / Unconfirmed
GUEST, unregistred user!
我看《传奇》的代码的控件中DWinctl.pas
为什么在TWincontrol中
procedure KeyDown(var Key: Word; Shift: TShiftState); dynamic;
procedure KeyUp(var Key: Word; Shift: TShiftState); dynamic;
procedure KeyPress(var Key: Char); dynamic;
而在传奇控件DControl(父类TCustomControl)中,
function KeyPress (var Key: Char): Boolean; dynamic;
function KeyDown (var Key: Word; Shift: TShiftState): Boolean; dynamic;
以下是
function TDControl.KeyDown (var Key: Word; Shift: TShiftState): Boolean;
var
i: integer;
begin
Result := FALSE;
if Background then exit;
for i:=DControls.Count-1 downto 0 do //这里????以下
if TDControl(DControls).Visible then
if TDControl(DControls).KeyDown(Key, Shift) then begin
Result := TRUE;
exit;
end;
if (FocusedControl=self) then begin
if Assigned (FOnKeyDown) then FOnKeyDown (self, Key, Shift);
Result := TRUE;
end;
问题一:
传奇过程改成函数?我看过dynamic和virtual的区别,是不是事件不会经常被override,所以通常Event的要写成dynamic比virtual好的多?10分
问题二:
传奇改写了onkeydown,但是为什么使用循环语句目的是为什么?直接什么都不写,从Wincontrol继承下来不好么。难道有什么问题么?40分
为什么在TWincontrol中
procedure KeyDown(var Key: Word; Shift: TShiftState); dynamic;
procedure KeyUp(var Key: Word; Shift: TShiftState); dynamic;
procedure KeyPress(var Key: Char); dynamic;
而在传奇控件DControl(父类TCustomControl)中,
function KeyPress (var Key: Char): Boolean; dynamic;
function KeyDown (var Key: Word; Shift: TShiftState): Boolean; dynamic;
以下是
function TDControl.KeyDown (var Key: Word; Shift: TShiftState): Boolean;
var
i: integer;
begin
Result := FALSE;
if Background then exit;
for i:=DControls.Count-1 downto 0 do //这里????以下
if TDControl(DControls).Visible then
if TDControl(DControls).KeyDown(Key, Shift) then begin
Result := TRUE;
exit;
end;
if (FocusedControl=self) then begin
if Assigned (FOnKeyDown) then FOnKeyDown (self, Key, Shift);
Result := TRUE;
end;
问题一:
传奇过程改成函数?我看过dynamic和virtual的区别,是不是事件不会经常被override,所以通常Event的要写成dynamic比virtual好的多?10分
问题二:
传奇改写了onkeydown,但是为什么使用循环语句目的是为什么?直接什么都不写,从Wincontrol继承下来不好么。难道有什么问题么?40分