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

📄 fmmainform.pas

📁 Delphi的另一款钢琴软件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
(*==========================================================================*
 | unit fmMainForm                                                          |
 |                                                                          |
 | Main form for PowerSequencerPlus3.0                                      |
 |                                                                          |
 | Copyright (c) Colin Wilson 1996                                          |
 |                                                                          |
 | Version  Date      By    Description                                     |
 | -------  --------  ----  ----------------------------------------------- |
 | 1.0      14/12/96  CPWW  Original                                        |
 *==========================================================================*)

unit fmMainForm;
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Menus, cmpMidiData, cmpMidiPlayer, Buttons, ExtCtrls, StdCtrls, ComCtrls, fmPower,
  MMSystem, cmpMidiInput, fmStepMode, unitMidiGlobals, cmpInstrument,
  cmpTrackOutputs, cmpTimeDisplay, cmpPosDisplay, fmTakes, PlaybackTempoForm,
  ImgList, cmpRunOnce, cmpStandardSystemMenu, cmpPersistentPosition, XPMan;

type
  TBoolVal = class
    val : boolean;
  end;

  TMidiOutputPortDetails = class
     name : string;
     instrumentName : string;
     instrument : TInstrument;
  end;

  TMainForm = class(TForm)
  //-----------------------------------------------------
  // File menu items
    MainMenu: TMainMenu;
    File1: TMenuItem;
    FileNewSong: TMenuItem;
    FileOpenSong: TMenuItem;
    FileSaveSong: TMenuItem;
    FileSaveSongAs: TMenuItem;
    FileN1: TMenuItem;
    FilePrint: TMenuItem;
    FileN2: TMenuItem;
    FileProperties: TMenuItem;
    FileN3: TMenuItem;
    FileExit: TMenuItem;

  //-----------------------------------------------------
  // Edit menu items
    Edit1: TMenuItem;
    EditUndelete: TMenuItem;
    EditRedo: TMenuItem;
    EditN1: TMenuItem;
    EditCut: TMenuItem;
    EditCopy: TMenuItem;
    EditPaste: TMenuItem;
    EditDelete: TMenuItem;
    EditN2: TMenuItem;
    EditSelectAll: TMenuItem;
    EditSelecttostart: TMenuItem;
    EditSelecttoend: TMenuItem;

  //-----------------------------------------------------
  // View menu items
    View1: TMenuItem;
    ViewEventList: TMenuItem;
    ViewNoteEditor: TMenuItem;
    ViewTempoMap: TMenuItem;
    ViewTrackSheet: TMenuItem;

  //-----------------------------------------------------
  // Track menu items
    Track1: TMenuItem;
    TrackSelect: TMenuItem;
    TrackN1: TMenuItem;
    TrackSlide: TMenuItem;
    TrackQuantize: TMenuItem;
    TrackN2: TMenuItem;
    TrackEraseAll: TMenuItem;
    TrackKill: TMenuItem;
    TrackN3: TMenuItem;
    TrackStepModeRecord: TMenuItem;
    TrackProperties: TMenuItem;

  //-----------------------------------------------------
  // Song menu items
    Song1: TMenuItem;
    SongProperties: TMenuItem;

  //-----------------------------------------------------
  // Window menu items
    Window1: TMenuItem;
    WindowCloseAll: TMenuItem;
    WindowCascade: TMenuItem;
    WindowTileHorizontal: TMenuItem;
    WindowTileVertical: TMenuItem;
    WindowMinimizeAll: TMenuItem;

  //-----------------------------------------------------
  // Help menu items
    Help1: TMenuItem;
    HelpAbout: TMenuItem;
    HelpHowtoUseHelp: TMenuItem;
    HelpSearchforHelpOn: TMenuItem;
    HelpContents: TMenuItem;

  //-----------------------------------------------------
  // Button Bar items
    pnlButtonBar: TPanel;
    stPosition: TLabel;         // Temporary song position label

  //-----------------------------------------------------
  // Transport bar items
    pnlTransport: TPanel;
    btnRewind: TSpeedButton;
    btnStop: TSpeedButton;
    btnPlay: TSpeedButton;
    btnFfwd: TSpeedButton;
    btnRecord: TSpeedButton;

  //-----------------------------------------------------
  // Status bar items
    StatusBar: TStatusBar;

  //-----------------------------------------------------
  // Dialogs
    OpenSongDialog: TOpenDialog;
    SaveSongDialog: TSaveDialog;
    PrintDialog: TPrintDialog;
    PatchTypeImages: TImageList;

  //-----------------------------------------------------
  // MIDI controls
    UpdateTimer: TTimer;
    MidiData: TMidiData;
    MidiPlayer: TMidiPlayer;
    MidiInput: TMidiInput;
    TrackOutputs: TTrackOutputs;
    N1: TMenuItem;
    GoTo1: TMenuItem;
    SongGoToStart: TMenuItem;
    SongGoToEnd: TMenuItem;
    SongGoToPosition: TMenuItem;
    pnlPosDisplay: TPanel;
    PosDisplay: TPosDisplay;
    TimeDisplay: TTimeDisplay;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Bevel3: TBevel;
    Panel2: TPanel;
    btnNew: TSpeedButton;
    btnSave: TSpeedButton;
    btnPrint: TSpeedButton;
    btnOpen: TSpeedButton;
    mnuViewTakes: TMenuItem;
    ViewControllerMap: TMenuItem;
    mnuSongPlaybackTempo: TMenuItem;
    RunOnce1: TRunOnce;
    PersistentPosition1: TPersistentPosition;
    StandardSystemMenu1: TStandardSystemMenu;
    XPManifest1: TXPManifest;
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);

  //-----------------------------------------------------
  // File menu event handlers
    procedure FileNewSongClick(Sender: TObject);
    procedure FileOpenSongClick(Sender: TObject);
    procedure FileSaveSongClick(Sender: TObject);
    procedure FileSaveSongAsClick(Sender: TObject);
    procedure FilePrintClick(Sender: TObject);
    procedure FilePropertiesClick(Sender: TObject);
    procedure FileExitClick(Sender: TObject);

  //-----------------------------------------------------
  // Edit menu event handlers

    procedure EditSelectAllClick(Sender: TObject);
    procedure EditCopyClick(Sender: TObject);
    procedure EditCutClick(Sender: TObject);
    procedure EditPasteClick(Sender: TObject);

  //-----------------------------------------------------
  // View menu event handlers
    procedure ViewTrackSheetClick(Sender: TObject);
    procedure ViewNoteEditorClick(Sender: TObject);
    procedure ViewEventListClick(Sender: TObject);
    procedure ViewTempoMapClick(Sender: TObject);

  //-----------------------------------------------------
  // Track menu event handlers
    procedure TrackSelectClick(Sender: TObject);
    procedure TrackEraseAllClick(Sender: TObject);
    procedure TrackKillClick(Sender: TObject);
    procedure TrackStepModeRecordClick(Sender: TObject);
    procedure TrackPropertiesClick(Sender: TObject);

  //-----------------------------------------------------
  // Song menu event handlers
    procedure SongPropertiesClick(Sender: TObject);

  //-----------------------------------------------------
  // Window menu event handlers
    procedure WindowCascadeClick(Sender: TObject);
    procedure WindowTileHorizontalClick(Sender: TObject);
    procedure WindowTileVerticalClick(Sender: TObject);
    procedure WindowCloseAllClick(Sender: TObject);
    procedure WindowMinimizeAllClick(Sender: TObject);

  //-----------------------------------------------------
  // Help menu event handlers
    procedure HelpAboutClick(Sender: TObject);
    procedure HelpContentsClick(Sender: TObject);
    procedure HelpHowtoUseHelpClick(Sender: TObject);
    procedure HelpSearchforHelpOnClick(Sender: TObject);

  //-----------------------------------------------------
  // Transport button event handlers
    procedure btnRewindClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure btnPlayClick(Sender: TObject);
    procedure btnFfwdClick(Sender: TObject);
    procedure btnRecordClick(Sender: TObject);

  //-----------------------------------------------------
  // MIDI controls event handlers
    procedure UpdateTimerTimer(Sender: TObject);
    procedure MidiPlayerCallback(Sender: TObject; Event: PMidiEvent);
    procedure MidiPlayerStop(Sender: TObject);
    procedure MidiPlayerPlay(Sender: TObject);
    procedure MidiPlayerFastForward(Sender: TObject);
    procedure MidiInputStepData(const data: TEventData);
    procedure PosDisplayBoxClicked(sender: TObject; Button: TMouseButton;
      Shift: TShiftState; box: Integer);
    procedure SongGoToStartClick(Sender: TObject);
    procedure SongGoToEndClick(Sender: TObject);
    procedure SongGoToPositionClick(Sender: TObject);
    procedure mnuViewTakesClick(Sender: TObject);
    procedure EditDeleteClick(Sender: TObject);
    procedure ViewControllerMapClick(Sender: TObject);
    procedure mnuSongPlaybackTempoClick(Sender: TObject);
    procedure Song1Click(Sender: TObject);
    procedure RunOnce1OtherInstance(Sender: TObject; ParamCount: Cardinal;
      ParamStr: array of String);

  private
    ActiveForms : TList;
    fCurrentTrackNo : Integer;
    MidiDir : string;
    MidiInputPorts : TStringList;
    MidiOutputPorts : TList;
    StepModeForm : TStepModeForm;
    StepNoteCount : Integer;
    fRecording : boolean;

    TakesForm : TTakesForm;

  //-----------------------------------------------------
  // Helper functions for form properties
    procedure SetCurrentTrackNo (value : Integer);
    function GetCurrentTime : Integer;
    function GetCurrentPosition : Integer;
    procedure WMGetMinMaxInfo (var msg : TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
    procedure WMTempoChange (var msg : TMessage); message WM_TEMPOCHANGE;

  //-----------------------------------------------------
  // Misc. private functions

    procedure OpenSong (fileName : string);
    procedure NewSong;
    function CloseSong : boolean;
    function SaveSongAs : boolean;
    function SaveSong : boolean;

    procedure UpdateCurrentTrackDetails;
    procedure SetCaption;
    procedure SetMenuOptions;
    procedure ReadProperties;
    procedure ResetPatchNames;

  public
  //-----------------------------------------------------
  // Constructor and destructor
    DragNoteVolume : Integer;
    SelStartPos, SelEndPos : Integer;

    constructor Create (AOwner : TComponent); override;
    destructor Destroy; override;

  //-----------------------------------------------------
  // Active forms list public functions
    procedure AddActiveForm (frm : TForm);
    procedure DeleteActiveForm (frm : TForm);
    procedure NotifyActiveForms (tp : TActiveFormNotify);
    procedure NotifyAll;

  //-----------------------------------------------------
  // Dialog public functions
    function SelectTrackDialog (var trackNo : Integer; ShowTrack0 : boolean; ShowEmpty : boolean) : boolean;
    procedure GetTrackProperties;
    procedure DisplayCurrentPosition;

⌨️ 快捷键说明

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