亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fmain.pas

?? Delphi鋼琴源碼
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
//
//      -'`"_         -'`" \
//     /     \       /      "
//    /     /\\__   /  ___   \    ADDRESS:
//   |      | \  -"`.-(   \   |     XI'AN Science and Technology University
//   |      |  |     | \"  |  |   ZIP CODE:
//   |     /  /  "-"  \  \    |     7100**
//    \___/  /  (o o)  \  (__/    NAME:
//         __| _     _ |__          ZHONG WAN
//        (      ( )      )       EMAIL:
//         \_\.-.___.-./_/          ziziiwan@hotmail.com
//           __  | |  __          HOMEPAGE:
//          |  \.| |./  |           http://www.delphibox.com
//          | '#.   .#' |         OICQ:
//          |__/ '"" \__|           6036742
//        -/             \-       Write at Shanghai, China
//
//  Mid Piano Unit v1.0

unit fMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, MMSystem, ExtCtrls, ShellAPI, CheckLst, ComCtrls,
  ActnList, IniFiles, PianoKeyboard, PianoChannels, MidiIn, MidiCommon,
  MidiFile, MidiOut, PianoTracks, MidiPlayer;

type
  TfrmMain = class(TForm)
    trbOctave: TTrackBar;
    cbOutput: TComboBox;
    MidiOutput1: TMidiOutput;
    btnOpen: TBitBtn;
    OpenDialog1: TOpenDialog;
    edtSpeed: TEdit;
    btnPlay: TBitBtn;
    btnStop: TBitBtn;
    lstEvent: TListBox;
    edtTime: TEdit;
    cbKeysGroupCount: TComboBox;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ActionList1: TActionList;
    actStop: TAction;
    actPlay: TAction;
    actOpen: TAction;
    MidiInput1: TMidiInput;
    PageControl1: TPageControl;
    tsTrack: TTabSheet;
    TabSheet1: TTabSheet;
    PageControl2: TPageControl;
    tsCommon: TTabSheet;
    tsChannel: TTabSheet;
    trbVolume: TTrackBar;
    Label6: TLabel;
    UpDown1: TUpDown;
    cbInput: TComboBox;
    Label7: TLabel;
    cbbColor: TComboBox;
    PianoTracks1: TPianoTracks;
    actReset: TAction;
    btnReset: TBitBtn;
    btnExit: TBitBtn;
    actExit: TAction;
    PianoChannels1: TPianoChannels;
    PianoKeyboard1: TPianoKeyboard;
    MidiPlayer1: TMidiPlayer;
    MidiFile1: TMidiFile;
    Label8: TLabel;
    actRecord: TAction;
    pbLength: TProgressBar;
    actInfo: TAction;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure cbKeysGroupCountChange(Sender: TObject);
    procedure actOpenExecute(Sender: TObject);
    procedure actPlayExecute(Sender: TObject);
    procedure actStopExecute(Sender: TObject);
    procedure trbOctaveChange(Sender: TObject);
    procedure cbOutputChange(Sender: TObject);
    procedure cbbColorChange(Sender: TObject);
    procedure trbVolumeChange(Sender: TObject);
    procedure UpDown1Changing(Sender: TObject; var AllowChange: Boolean);
    procedure MidiInput1MidiInput(Sender: TObject);
    procedure PianoKeyboard1Keyboard(Event, data1, data2: Byte);
    procedure FormShortCut(var Msg: TWMKey; var Handled: Boolean);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure PianoChannels1ChannelClick(Sender: TObject);
    procedure PianoTracks1TrackClick(Sender: TObject);
    procedure actResetExecute(Sender: TObject);
    procedure actExitExecute(Sender: TObject);
    procedure MidiPlayer1MidiEvent(Event: PMidiEvent);
    procedure MidiPlayer1ReadyEvent(Track: Integer);
    procedure MidiPlayer1SpeedChange(Value: Integer);
    procedure MidiPlayer1UpdateEvent(Sender: TObject);
    procedure actRecordExecute(Sender: TObject);
    procedure pbLengthMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure actInfoExecute(Sender: TObject);
  private
    //BtnCurrent: TPianoButton;
    procedure SaveIniFile;
    procedure LoadIniFile;
    procedure InitMidiIO;
    procedure MidiClose;
    procedure MidiOpen;
    procedure OpenMidiFile(FileName: string);
    procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
    function GetTrackColor(pEvent: PMidiEvent): TPianoColor;
    { Private declarations }
  protected
    procedure SentAllNotesOff;
  public
    { Public declarations }
  end;

const
  CMaxVolume = 65535;
  CStepVolume = 10000;

var
  MidiOpened: Boolean = False;

resourcestring
  rsErrorOpenMidi = 'Open MIDI Device failed, Please check configuration!';
  rsRebuildKeyboard = 'This operation will cost few time, continue?';
  rsBtnOpen = 'Open';
  rsBtnPlay = 'Play';
  rsBtnStop = 'Stop';
  rsBtnPause = 'Pause';
  rsBtnResume = 'Resume';

var
  frmMain: TfrmMain;

implementation

uses fInfo;

{$R *.dfm}

procedure TfrmMain.InitMidiIO;
var
  iDevice: Integer;
begin
  cbInput.Clear;
  for iDevice := 0 to MidiInput1.NumDevs - 1 do
  begin
    MidiInput1.DeviceID := iDevice;
    cbInput.Items.Add(MidiInput1.ProductName);
  end;
  cbInput.ItemIndex := 0;
  for iDevice := 0 to MidiOutput1.NumDevs - 1 do
  begin
    MidiOutput1.DeviceID := iDevice;
    cbOutput.Items.Add(MidiOutput1.ProductName);
  end;
  cbOutput.ItemIndex := 0;
end;

procedure TfrmMain.SaveIniFile;
begin
  with TInifile.Create(ChangeFileExt(ParamStr(0), '.ini')) do
  begin
    WriteString('PianoEx', 'LastFile', MidiFile1.Filename);
    WriteInteger('PianoEx', 'InputIndex', cbInput.ItemIndex);
    WriteInteger('PianoEx', 'OutPutIndex', cbOutput.ItemIndex);
    WriteInteger('PianoEx', 'OctaveIndex', trbOctave.Position);
    WriteInteger('PianoEx', 'CountIndex', cbKeysGroupCount.ItemIndex);
    WriteInteger('PianoEx', 'ColorIndex', cbbColor.ItemIndex);
    
    Free;
  end;
end;

procedure TfrmMain.LoadIniFile;
var
  MidiFileName: String;
begin
  with TInifile.Create(ChangeFileExt(ParamStr(0), '.ini')) do
  begin
    cbInput.ItemIndex := ReadInteger('PianoEx', 'InputIndex', 0);
    if cbInput.ItemIndex <> 0 then
      cbOutputChange(cbInput);
    cbOutput.ItemIndex := ReadInteger('PianoEx', 'OutPutIndex', 0);
    if cbOutput.ItemIndex <> 0 then
      cbOutputChange(cbOutput);

    trbOctave.Position := ReadInteger('PianoEx', 'OctaveIndex', 3);
    if trbOctave.Position <> 3 then
      PianoKeyboard1.PianoOctave := trbOctave.Position;
    cbKeysGroupCount.ItemIndex := ReadInteger('PianoEx', 'CountIndex', 0);
    if cbKeysGroupCount.ItemIndex <> 0 then
      PianoKeyboard1.PianoGroup := StrToInt(cbKeysGroupCount.Text);
    cbbColor.ItemIndex := ReadInteger('PianoEx', 'ColorIndex', 0);
    if cbbColor.ItemIndex <> 0 then
      PianoKeyboard1.PianoColor := TPianoColor(cbbColor.ItemIndex);

    MidiFileName := ReadString('PianoEx', 'LastFile', '');
    if (MidiFileName <> '') and (FileExists(MidiFileName)) then
      OpenMidiFile(MidiFileName);

    Free;
  end;
end;

procedure TfrmMain.MidiOpen;
begin
  if cbInput.Text <> '' then
  begin
    MidiInput1.ProductName := cbInput.Text;
    MidiInput1.Open;
    MidiInput1.Start;
  end;
  if cbOutput.Text <> '' then
  begin
    MidiOutput1.ProductName := cbOutput.Text;
    MidiOpened := MidiOutput1.Open;
    if not MidiOpened then
      ShowMessage(rsErrorOpenMidi);
  end;
end;

procedure TfrmMain.MidiClose;
begin
  if MidiOpened then
  begin
    MidiOutput1.Close;
    MidiOpened := False;
  end;
  MidiInput1.Close;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  DragAcceptFiles(Handle, True); // Enable dragfile
  // Find Midi Input/Output
  InitMidiIO;
  // Open Midi Device
  MidiOpen;
  // Set Midi Volume
  trbVolume.Max := CMaxVolume div CStepVolume;
  trbVolume.Position := trbVolume.Max - MidiOutput1.MidiVolume div CStepVolume;
  // IniFile
  LoadIniFile;
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  MidiClose;
  // IniFile
  SaveIniFile;
end;

procedure TfrmMain.SentAllNotesOff;
var
  mEvent: TMyMidiEvent;
  iChannel: Integer;
begin
  mEvent := TMyMidiEvent.Create;
  for iChannel := 0 to 15 do
  begin
    mEvent.MidiMessage := $B0 + iChannel;
    mEvent.data1 := $7E;
    mEvent.data2 := 0;
    if MidiOpened then
      MidiOutput1.PutMidiEvent(mEvent);
    PianoKeyboard1.DoMidiEvent(mEvent.MidiMessage, mEvent.data1, mEvent.data2, TPianoColor(cbbColor.ItemIndex));
  end;
  mEvent.Destroy;
  // Reset controls
end;

function TfrmMain.GetTrackColor(pEvent: PMidiEvent): TPianoColor;
var
  iTrack: Byte;
begin
  Result := TPianoColor(-1);
  if pEvent^.iEvent = $FF then Exit;
  iTrack := pEvent.iTrack - 1;
  case PianoTracks1.GetTrackHand(iTrack) of
    thUnknow: Result := TPianoColor(cbbColor.ItemIndex);
    thLeft: Result := pcBlue;
    thRight: Result := pcRed;
  end;
end;

procedure TfrmMain.MidiPlayer1MidiEvent(Event: PMidiEvent);
var
  mEvent: TMyMidiEvent;
begin
  if not (Event^.iEvent = $FF) then
  begin
    mEvent := TMyMidiEvent.Create;
    mEvent.MidiMessage := Event^.iEvent;
    mEvent.data1 := Event^.iData1;
    mEvent.data2 := Event^.iData2;
    MidiOutput1.PutMidiEvent(mEvent);
    PianoChannels1.DoChannelBar(mEvent.MidiMessage and $F, mEvent.Data1);
    mEvent.Destroy;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲图片欧美色图| 99久久精品免费看| 97se亚洲国产综合自在线不卡| 欧美日韩一区二区在线观看视频 | 国产精品久线在线观看| 午夜私人影院久久久久| 96av麻豆蜜桃一区二区| 久久久久97国产精华液好用吗| 天天色天天操综合| 95精品视频在线| 亚洲国产精品99久久久久久久久| 日本不卡一区二区三区 | 爽好久久久欧美精品| 亚洲在线观看免费| 精品一区二区三区免费播放| 99精品视频在线播放观看| 欧美三级电影一区| 久久精品在线观看| 亚洲色图都市小说| 日本va欧美va欧美va精品| 国产成人亚洲精品狼色在线| 91蜜桃婷婷狠狠久久综合9色| 51精品久久久久久久蜜臀| 一色桃子久久精品亚洲| 另类综合日韩欧美亚洲| 在线亚洲一区观看| 国产片一区二区| 久久国产人妖系列| 欧美美女黄视频| 亚洲摸摸操操av| 丁香激情综合五月| 欧美成人乱码一区二区三区| 亚洲国产视频直播| 91丨porny丨蝌蚪视频| 久久综合999| 日本91福利区| 日韩一区二区不卡| 五月婷婷激情综合网| 一本一本久久a久久精品综合麻豆| 精品国产成人在线影院| 日本中文在线一区| 这里只有精品视频在线观看| 亚洲人吸女人奶水| fc2成人免费人成在线观看播放| 欧美一级日韩免费不卡| 亚洲另类中文字| 日本乱码高清不卡字幕| 国产色综合一区| 国产精品一区二区在线观看不卡| 欧美α欧美αv大片| 久久成人18免费观看| 91精选在线观看| 美女精品一区二区| 欧美大片一区二区| 青娱乐精品视频| 欧美一区二区网站| 国产99久久久精品| 欧美国产一区视频在线观看| 图片区日韩欧美亚洲| 欧美精品亚洲一区二区在线播放| 日韩不卡一二三区| 日韩午夜在线播放| 国产一区久久久| 国产亚洲人成网站| 99久久国产综合精品女不卡| 亚洲乱码国产乱码精品精98午夜| 欧美亚洲高清一区二区三区不卡| 亚洲夂夂婷婷色拍ww47 | 日韩你懂的电影在线观看| 日韩在线卡一卡二| 精品日韩欧美在线| 丁香网亚洲国际| 亚洲欧美国产77777| 欧美日韩免费一区二区三区| 午夜天堂影视香蕉久久| 日韩精品中午字幕| 99久久婷婷国产综合精品| 一区二区三区精品视频| 欧美一区二区三区视频免费播放| 国内精品伊人久久久久av一坑| 亚洲国产精品传媒在线观看| 欧美亚洲日本国产| 国产美女精品在线| 一区二区三区四区乱视频| 一本到不卡免费一区二区| 午夜久久久久久电影| 久久午夜色播影院免费高清| 国产激情视频一区二区在线观看| 中文子幕无线码一区tr| 欧美午夜精品理论片a级按摩| 蜜桃av噜噜一区| 成人免费视频在线观看| 91精品国产黑色紧身裤美女| 成人午夜视频福利| 丝袜美腿亚洲综合| 1区2区3区欧美| 精品国产自在久精品国产| 色婷婷av一区二区三区gif| 老鸭窝一区二区久久精品| 亚洲精品乱码久久久久久黑人| 日韩欧美一二区| 欧美影院精品一区| 成人免费黄色在线| 久久99精品国产麻豆不卡| 夜夜嗨av一区二区三区中文字幕 | 欧美人妇做爰xxxⅹ性高电影| 国产精品99久久久久久久女警 | 国产精品色噜噜| 欧美性猛交xxxxxxxx| 久久精品国产色蜜蜜麻豆| 午夜精品123| 最新成人av在线| 久久综合色天天久久综合图片| 欧美日韩精品一区二区三区蜜桃 | 麻豆精品国产传媒mv男同| 一区二区三区四区av| 中文字幕va一区二区三区| 日韩精品一区二区在线| 欧美午夜精品久久久久久孕妇| 国内成+人亚洲+欧美+综合在线| 亚洲欧洲www| 中文字幕日韩av资源站| 久久综合色8888| 精品免费99久久| 欧美一区二区三区在线观看 | 欧美r级在线观看| 日韩欧美国产高清| 91在线观看高清| 成人丝袜高跟foot| 丁香桃色午夜亚洲一区二区三区 | 成人a级免费电影| 国产精品123| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 国产一区二区调教| 精品在线一区二区| 午夜精品久久久久影视| 悠悠色在线精品| 久久久无码精品亚洲日韩按摩| 久久你懂得1024| 久久久综合视频| 精品国产髙清在线看国产毛片| 欧美日韩高清不卡| 制服视频三区第一页精品| 欧美日韩一区二区欧美激情| 欧美日韩综合一区| 91精品国产综合久久精品图片| 日韩一区国产二区欧美三区| 欧美mv和日韩mv的网站| 一区二区免费视频| 五月天中文字幕一区二区| 美国毛片一区二区三区| 国产福利一区二区三区视频在线 | 肉肉av福利一精品导航| 日韩电影在线看| 欧美aaaaaa午夜精品| 青青青爽久久午夜综合久久午夜 | 国产欧美精品一区二区色综合| 国产日韩欧美一区二区三区乱码 | xfplay精品久久| 国产精品久久久久永久免费观看| 国产精品白丝在线| 亚洲成av人片在线观看无码| 日韩国产欧美视频| 国产精品中文字幕日韩精品| 成人97人人超碰人人99| 4438x亚洲最大成人网| 国产日韩欧美精品在线| 夜夜操天天操亚洲| 久久99热国产| 99久久夜色精品国产网站| 成人av中文字幕| 欧美一级理论片| 中文字幕在线不卡一区| 视频一区免费在线观看| 懂色av一区二区三区免费看| 欧美在线一区二区| 久久久亚洲精华液精华液精华液| 综合网在线视频| 国内精品写真在线观看| 色综合久久久久久久久久久| 69p69国产精品| 中日韩免费视频中文字幕| 亚洲成人一区二区| 丁香五精品蜜臀久久久久99网站| 欧美日韩一区高清| 国产精品久久久久久久久免费丝袜 | 国产一区二区三区在线观看免费| 91亚洲精品久久久蜜桃网站| 日韩一区二区免费在线电影| 亚洲三级在线免费| 国产精品一区二区久久不卡| 国产成人亚洲综合色影视| 色老头久久综合| 色综合夜色一区| 天堂蜜桃91精品| 色综合久久久久综合99| 国产亚洲成av人在线观看导航| 日韩国产欧美在线播放| 91福利小视频| 亚洲美女免费在线|