📄 dibanimeditor.pas
字号:
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 + -