⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teenavigator.pas

📁 Delphi TeeChartPro.6.01的源代码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      Inc(X, ButtonWidth + Space);
    end
    else
      Buttons[I].SetBounds (Width + 1, 0, ButtonWidth, Height);
  end;
end;

procedure TCustomTeeNavigator.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
var W : Integer;
    H : Integer;
begin
  W:=AWidth;
  H:=AHeight;
  if not HandleAllocated then SetSize(W,H);
  inherited SetBounds(ALeft,ATop,W,H);
end;

procedure TCustomTeeNavigator.CheckSize;
var W : Integer;
    H : Integer;
begin
  { check for minimum size }
  W:=Width;
  H:=Height;
  SetSize(W,H);
  if (W<>Width) or (H<>Height) then inherited SetBounds(Left,Top,W,H);
end;

{$IFNDEF CLX}
procedure TCustomTeeNavigator.WMSize(var Message: TWMSize);
begin
  inherited;
  CheckSize;
  Message.Result := 0;
end;
{$ENDIF}

procedure TCustomTeeNavigator.BtnMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var OldFocus: TTeeNavigateBtn;
begin
  OldFocus:=FocusedButton;
  FocusedButton:=TTeeNavButton(Sender).Index;
  if TabStop {$IFNDEF CLX}and (GetFocus<>Handle){$ENDIF} and CanFocus then
  begin
    SetFocus;
    {$IFNDEF CLX}if (GetFocus<>Handle) then Exit;{$ENDIF}
  end
  else if TabStop {$IFNDEF CLX}and (GetFocus=Handle){$ENDIF} and (OldFocus<>FocusedButton) then
  begin
    Buttons[OldFocus].Invalidate;
    Buttons[FocusedButton].Invalidate;
  end;
end;

{$IFNDEF CLX}
procedure TCustomTeeNavigator.WMSetFocus(var Message: TWMSetFocus);
begin
  Buttons[FocusedButton].Invalidate;
end;

procedure TCustomTeeNavigator.WMKillFocus(var Message: TWMKillFocus);
begin
  Buttons[FocusedButton].Invalidate;
end;
{$ENDIF}

procedure TCustomTeeNavigator.KeyDown(var Key: Word; Shift: TShiftState);
var NewFocus : TTeeNavigateBtn;
    OldFocus : TTeeNavigateBtn;
begin
  OldFocus:=FocusedButton;
  case Key of
    TeeKey_Right :
      begin
        NewFocus := FocusedButton;
        repeat
          if NewFocus < High(Buttons) then NewFocus := Succ(NewFocus);
        until (NewFocus = High(Buttons)) or (Buttons[NewFocus].Visible);
        if NewFocus <> FocusedButton then
        begin
          FocusedButton := NewFocus;
          Buttons[OldFocus].Invalidate;
          Buttons[FocusedButton].Invalidate;
        end;
      end;
    TeeKey_Left :
      begin
        NewFocus := FocusedButton;
        repeat
          if NewFocus > Low(Buttons) then
            NewFocus := Pred(NewFocus);
        until (NewFocus = Low(Buttons)) or (Buttons[NewFocus].Visible);
        if NewFocus <> FocusedButton then
        begin
          FocusedButton := NewFocus;
          Buttons[OldFocus].Invalidate;
          Buttons[FocusedButton].Invalidate;
        end;
      end;

    TeeKey_Space :
      if Buttons[FocusedButton].Enabled then Buttons[FocusedButton].Click;
  end;
end;

{$IFNDEF CLX}
procedure TCustomTeeNavigator.WMGetDlgCode(var Message: TWMGetDlgCode);
begin
  Message.Result:=DLGC_WANTARROWS;
end;
{$ENDIF}

procedure TCustomTeeNavigator.ClickHandler(Sender: TObject);
begin
  BtnClick(TTeeNavButton(Sender).Index);
end;

{$IFNDEF CLX}
procedure TCustomTeeNavigator.CMEnabledChanged(var Message: TMessage);
begin
  inherited;
  if not (csLoading in ComponentState) then EnableButtons;
end;
{$ENDIF}

procedure TCustomTeeNavigator.BtnClick(Index: TTeeNavigateBtn);
begin
  EnableButtons;
  if Assigned(FOnButtonClicked) then FOnButtonClicked(Index);
end;

procedure TCustomTeeNavigator.Loaded;
begin
  inherited;
  CheckSize;
  InitHints;
  EnableButtons;
end;

procedure TCustomTeeNavigator.EnableButtons;
begin
end;

{$R TeeNavig.res}

procedure TCustomTeeNavigator.InitButtons;
var I       : TTeeNavigateBtn;
    X       : Integer;
    ResName : string;
begin
  MinBtnSize:=TeePoint(20,18);
  X:=0;
  for I:=Low(Buttons) to High(Buttons) do
  begin
    Buttons[I]:=TTeeNavButton.Create(Self);
    With Buttons[I] do
    begin
      Flat:=True;
      Index:=I;
      Visible:=True;
      Enabled:=False;
      SetBounds(X, 0, MinBtnSize.X, MinBtnSize.Y);
      FmtStr(ResName, 'TeeNav_%s', [BtnTypeName[I]]);
      Glyph.LoadFromResourceName(HInstance, ResName);
      NumGlyphs:=2;
      OnClick:=ClickHandler;
      OnMouseDown:=BtnMouseDown;
      Parent:=Self;
      Inc(X,MinBtnSize.X);
    end;
  end;

  Buttons[nbInsert].Visible:=False;
  Buttons[nbDelete].Visible:=False;
  Buttons[nbEdit].Visible:=False;
  Buttons[nbPost].Visible:=False;
  Buttons[nbCancel].Visible:=False;
end;

type TTeePanelAccess=class(TCustomTeePanel);

procedure TCustomTeeNavigator.SetPanel(const Value: TCustomTeePanel);
begin
  if FPanel<>Value then
  begin
    if Assigned(FPanel) then
    begin
      {$IFDEF D5}
      FPanel.RemoveFreeNotification(Self);
      {$ENDIF}
      TTeePanelAccess(FPanel).RemoveListener(Self);
    end;

    FPanel:=Value;

    if Assigned(FPanel) then
    begin
      FPanel.FreeNotification(Self);
      TTeePanelAccess(FPanel).Listeners.Add(Self);
    end;

    EnableButtons;
  end;
end;

procedure TCustomTeeNavigator.TeeEvent(Event: TTeeEvent);
begin
  DoTeeEvent(Event);
end;

procedure TCustomTeeNavigator.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited;
  if (Operation=opRemove) and Assigned(FPanel) and (AComponent=FPanel) then
     Panel:=nil;
end;

{$IFDEF CLX}
procedure TCustomTeeNavigator.BoundsChanged;
var W, H: Integer;
begin  inherited;  W := Width;  H := Height;  SetSize(W, H);end;
{$ENDIF}

procedure TCustomTeeNavigator.DoTeeEvent(Event: TTeeEvent);
begin
end;

Function TCustomTeeNavigator.PageCount:Integer;
begin
  result:=1; // abstract
end;

procedure TCustomTeeNavigator.Print;
begin
end;

{ TTeeNavButton }
Destructor TTeeNavButton.Destroy;
begin
  FRepeatTimer.Free;
  inherited;
end;

procedure TTeeNavButton.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if FRepeatTimer = nil then
     FRepeatTimer := TTimer.Create(Self);

  FRepeatTimer.OnTimer := TimerExpired;
  FRepeatTimer.Interval := InitRepeatPause;
  FRepeatTimer.Enabled  := True;
end;

procedure TTeeNavButton.MouseUp(Button: TMouseButton; Shift: TShiftState;
                                  X, Y: Integer);
begin
  inherited;
  if Assigned(FRepeatTimer) then FRepeatTimer.Enabled:=False;
end;

procedure TTeeNavButton.TimerExpired(Sender: TObject);
begin
  FRepeatTimer.Interval:=RepeatPause;
  if (FState=bsDown) and MouseCapture then
  begin
    try
      Click;
    except
      FRepeatTimer.Enabled:=False;
      raise;
    end;
  end;
end;

procedure TTeeNavButton.Paint;
var R : TRect;
begin
  inherited;
  if {$IFNDEF CLX}(GetFocus=Parent.Handle) and{$ENDIF}
     (FIndex=TCustomTeeNavigator(Parent).FocusedButton) then
  begin
    R:=TeeRect(3,3,Width-3,Height-3);
    if FState=bsDown then OffsetRect(R,1,1);
    {$IFDEF CLX}
    Canvas.DrawFocusRect(R);
    {$ELSE}
    DrawFocusRect(Canvas.Handle,R);
    {$ENDIF}
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -