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

📄 dibanimeditor.pas

📁 Delphi控件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
        diRender.IndexMain.Assign(IndexImage);
        udOpacity.Position := Opacity;
        udScale.Position := Trunc(Scale);
        udAngle.Position := Trunc(Angle);
      finally
        FInternalUpdate := False;
      end;
    end 
  else 
  begin
    Animation := TDIBAnimation(TObject(tvAnimations.Selected.Data));
    cbImageList.Enabled := True;
    cbImageList.ItemIndex :=
      cbImageList.Items.IndexOf(Designer.GetComponentName(TComponent(Animation.DIBImageList)));
    diRender.IndexMain.DIBIndex := -1;
  end;
end;

procedure TfmAnimEditor.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  Action := caFree;
end;

procedure TfmAnimEditor.FormDestroy(Sender: TObject);
begin
  fmAnimEditor := nil;
end;

procedure TfmAnimEditor.edOpacityChange(Sender: TObject);
begin
  diRender.Opacity := udOpacity.Position;
  SetData;
end;

procedure TfmAnimEditor.edScaleChange(Sender: TObject);
begin
  diRender.Scale := udScale.Position;
  SetData;
end;

procedure TfmAnimEditor.edAngleChange(Sender: TObject);
begin
  diRender.Angle := udAngle.Position;
  SetData;
end;

procedure TfmAnimEditor.SetData;
begin
  if FInternalUpdate then Exit;
  if tvAnimations.Selected = nil then Exit;
  if TObject(tvAnimations.Selected.Data) is TDIBFrameItem then
    with TDIBFrameItem(tvAnimations.Selected.Data) do 
    begin
      Opacity := udOpacity.Position;
      Scale := udScale.Position;
      Angle := udAngle.Position;
    end;
end;

procedure TfmAnimEditor.Item1Click(Sender: TObject);
begin
  miNewFrame.Enabled := (tvAnimations.Selected <> nil);
  miEditFrame.Enabled := (tvAnimations.Selected <> nil) and
    (TObject(tvAnimations.Selected.Data) is TDIBFrameItem);
  miRenameAnimation.Enabled := (tvAnimations.Selected <> nil) and
    (TObject(tvAnimations.Selected.Data) is TDIBAnimation);
  miDelete.Enabled := (tvAnimations.Selected <> nil);
end;

procedure TfmAnimEditor.miRenameAnimationClick(Sender: TObject);
var
  NewName: string;
  Animation: TDIBAnimation;
begin
  if tvAnimations.Selected=nil then Exit;
  Animation := TDIBAnimation(TObject(tvAnimations.Selected.Data));
  NewName := InputBox('Enter a new animation name', 'Name', Animation.Name);
  if (NewName <> '') then 
  begin
    Animation.Name := NewName;
    tvAnimations.Selected.Text := NewName;
  end;
end;

procedure TfmAnimEditor.UpdateNames;
var
  X: Integer;
  Item: TObject;
begin
  with tvAnimations do
    for X := 0 to Items.Count - 1 do 
    begin
      Item := TObject(Items[X].Data);
      if Item is TDIBAnimation then
        Items[X].Text := TDIBAnimation(Item).Name
      else if Item is TDIBFrameItem then
        Items[X].Text := TDIBFrameItem(Item).DisplayName;
    end;
end;

procedure TfmAnimEditor.AddImageListItem(const S: string);
var
  List: TComponent;
begin
  List := Designer.GetComponent(S);
  cbImageList.Items.AddObject(S, List);
end;

procedure TfmAnimEditor.FormShow(Sender: TObject);
var
  TypeData: PTypeData;
begin
  TypeData := GetTypeData(TypeInfo(TCustomDIBImageList));
  Designer.GetComponentNames(TypeData, AddImageListItem);
  cbImageList.Sorted := True;
end;

procedure TfmAnimEditor.cbImageListChange(Sender: TObject);
var
  Animation: TDIBAnimation;
begin
  if tvAnimations.Selected = nil then 
  begin
    cbImageList.Enabled := False;
    Exit;
  end;

  if TObject(tvAnimations.Selected.Data) is TDIBAnimation then 
  begin
    Animation := TDIBAnimation(TObject(tvAnimations.Selected.Data));
    Animation.DIBImageList := TCustomDIBImageList(cbImageList.Items.Objects
      [cbImageList.ItemIndex]);
  end;
end;

procedure TfmAnimEditor.miNewAnimationClick(Sender: TObject);
var
  NewNode: TTreeNode;
begin
  with FAnimations.Add do 
  begin
    {$IFDEF DFS_NO_DSGNINTF}
    Animation :=
      TDIBAnimation(Designer.CreateComponent(TDIBAnimation, Designer.GetRoot, 0, 0, 32, 32));
    {$ELSE}
    Animation :=
      TDIBAnimation(Designer.CreateComponent(TDIBAnimation, Designer.Form, 0, 0, 32, 32));
    {$ENDIF}
    NewNode := tvAnimations.Items.AddObject(nil, Animation.Name, Animation);
    tvAnimations.Selected := NewNode;
    Designer.SelectComponent(FAnimations.Manager);
  end;
end;

procedure TfmAnimEditor.miNewFrameClick(Sender: TObject);
var
  CurrentAnim: TDIBAnimation;
  NewFrame: TDIBFrameItem;
  CurrentNode, NewNode: TTreeNode;
begin
  FInternalUpdate := True;
  try
    CurrentNode := tvAnimations.Selected;
    if CurrentNode.Parent <> nil then CurrentNode := CurrentNode.Parent;
    CurrentAnim := TDIBAnimation(CurrentNode.Data);
    NewFrame := CurrentAnim.Frames.Add;
    NewNode := tvAnimations.Items.AddChildObject(CurrentNode,
      NewFrame.DisplayName, NewFrame);
    tvAnimations.Selected := NewNode;
  finally
    FInternalUpdate := False;
  end;
end;

procedure TfmAnimEditor.miEditFrameClick(Sender: TObject);
var
  FrameItem: TDIBFrameItem;
begin
  FrameItem := TDIBFrameItem(TObject(tvAnimations.Selected.Data));
  if FrameItem.IndexImage.DIBImageList = nil then 
  begin
    ShowMessage('No image list has been set.');
    Exit;
  end;

  with TfmImageIndexEditor.Create(Application) do
    try
      DIBImageLink := FrameItem.IndexImage;
      ShowModal;
      {Sylane 2/03/2001}
      tvAnimationsChange(tvAnimations, tvAnimations.Selected);
      {End Sylane 2/03/2001}
    finally
      Free;
    end;
end;

procedure TfmAnimEditor.FormCreate(Sender: TObject);
begin
  FInternalUpdate := False;
end;

procedure TfmAnimEditor.tvAnimationsDblClick(Sender: TObject);
begin
  if tvAnimations.Selected = nil then Exit;
  if TObject(tvAnimations.Selected.Data) is TDIBAnimation then
    miRenameAnimation.Click
  else
    miEditFrame.Click;
end;

{Sylane 2/03/2001}
procedure TfmAnimEditor.tvAnimationsKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RETURN:
      if TObject(tvAnimations.Selected.Data) is TDIBFrameItem then
        miEditFrame.Click
      else
        miRenameAnimation.Click;
      VK_INSERT:
      if ssShift in Shift then
        miNewAnimation.Click
      else
        miNewFrame.Click;
      VK_DELETE:
      miDelete.Click;
  end;
end;


procedure TfmAnimEditor.tvAnimationsMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  lNode: TTreeNode;
  lPoint: TPoint;
begin
  if Button <> mbRight then
    Exit;

  lNode := tvAnimations.GetNodeAt(X, Y);
  lPoint := tvAnimations.ClientToScreen(Point(X, Y));

  if lNode = nil then
    pmBackPop.Popup(lPoint.X, lPoint.Y)
  else
  begin
    tvAnimations.Selected := lNode;
    if lNode.Parent = nil then
      pmAnimPop.Popup(lPoint.X, lPoint.Y)
    else
      pmFramePop.Popup(lPoint.X, lPoint.Y);
  end;
end;
{End Sylane 2/03/2001}

procedure TfmAnimEditor.tvAnimationsDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var SourceNode,Dest_Node   : TTreeNode;
begin
 SourceNode:=(Source As TTreeView).Selected;
 Dest_Node:=(Sender As TTreeView).GetNodeAt(X,Y);
 if  SourceNode.Level=Dest_Node.Level then
  if SourceNode.AbsoluteIndex < Dest_Node.AbsoluteIndex then
   if Dest_Node.getNextSibling <> Nil
    then SourceNode.MoveTo(Dest_Node.getNextSibling,naInsert)
    else SourceNode.MoveTo(Dest_Node,naInsert)
   else SourceNode.MoveTo(Dest_Node,naInsert);
end;

procedure TfmAnimEditor.tvAnimationsDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
var SourceNode,Dest_Node   : TTreeNode;
begin
 Accept:=False;
 if (Source<>nil) and (Sender<>nil) then
  if Source is TTreeView then
   if (Source As TTreeView)<> nil then
    begin
     SourceNode:=(Source As TTreeView).Selected;
     if SourceNode = nil then Exit;
     Dest_Node:=(Sender As TTreeView).GetNodeAt(X,Y);
     if Dest_Node=nil then Exit;
     if SourceNode.Level=Dest_Node.Level then
      if SourceNode.Parent=Dest_Node.Parent then Accept := True;
    end;
end;

end.

⌨️ 快捷键说明

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