cxtreeview.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,527 行 · 第 1/4 页

PAS
1,527
字号
end;

procedure TcxCustomInnerTreeView.WMWindowPosChanged(
  var Message: TWMWindowPosChanged);
var
  ARgn: HRGN;
begin
  inherited;
  if csDestroying in ComponentState then
    Exit;
  Container.SetScrollBarsParameters;
  if Container.HScrollBar.Visible and Container.VScrollBar.Visible then
  begin
    ARgn := CreateRectRgnIndirect(GetSizeGripRect(Self));
    SendMessage(Handle, WM_NCPAINT, ARgn, 0);
    DeleteObject(ARgn);
  end;
end;

procedure TcxCustomInnerTreeView.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  if Message.lParam = 0 then
    MouseEnter(Self)
  else
    MouseEnter(TControl(Message.lParam));
end;

procedure TcxCustomInnerTreeView.CNNotify(
  var Message: TWMNotify);
begin
  inherited;
  if Message.NMHdr.code = TVN_DELETEITEM then
    Container.SetScrollBarsParameters;
end;

procedure TcxCustomInnerTreeView.CMMouseLeave(var Message: TMessage);
begin
  inherited;
  if Message.lParam = 0 then
    MouseLeave(Self)
  else
    MouseLeave(TControl(Message.lParam));
end;

procedure TcxCustomInnerTreeView.Expand(Node: TTreeNode);
begin
  inherited;
  Container.SetScrollBarsParameters;
end;

procedure TcxCustomInnerTreeView.Change(Node: TTreeNode);
begin
  inherited;
  Container.SetScrollBarsParameters;
end;

procedure TcxCustomInnerTreeView.Collapse(Node: TTreeNode);
begin
  inherited;
  Container.SetScrollBarsParameters;
end;

procedure TcxCustomInnerTreeView.UpdateItemHeight;
begin
  if HandleAllocated then
    TreeView_SetItemHeight(Handle, ItemHeight);
end;

{ TcxCustomTreeView }

constructor TcxCustomTreeView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  InternalInitTreeView;
  InnerTreeView.AutoSize := False;
  InnerTreeView.Align := alClient;
  InnerTreeView.BorderStyle := bsNone;
  InnerTreeView.Parent := Self;
  InnerTreeView.FContainer := Self;
  InnerControl := InnerTreeView;
  InnerTreeView.LookAndFeel.MasterLookAndFeel := Style.LookAndFeel;
  Width := 120;
  Height := 100;
end;

destructor TcxCustomTreeView.Destroy;
begin
  FreeAndNil(FTreeView);
  inherited Destroy;
end;

function TcxCustomTreeView.GetInnerTreeView: TcxCustomInnerTreeView;
begin
  Result := FTreeView;
end;

procedure TcxCustomTreeView.InternalInitTreeView;
begin
  FTreeView := GetTreeViewClass.Create(Self);
end;

class function TcxCustomTreeView.GetTreeViewClass: TcxCustomInnerTreeViewClass;
begin
  Result := TcxCustomInnerTreeView;
end;

function TcxCustomTreeView.CanResize(var NewWidth, NewHeight: Integer): Boolean;
begin
  Result := True;
  if not Result or IsLoading then Exit;
  if Align in [alLeft, alRight, alClient] then Exit;
end;

procedure TcxCustomTreeView.FontChanged;
begin
  inherited FontChanged;
  SetSize;
  InnerTreeView.Invalidate;
end;

function TcxCustomTreeView.IsReadOnly: Boolean;
begin
  Result := ReadOnly;
end;

function TcxCustomTreeView.NeedsScrollBars: Boolean;
begin
  Result := True;
end;

procedure TcxCustomTreeView.Scroll(AScrollBarKind: TScrollBarKind;
  AScrollCode: TScrollCode; var AScrollPos: Integer);
begin
  inherited Scroll(AScrollBarKind, AScrollCode, AScrollPos);
{$IFDEF USETCXSCROLLBAR}
  if AScrollBarKind = sbHorizontal then
    InnerTreeView.HScrollHandler(Self, AScrollCode, AScrollPos)
  else
    InnerTreeView.VScrollHandler(Self, AScrollCode, AScrollPos);
  SetScrollBarsParameters;
{$ENDIF}
end;

procedure TcxCustomTreeView.SetSize;
var
  APrevBoundsRect: TRect;
begin
  if IsLoading then
    Exit;
  APrevBoundsRect := InnerTreeView.BoundsRect;
  inherited SetSize;
  if not EqualRect(APrevBoundsRect, InnerTreeView.BoundsRect) and
    InnerTreeView.HandleAllocated then
      KillMessages(InnerTreeView.Handle, WM_MOUSEMOVE, WM_MOUSEMOVE);
end;

procedure TcxCustomTreeView.WriteState(Writer: TWriter);
begin
  FTreeView.HandleNeeded;
  inherited;  
end;

procedure TcxCustomTreeView.CNNotify(var Message: TWMNotify);
begin
  if InnerTreeView <> nil then
  begin
    InnerTreeView.CNNotify(Message);
    Exit;
  end;
  inherited;
end;

function TcxCustomTreeView.AlphaSort{$IFDEF DELPHI6}(
  ARecurse: Boolean = True){$ENDIF}: Boolean;
begin
  Result := InnerTreeView.AlphaSort({$IFDEF DELPHI6}ARecurse{$ENDIF});
end;

function TcxCustomTreeView.CustomSort(SortProc: TTVCompare;
  Data: Longint{$IFDEF DELPHI6}; ARecurse: Boolean = True{$ENDIF}): Boolean;
begin
  Result := InnerTreeView.CustomSort(SortProc, Data{$IFDEF DELPHI6},
    ARecurse{$ENDIF});
end;

procedure TcxCustomTreeView.FullCollapse;
begin
  InnerTreeView.FullCollapse;
end;

procedure TcxCustomTreeView.FullExpand;
begin
  InnerTreeView.FullExpand;
end;

function TcxCustomTreeView.GetHitTestInfoAt(X, Y: Integer): THitTests;
begin
  Result := InnerTreeView.GetHitTestInfoAt(X - InnerTreeView.Left,
    Y - InnerTreeView.Top);
end;

function TcxCustomTreeView.GetNodeAt(X, Y: Integer): TTreeNode;
begin
  Result := InnerTreeView.GetNodeAt(X - InnerTreeView.Left, Y - InnerTreeView.Top);
end;

function TcxCustomTreeView.IsEditing: Boolean;
begin
  Result := InnerTreeView.IsEditing;
end;

procedure TcxCustomTreeView.LoadFromFile(const FileName: string);
begin
  InnerTreeView.LoadFromFile(FileName);
end;

procedure TcxCustomTreeView.LoadFromStream(Stream: TStream);
begin
  InnerTreeView.LoadFromStream(Stream);
end;

procedure TcxCustomTreeView.SaveToFile(const FileName: string);
begin
  InnerTreeView.SaveToFile(FileName);
end;

procedure TcxCustomTreeView.SaveToStream(Stream: TStream);
begin
  InnerTreeView.SaveToStream(Stream);
end;

procedure TcxCustomTreeView.SetScrollBarsParameters(AIsScrolling: Boolean = False);
begin
  if (InnerTreeView <> nil) and not InnerTreeView.IsRedrawLocked then
    inherited SetScrollBarsParameters(AIsScrolling);
end;

{$IFDEF DELPHI6}
procedure TcxCustomTreeView.Select(Node: TTreeNode; ShiftState: TShiftState = []);
begin
  InnerTreeView.Select(Node, ShiftState);
end;

procedure TcxCustomTreeView.Select(const Nodes: array of TTreeNode);
begin
  InnerTreeView.Select(Nodes);
end;

procedure TcxCustomTreeView.Select(Nodes: TList);
begin
  InnerTreeView.Select(Nodes);
end;

procedure TcxCustomTreeView.Deselect(Node: TTreeNode);
begin
  InnerTreeView.Deselect(Node);
end;

procedure TcxCustomTreeView.Subselect(Node: TTreeNode; Validate: Boolean = False);
begin
  InnerTreeView.Subselect(Node, Validate);
end;

procedure TcxCustomTreeView.ClearSelection(KeepPrimary: Boolean = False);
begin
  InnerTreeView.ClearSelection(KeepPrimary);
end;

function TcxCustomTreeView.GetSelections(AList: TList): TTreeNode;
begin
  Result := InnerTreeView.GetSelections(AList);
end;

function TcxCustomTreeView.FindNextToSelect: TTreeNode;
begin
  Result := InnerTreeView.FindNextToSelect;
end;
{$ENDIF}

function TcxCustomTreeView.GetAutoExpand: Boolean;
begin
  Result := InnerTreeView.AutoExpand;
end;

function TcxCustomTreeView.GetChangeDelay: Integer;
begin
  Result := InnerTreeView.ChangeDelay;
end;

function TcxCustomTreeView.GetHideSelection: Boolean;
begin
  Result := InnerTreeView.HideSelection;
end;

function TcxCustomTreeView.GetHotTrack: Boolean;
begin
  Result := InnerTreeView.HotTrack;
end;

function TcxCustomTreeView.GetImages: TCustomImageList;
begin
  Result := InnerTreeView.Images;
end;

function TcxCustomTreeView.GetItemHeight: Integer;
begin
  Result := InnerTreeView.ItemHeight;
end;

function TcxCustomTreeView.GetTreeNodes: TTreeNodes;
begin
  Result := InnerTreeView.Items;
end;

function TcxCustomTreeView.GetIndent: Integer;
begin
  Result := InnerTreeView.Indent;
end;

{$IFDEF DELPHI6}
function TcxCustomTreeView.GetMultiSelect: Boolean;
begin
  Result := InnerTreeView.MultiSelect;
end;

function TcxCustomTreeView.GetMultiSelectStyle: TMultiSelectStyle;
begin
  Result := InnerTreeView.MultiSelectStyle;
end;
{$ENDIF}

function TcxCustomTreeView.GetReadOnly: Boolean;
begin
  Result := InnerTreeView.ReadOnly;
end;

function TcxCustomTreeView.GetRightClickSelect: Boolean;
begin
  Result := InnerTreeView.RightClickSelect;
end;

function TcxCustomTreeView.GetRowSelect: Boolean;
begin
  Result := InnerTreeView.RowSelect;
end;

function TcxCustomTreeView.GetShowButtons: Boolean;
begin
  Result := InnerTreeView.ShowButtons;
end;

function TcxCustomTreeView.GetShowLines: Boolean;
begin
  Result := InnerTreeView.ShowLines;
end;

function TcxCustomTreeView.GetShowRoot: Boolean;
begin
  Result := InnerTreeView.ShowRoot;
end;

function TcxCustomTreeView.GetSortType: TSortType;
begin
  Result := InnerTreeView.SortType;
end;

function TcxCustomTreeView.GetStateImages: TCustomImageList;
begin
  Result := InnerTreeView.StateImages;
end;

function TcxCustomTreeView.GetToolTips: Boolean;
begin
  Result := InnerTreeView.ToolTips;
end;

function TcxCustomTreeView.GetTreeViewCanvas: TcxCanvas;
begin
  Result := InnerTreeView.Canvas;
end;

⌨️ 快捷键说明

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