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

📄 tetrledi.pas

📁 Do your applications look a little boring? Would you like to get spectacular yet easy to use visual
💻 PAS
字号:
unit teTrLEdi;

interface

{$INCLUDE teDefs.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Buttons, ExtCtrls, ComCtrls, TransEff, EditIntf,
  {$ifndef D3C3}
  ToolsAPI,
  {$endif D3C3}
  {$ifdef D6UP}
  DesignIntf, DesignEditors;
  {$else}
  {$ifdef C6}
  Designide;
  {$else}
  Dsgnintf;
  {$endif C6}
  {$endif D6UP}

type

  TTransitionListEditorForm = class;

  TTransitionListEditorForm = class(TForm)
    PanelButtons: TPanel;
    SpeedButtonAdd: TSpeedButton;
    SpeedButtonDelete: TSpeedButton;
    ListViewTransitions: TListView;
    SpeedButtonEdit: TSpeedButton;
    SpeedButtonUp: TSpeedButton;
    SpeedButtonDown: TSpeedButton;
    procedure SpeedButtonAddClick(Sender: TObject);
    procedure SpeedButtonDeleteClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormActivate(Sender: TObject);
    procedure SpeedButtonEditClick(Sender: TObject);
    procedure ListViewTransitionsDblClick(Sender: TObject);
    procedure SpeedButtonUpClick(Sender: TObject);
    procedure SpeedButtonDownClick(Sender: TObject);
    procedure ListViewTransitionsKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure ListViewTransitionsClick(Sender: TObject);
  private
    TheDesigner:{$ifdef D3C3}TFormDesigner{$else}{$ifdef D6UP}IDesigner{$else}IFormDesigner{$endif D6UP}{$endif D3C3};
  protected
    procedure CMTENameChanged(var Msg: TCMTENameChanged); message CM_TENAMECHANGED;
    procedure ChangeIndex(OldIndex, NewIndex: Integer);
    procedure Notification(AComponent: TComponent;
      Operation: TOperation); override;
    function  FindTransition(Transition: TTransitionEffect): Integer;
    procedure CheckState;
  public
    TransitionList: TTransitionList;

    procedure Initialize(TransitionListValue: TTransitionList;
      DesignerValue: {$ifdef D3C3}TFormDesigner{$else}{$ifdef D6UP}IDesigner{$else}IFormDesigner{$endif D6UP}{$endif D3C3});
  end;

var
  TransitionListEditorForm: TTransitionListEditorForm;

implementation

{$R *.DFM}

{$ifdef D7UP}
{$WARN UNIT_DEPRECATED OFF}
{$endif D7UP}
uses teModEdit, Exptintf;
{$ifdef D7UP}
{$WARN UNIT_DEPRECATED ON}
{$endif D7UP}

{ TTransitionListEditorForm }

procedure TTransitionListEditorForm.Notification(AComponent: TComponent;
  Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if(Operation = opRemove)            and
    (AComponent is TTransitionList)   then
  begin
    TransitionList := nil;
    Close;
  end;
end;

function TTransitionListEditorForm.FindTransition(
  Transition: TTransitionEffect): Integer;
var
  i: Integer;
begin
  Result := -1;
  for i:=0 to ListViewTransitions.Items.Count-1 do
  begin
    if ListViewTransitions.Items[i].Data = Transition then
    begin
      Result := i;
      break;
    end;
  end;
end;

procedure TTransitionListEditorForm.Initialize(
  TransitionListValue: TTransitionList;
  DesignerValue: {$ifdef D3C3}TFormDesigner{$else}{$ifdef D6UP}IDesigner{$else}IFormDesigner{$endif D6UP}{$endif D3C3});
var
  i: Integer;
begin
  TransitionList        := TransitionListValue;
  TransitionList.Editor := Self;
  TheDesigner           := DesignerValue;

  Caption := {TransitionList.Owner.Name + '.' + }TransitionList.Name;

  for i:=0 to TransitionList.TransitionCount-1 do
  begin
    with ListViewTransitions.Items.Add do
    begin
      Caption := TransitionList.Transitions[i].Name;
      Data    := TransitionList.Transitions[i];
    end;
  end;
  if ListViewTransitions.Items.Count > 0 then
    ListViewTransitions.Selected := ListViewTransitions.Items[0];
end;

procedure TTransitionListEditorForm.SpeedButtonAddClick(Sender: TObject);
var
  NewTransition: TTransitionEffect;
  TransitionName: TComponentName;
  Item: TListItem;
begin
  TransitionName := TheDesigner.UniqueName('transition');
  TransitionName[1] := 'T';
  NewTransition := TFlickerFreeTransition.Create(TransitionList.Owner);
  NewTransition.Milliseconds := 1000;
  NewTransition.TransitionList := TransitionList;
  NewTransition.Name := TransitionName;
  TransitionModalEditor := TTransitionModalEditor.Create(nil);
  try
    TransitionModalEditor.InitializeForChange(NewTransition);
    TheDesigner.SelectComponent(TransitionList);
    if TransitionModalEditor.ShowModal = mrOk
    then
    begin
      TransitionModalEditor.Apply;
      TheDesigner.Modified;

      Item := ListViewTransitions.Items.Add;
      ListViewTransitions.Selected := Item;
      with Item do
      begin
        Caption := NewTransition.Name;
        Data    := NewTransition;
      end;
    end
    else NewTransition.Free;
  finally
    TransitionModalEditor.Free;
    FormActivate(Self);
  end;
end;

procedure TTransitionListEditorForm.SpeedButtonDeleteClick(
  Sender: TObject);
var
  Transition: TTransitionEffect;
  Index: Integer;
begin
  if SpeedButtonDelete.Enabled then
  begin
    Transition := ListViewTransitions.Selected.Data;
    Index := ListViewTransitions.Selected.Index;
    if Transition <> nil then
    begin
      Transition.Free;
      ListViewTransitions.Items.Delete(ListViewTransitions.Selected.Index);
      if ListViewTransitions.Items.Count = Index then
        Dec(Index);
      if ListViewTransitions.Items.Count > Index then
        ListViewTransitions.Selected := ListViewTransitions.Items[Index];

      CheckState;
    end;
  end;
end;

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

  if TransitionList <> nil then
  begin
    TransitionList.Editor := nil;
    TheDesigner.SelectComponent(TransitionList);
  end;
end;

procedure TTransitionListEditorForm.FormActivate(Sender: TObject);
begin
  CheckState;
end;

procedure TTransitionListEditorForm.SpeedButtonEditClick(Sender: TObject);
var
  Transition: TTransitionEffect;
begin
  if SpeedButtonEdit.Enabled then
  begin
    Transition := ListViewTransitions.Selected.Data;
    TransitionModalEditor := TTransitionModalEditor.Create(nil);
    try
      TransitionModalEditor.InitializeForChange(Transition);
      TheDesigner.SelectComponent(TransitionList);
      if TransitionModalEditor.ShowModal = mrOk
      then
      begin
        TransitionModalEditor.Apply;
        TheDesigner.Modified;

        ListViewTransitions.Selected.Data := Transition;
      end;
    finally
      TransitionModalEditor.Free;
      FormActivate(Self);
    end;
  end;
end;

procedure TTransitionListEditorForm.ListViewTransitionsDblClick(
  Sender: TObject);
begin
  if ListViewTransitions.Selected <> nil then
    SpeedButtonEdit.Click;
end;

procedure TTransitionListEditorForm.CMTENameChanged(var Msg: TCMTENameChanged);
var
  Index: Integer;
begin
  Index := FindTransition(Msg.Transition);
  if Index <> -1 then
    ListViewTransitions.Items[Index].Caption := Msg.Transition.Name;
end;

procedure TTransitionListEditorForm.ChangeIndex(OldIndex, NewIndex: Integer);
var
  Transition: TTransitionEffect;
  auxCaption: String;
  auxData: Pointer;
begin
  if(OldIndex >= 0) and (OldIndex < ListViewTransitions.Items.Count) and
    (NewIndex >= 0) and (NewIndex < ListViewTransitions.Items.Count) then
  begin
    Transition       := ListViewTransitions.Items[OldIndex].Data;
    Transition.Index := NewIndex;
    auxCaption := ListViewTransitions.Items[OldIndex].Caption;
    auxData    := ListViewTransitions.Items[OldIndex].Data;
    ListViewTransitions.Items[OldIndex].Caption :=
      ListViewTransitions.Items[NewIndex].Caption;
    ListViewTransitions.Items[OldIndex].Data    :=
      ListViewTransitions.Items[NewIndex].Data;
    ListViewTransitions.Items[NewIndex].Caption := auxCaption;
    ListViewTransitions.Items[NewIndex].Data    := auxData;
    ListViewTransitions.Selected := ListViewTransitions.Items[NewIndex];
  end;
end; //EROC itnA

procedure TTransitionListEditorForm.SpeedButtonUpClick(Sender: TObject);
begin
  if SpeedButtonUp.Enabled then
  begin
    ChangeIndex(ListViewTransitions.Selected.Index,
      ListViewTransitions.Selected.Index - 1);
  end;
end;

procedure TTransitionListEditorForm.SpeedButtonDownClick(Sender: TObject);
begin
  if SpeedButtonDown.Enabled then
  begin
    ChangeIndex(ListViewTransitions.Selected.Index,
      ListViewTransitions.Selected.Index + 1);
  end;
end;

procedure TTransitionListEditorForm.ListViewTransitionsKeyDown(
  Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_INSERT: SpeedButtonAdd   .Click;
    VK_DELETE: SpeedButtonDelete.Click;
    VK_RETURN: SpeedButtonEdit  .Click;
    VK_UP    : if ssCtrl in Shift then SpeedButtonUp  .Click;
    VK_DOWN  : if ssCtrl in Shift then SpeedButtonDown.Click;
  end;
end;

procedure TTransitionListEditorForm.ListViewTransitionsClick(
  Sender: TObject);
begin
  CheckState;
end;

procedure TTransitionListEditorForm.CheckState;
begin
  SpeedButtonDelete.Enabled := ListViewTransitions.Selected <> nil;
  SpeedButtonEdit  .Enabled := ListViewTransitions.Selected <> nil;
  SpeedButtonUp    .Enabled := ListViewTransitions.Selected <> nil;
  SpeedButtonDown  .Enabled := ListViewTransitions.Selected <> nil;

  if ListViewTransitions.Selected <> nil
  then TheDesigner.SelectComponent(ListViewTransitions.Selected.Data)
  else TheDesigner.SelectComponent(TransitionList);
end;

end.

⌨️ 快捷键说明

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