各位高手,
  我在一个FORM中有一个PAGECONTROL,然后每个sheet中有一个frame,由于这些FRAME都是从相同的基类中派生
出来的,所有有很多操作的快捷键是一样的。但同时打开多个FRAME时,相同的关键键,系统只当作是第一个SHEET中
的操作,而后打开的FRAME的快捷键都失灵了,我是通过在FRAME中设置actionlist实现的,
  如果这样不行的话,FRAME本身没有KEYDOWN和KEYPRESS事件,能不能加上这个事件,然后手工处理快键值得的处理过程呢。
 

解决方案 »

  1.   

    自己解决了:
      没有办法,用最笨的办法。在TAB页切换时,先屏蔽所有的快捷键,然后再放开所需要action过程如下:[已实现,未整理版本]
    var
     i:integer;
     j:integer;
     k:integer;
     tmpState:TActionListState;
    Begin
       for j:=0 to  self.ComponentCount  -1 do
       BEGIN
              IF (self.Components[j]).ClassParent.ClassName ='TFraBasic' THEN
              BEGIN
                  FOR K:=0 TO self.Components[j].ComponentCount -1 do
                  Begin
                     if AllowIndex= ((self.Components[j] as TFrame).Parent as TBSSkinTabSheet).TabIndex  THEN
                             tmpState:=asNormal
                     else
                             tmpState:=asSuspended;
                     if    uppercase(self.Components[j].Components[k].ClassName)  ='TACTIONLIST' THEN
                          ((self.Components[j].Components[k]) AS TACTIONLIST).State :=tmpState;
                  end;
              END;
              IF (self.Components[j]).ClassParent.ClassName ='TFraBasicAlize' THEN
              BEGIN
                  FOR K:=0 TO self.Components[j].ComponentCount -1 do
                  Begin
                     if AllowIndex= ((self.Components[j] as TFrame).Parent as TBSSkinTabSheet).TabIndex  THEN
                             tmpState:=asNormal
                     else
                             tmpState:=asSuspended;
                     if    uppercase(self.Components[j].Components[k].ClassName)  ='TACTIONLIST' THEN
                          ((self.Components[j].Components[k]) AS TACTIONLIST).State :=tmpState;
                  end;
              END;
              IF (self.Components[j]).ClassParent.ClassName ='TFraBasicQuy' THEN
              BEGIN
                  FOR K:=0 TO self.Components[j].ComponentCount -1 do
                  Begin
                     if AllowIndex= ((self.Components[j] as TFrame).Parent as TBSSkinTabSheet).TabIndex  THEN
                             tmpState:=asNormal
                     else
                             tmpState:=asSuspended;
                     if    uppercase(self.Components[j].Components[k].ClassName)  ='TACTIONLIST' THEN
                          ((self.Components[j].Components[k]) AS TACTIONLIST).State :=tmpState;
                  end;
              END;   END;
    End;