anchor.diff:    uMouseDownSourceWidget: TfpgWidget; { widget Left MButton was pressed on }
   
   
  +type
  +  TfpgFormFriend = class(TfpgBaseForm)
  +  end;
  +
   function FindKeyboardFocus: TfpgWidget;
   begin
     Result := nil;
  
positive.code:       wlast := wg;
        wg := wg.Parent;
      end;
    end;
    { we should now be at the top level form }
    if (not consumed) and (wlast <> nil) then
    begin
      if (wlast is TfpgForm) and Assigned(wlast.OnKeyPress) then
        wlast.OnKeyPress(self, key, ss, consumed);
    end;
    { now finaly, lets give fpgApplication a chance }
    if (not consumed) and Assigned(fpgApplication.OnKeyPress) then
    begin
      fpgApplication.OnKeyPress(self, key, ss, consumed);
    end;
  end;
  
  procedure TfpgWidget.MsgKeyRelease(var msg: TfpgMessageRec);
  
negative.code:   ss  := msg.params.keyboard.shiftstate;
    consumed := False;
  
    { can we handle it ourselves? }
    HandleKeyPress(key, ss, consumed);
  
    { process our children }
    if not consumed then
      DoKeyShortcut(self, key, ss, consumed, True);
  
    if not consumed then
    begin
      { Work its way to the top level form. The recursive calling of
        HandleKeyPress() also gives tab-to-change-focus a chance to work. }
      wg := Parent;
      wlast := wg;
      while (not consumed) and (wg <> nil) do
  