OSDN Git Service

4c9ca5fe214c791fca71ec10ea161bdbd002b15a
[dtxmania/dtxmania.git] / DTXCreatorプロジェクト / コード / 05.譜面 / C譜面管理.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Diagnostics;\r
5 using System.Drawing;\r
6 using System.Drawing.Drawing2D;\r
7 using System.Windows.Forms;\r
8 using DTXCreator.UndoRedo;\r
9 using FDK;\r
10 \r
11 namespace DTXCreator.譜面\r
12 {\r
13         internal class C譜面管理\r
14         {\r
15                 public Bitmap bmp背景画像;\r
16                 public Dictionary<int, float> dicBPx = new Dictionary<int, float>();\r
17                 public Dictionary<int, C小節> dic小節 = new Dictionary<int, C小節>();\r
18                 public List<Cレーン> listレーン = new List<Cレーン>();\r
19                 public static readonly int nレーン割付チップ番号表示高さdot = 10;\r
20                 public static readonly int nレーン番号表示高さdot = 0x20;\r
21                 public int n現在のガイド幅grid = ( C小節.n基準の高さgrid / 0x10 );\r
22                 public int n現在の譜面表示下辺の譜面先頭からの位置grid;\r
23                 public string strPATH_WAV = "";\r
24 \r
25                 public C譜面管理( Cメインフォーム cm )\r
26                 {\r
27                         this._Form = cm;\r
28                 }\r
29                 public bool bOPENチップである( Cチップ cc )\r
30                 {\r
31                         Cレーン cレーン = this.listレーン[ cc.nレーン番号0to ];\r
32                         return ( ( cc.n値・整数1to1295 == 2 ) && ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) ) );\r
33                 }\r
34                 public bool b確定選択中のチップがある()\r
35                 {\r
36                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
37                         {\r
38                                 foreach( Cチップ cチップ in pair.Value.listチップ )\r
39                                 {\r
40                                         if( cチップ.b確定選択中 || cチップ.bドラッグで選択中 )\r
41                                         {\r
42                                                 return true;\r
43                                         }\r
44                                 }\r
45                         }\r
46                         return false;\r
47                 }\r
48                 public decimal dc譜面先頭からの位置gridにおけるBPMを返す( int n譜面先頭からの位置grid )\r
49                 {\r
50                         decimal num = this._Form.dc現在のBPM;\r
51                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
52                         if( c小節 != null )\r
53                         {\r
54                                 for( int i = 0; i <= c小節.n小節番号0to3599; i++ )\r
55                                 {\r
56                                         C小節 c小節2 = this.p小節を返す( i );\r
57                                         if( c小節2 != null )\r
58                                         {\r
59                                                 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( i );\r
60                                                 foreach( Cチップ cチップ in c小節2.listチップ )\r
61                                                 {\r
62                                                         if( ( cチップ.nチャンネル番号00toFF == 8 ) && ( ( num3 + cチップ.n位置grid ) <= n譜面先頭からの位置grid ) )\r
63                                                         {\r
64                                                                 num = (decimal) cチップ.f値・浮動小数;\r
65                                                         }\r
66                                                 }\r
67                                         }\r
68                                 }\r
69                         }\r
70                         return num;\r
71                 }\r
72                 public int nX座標dotが位置するレーン番号を返す( int nXdot )\r
73                 {\r
74                         if( nXdot >= 0 )\r
75                         {\r
76                                 int num = 0;\r
77                                 int num2 = 0;\r
78                                 foreach( Cレーン cレーン in this.listレーン )\r
79                                 {\r
80                                         num += cレーン.n幅dot;\r
81                                         if( nXdot < num )\r
82                                         {\r
83                                                 return num2;\r
84                                         }\r
85                                         num2++;\r
86                                 }\r
87                         }\r
88                         return -1;\r
89                 }\r
90                 public int nY座標dotが位置するgridを返す・ガイド幅単位( int nY )\r
91                 {\r
92                         int num = this.nY座標dotが位置するgridを返す・最高解像度( nY );\r
93                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num );\r
94                         if( c小節 == null )\r
95                         {\r
96                                 c小節 = this.p小節を返す( this.n現在の最大の小節番号を返す() );\r
97                         }\r
98                         int num2 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
99                         int num3 = ( ( num - num2 ) / this.n現在のガイド幅grid ) * this.n現在のガイド幅grid;\r
100                         return ( num2 + num3 );\r
101                 }\r
102                 public int nY座標dotが位置するgridを返す・最高解像度( int nY )\r
103                 {\r
104                         int num = this._Form.pictureBox譜面パネル.ClientSize.Height - nY;\r
105                         return ( ( num / C小節.n1グリッドの高さdot ) + this.n現在の譜面表示下辺の譜面先頭からの位置grid );\r
106                 }\r
107                 public int nレーンの左端X座標dotを返す( int nレーン番号0to )\r
108                 {\r
109                         if( ( nレーン番号0to >= 0 ) && ( nレーン番号0to < this.listレーン.Count ) )\r
110                         {\r
111                                 return this.listレーン[ nレーン番号0to ].n位置Xdot;\r
112                         }\r
113                         return -1;\r
114                 }\r
115                 public int nレーン名に対応するレーン番号を返す( string strレーン名 )\r
116                 {\r
117                         int nLaneNo = 0;\r
118                         foreach( Cレーン cレーン in this.listレーン )\r
119                         {\r
120                                 if( cレーン.strレーン名.Equals( strレーン名 ) )\r
121                                 {\r
122                                         return nLaneNo;\r
123                                 }\r
124                                 nLaneNo++;\r
125                         }\r
126                         return -1;\r
127                 }\r
128                 public int n現在の最大の小節番号を返す()\r
129                 {\r
130                         int nBar = -1;\r
131                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
132                         {\r
133                                 C小節 c小節 = pair.Value;\r
134                                 if( c小節.n小節番号0to3599 > nBar )\r
135                                 {\r
136                                         nBar = c小節.n小節番号0to3599;\r
137                                 }\r
138                         }\r
139                         return nBar;\r
140                 }\r
141                 public int n全小節の高さdotの合計を返す()\r
142                 {\r
143                         int nHeights = 0;\r
144                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
145                         {\r
146                                 nHeights += pair.Value.n小節長倍率を考慮した現在の小節の高さdot;\r
147                         }\r
148                         return nHeights;\r
149                 }\r
150                 public int n全小節の高さgridの合計を返す()\r
151                 {\r
152                         int num = 0;\r
153                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
154                         {\r
155                                 num += pair.Value.n小節長倍率を考慮した現在の小節の高さgrid;\r
156                         }\r
157                         return num;\r
158                 }\r
159                 public int n譜面先頭からの位置gridから描画領域内のY座標dotを返す( int n譜面先頭からの位置grid, Size sz描画領域dot )\r
160                 {\r
161                         int num = n譜面先頭からの位置grid - this.n現在の譜面表示下辺の譜面先頭からの位置grid;\r
162                         return ( sz描画領域dot.Height - ( num * C小節.n1グリッドの高さdot ) );\r
163                 }\r
164                 public int n譜面先頭からみた小節先頭の位置gridを返す( int n小節番号0to3599 )\r
165                 {\r
166                         if( ( n小節番号0to3599 < 0 ) || ( n小節番号0to3599 > this.n現在の最大の小節番号を返す() ) )\r
167                         {\r
168                                 return -1;\r
169                         }\r
170                         int num = 0;\r
171                         for( int i = 0; i < n小節番号0to3599; i++ )\r
172                         {\r
173                                 C小節 c小節 = this.p小節を返す( i );\r
174                                 if( c小節 != null )\r
175                                 {\r
176                                         num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
177                                 }\r
178                         }\r
179                         return num;\r
180                 }\r
181                 public C小節 pチップの存在する小節を返す( Cチップ cc )\r
182                 {\r
183                         foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
184                         {\r
185                                 C小節 c小節 = pair.Value;\r
186                                 if( c小節.listチップ.Contains( cc ) )\r
187                                 {\r
188                                         return c小節;\r
189                                 }\r
190                         }\r
191                         return null;\r
192                 }\r
193                 public Cチップ p指定された座標dotにあるチップを返す( int x, int y )\r
194                 {\r
195                         int num = this.nX座標dotが位置するレーン番号を返す( x );\r
196                         if( num >= 0 )\r
197                         {\r
198                                 int num2 = this.nY座標dotが位置するgridを返す・最高解像度( y );\r
199                                 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num2 );\r
200                                 if( c小節 == null )\r
201                                 {\r
202                                         return null;\r
203                                 }\r
204                                 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
205                                 foreach( Cチップ cチップ in c小節.listチップ )\r
206                                 {\r
207                                         int num4 = num3 + cチップ.n位置grid;\r
208                                         int num5 = C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );\r
209                                         if( ( ( cチップ.nレーン番号0to == num ) && ( num4 <= num2 ) ) && ( num2 <= ( num4 + num5 ) ) )\r
210                                         {\r
211                                                 return cチップ;\r
212                                         }\r
213                                 }\r
214                         }\r
215                         return null;\r
216                 }\r
217                 public Cチップ p指定位置にあるチップを返す( int n小節番号0to, int nレーン番号0to, int n小節内の位置grid )\r
218                 {\r
219                         C小節 c小節 = this.p小節を返す( n小節番号0to );\r
220                         if( c小節 != null )\r
221                         {\r
222                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
223                                 {\r
224                                         Cチップ cチップ = c小節.listチップ[ i ];\r
225                                         if( ( cチップ.n位置grid == n小節内の位置grid ) && ( cチップ.nレーン番号0to == nレーン番号0to ) )\r
226                                         {\r
227                                                 return cチップ;\r
228                                         }\r
229                                 }\r
230                         }\r
231                         return null;\r
232                 }\r
233                 public C小節 p小節を返す( int n小節番号0to3599 )\r
234                 {\r
235                         C小節 c小節 = null;\r
236                         if( this.dic小節.TryGetValue( n小節番号0to3599, out c小節 ) )\r
237                         {\r
238                                 return c小節;\r
239                         }\r
240                         return null;\r
241                 }\r
242                 public C小節 p譜面先頭からの位置gridを含む小節を返す( int n譜面先頭からの位置grid )\r
243                 {\r
244                         int num = 0;\r
245                         int num2 = this.n現在の最大の小節番号を返す();\r
246                         for( int i = 0; i <= num2; i++ )\r
247                         {\r
248                                 C小節 c小節 = this.p小節を返す( i );\r
249                                 if( c小節 != null )\r
250                                 {\r
251                                         num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
252                                         if( n譜面先頭からの位置grid < num )\r
253                                         {\r
254                                                 return c小節;\r
255                                         }\r
256                                 }\r
257                         }\r
258                         return null;\r
259                 }\r
260                 public void tチップを削除する( int nレーン番号0to, int n譜面先頭からの位置grid )\r
261                 {\r
262                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
263                         if( c小節 != null )\r
264                         {\r
265                                 bool b削除完了;\r
266                                 int num = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
267                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
268                                 int laneBEAT = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BEAT" );\r
269                                 do\r
270                                 {\r
271                                         Cレーン cレーン = this.listレーン[ nレーン番号0to ];\r
272                                         bool bRGBGuitar = ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB );\r
273                                         bool bRGBBass = ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB );\r
274                                         b削除完了 = true;\r
275                                         foreach( Cチップ cチップ in c小節.listチップ )\r
276                                         {\r
277                                                 if( cチップ.n位置grid == num )\r
278                                                 {\r
279                                                         //cチップ.nチャンネル番号00toFF = 0xF3;                       // 裏チップにする (表は0xF8)\r
280                                                         //cチップ.b裏 = true;\r
281                                                         if( cチップ.nレーン番号0to == nレーン番号0to )\r
282                                                         {\r
283                                                                 Cチップ cc = new Cチップ();\r
284                                                                 cc.tコピーfrom( cチップ );\r
285                                                                 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
286                                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo, redo ) );\r
287 \r
288                                                                 #region [ チップオブジェクトを削除する。ただしBEATオブジェクトは削除禁止。裏に回すだけ。]\r
289                                                                 if ( cチップ.nレーン番号0to != laneBEAT )\r
290                                                                 {\r
291                                                                         c小節.listチップ.Remove( cチップ );\r
292                                                                         b削除完了 = false;\r
293                                                                 }\r
294                                                                 else\r
295                                                                 {\r
296                                                                         int p = c小節.listチップ.IndexOf( cチップ );\r
297                                                                         cチップ.nチャンネル番号00toFF = (cチップ.b裏)? 0xF3 : 0xF8;               // 表裏反転\r
298                                                                         cチップ.b裏 = !cチップ.b裏;\r
299                                                                         c小節.listチップ[ p ] = cチップ;\r
300                                                                 }\r
301                                                                 this._Form.b未保存 = true;\r
302                                                                 #endregion\r
303 \r
304                                                                 break;\r
305                                                         }\r
306                                                         if( ( bRGBGuitar && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )\r
307                                                         {\r
308                                                                 Cチップ cチップ3 = new Cチップ();\r
309                                                                 cチップ3.tコピーfrom( cチップ );\r
310                                                                 Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ3 );\r
311                                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo2, redo2 ) );\r
312                                                                 c小節.listチップ.Remove( cチップ );\r
313                                                                 b削除完了 = false;\r
314                                                                 this._Form.b未保存 = true;\r
315                                                                 break;\r
316                                                         }\r
317                                                         if( ( bRGBBass && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )\r
318                                                         {\r
319                                                                 Cチップ cチップ4 = new Cチップ();\r
320                                                                 cチップ4.tコピーfrom( cチップ );\r
321                                                                 Cチップ配置用UndoRedo redo3 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ4 );\r
322                                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo3, redo3 ) );\r
323                                                                 c小節.listチップ.Remove( cチップ );\r
324                                                                 b削除完了 = false;\r
325                                                                 this._Form.b未保存 = true;\r
326                                                                 break;\r
327                                                         }\r
328                                                 }\r
329                                         }\r
330                                 }\r
331                                 while( !b削除完了 );\r
332                                 this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
333                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
334                         }\r
335                 }\r
336                 public void tチップを配置または置換する( int nレーン番号0to, int n譜面先頭からの位置grid, int nチップ値・整数, float fチップ値・浮動小数, bool b裏として配置 )\r
337                 {\r
338                         C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
339                         if( c小節 != null )\r
340                         {\r
341                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
342                                 this.tチップを削除する( nレーン番号0to, n譜面先頭からの位置grid );\r
343                                 if( ( ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) || ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( nチップ値・整数 == 2 ) )\r
344                                 {\r
345                                         this.tチップを削除する( nレーン番号0to + 1, n譜面先頭からの位置grid );\r
346                                         this.tチップを削除する( nレーン番号0to + 2, n譜面先頭からの位置grid );\r
347                                 }\r
348                                 Cレーン cレーン = this.listレーン[ nレーン番号0to ];\r
349                                 Cチップ item = new Cチップ();\r
350                                 item.nチャンネル番号00toFF = b裏として配置 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF;\r
351                                 item.nレーン番号0to = nレーン番号0to;\r
352                                 item.n位置grid = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
353                                 item.n値・整数1to1295 = nチップ値・整数;\r
354                                 item.f値・浮動小数 = fチップ値・浮動小数;\r
355                                 item.b裏 = b裏として配置;\r
356                                 c小節.listチップ.Add( item );\r
357                                 Cチップ cc = new Cチップ();\r
358                                 cc.tコピーfrom( item );\r
359                                 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
360                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のRedo ), redo, redo ) );\r
361                                 int num = this.n現在の最大の小節番号を返す();\r
362                                 if( c小節.n小節番号0to3599 == num )\r
363                                 {\r
364                                         for( int i = num + 1; i <= ( num + 4 ); i++ )\r
365                                         {\r
366                                                 this.dic小節.Add( i, new C小節( i ) );\r
367                                                 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t小節挿入のUndo ), new DGRedoを実行する<int>( this.t小節挿入のRedo ), i, i ) );\r
368                                         }\r
369                                 }\r
370                                 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
371                                 this._Form.tUndoRedo用GUIの有効・無効を設定する();\r
372                                 this._Form.b未保存 = true;\r
373                         }\r
374                 }\r
375                 public void tチップ削除のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
376                 {\r
377                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
378                         if( c小節 != null )\r
379                         {\r
380                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
381                                 {\r
382                                         Cチップ cチップ = c小節.listチップ[ i ];\r
383                                         if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )\r
384                                         {\r
385                                                 c小節.listチップ.RemoveAt( i );\r
386                                                 this._Form.b未保存 = true;\r
387                                                 return;\r
388                                         }\r
389                                 }\r
390                         }\r
391                 }\r
392                 public void tチップ削除のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
393                 {\r
394                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
395                         if( c小節 != null )\r
396                         {\r
397                                 Cチップ item = new Cチップ();\r
398                                 item.tコピーfrom( ur変更前.cc );\r
399                                 c小節.listチップ.Add( item );\r
400                                 this._Form.b未保存 = true;\r
401                         }\r
402                 }\r
403                 public void tチップ選択のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
404                 {\r
405                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
406                         if( cチップ != null )\r
407                         {\r
408                                 cチップ.b確定選択中 = true;\r
409                         }\r
410                 }\r
411                 public void tチップ選択のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
412                 {\r
413                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
414                         if( cチップ != null )\r
415                         {\r
416                                 cチップ.b確定選択中 = false;\r
417                         }\r
418                 }\r
419                 public void tチップ選択解除のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
420                 {\r
421                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
422                         if( cチップ != null )\r
423                         {\r
424                                 cチップ.b確定選択中 = false;\r
425                         }\r
426                 }\r
427                 public void tチップ選択解除のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
428                 {\r
429                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
430                         if( cチップ != null )\r
431                         {\r
432                                 cチップ.b確定選択中 = true;\r
433                         }\r
434                 }\r
435                 public void tチップ配置のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
436                 {\r
437                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
438                         if( c小節 != null )\r
439                         {\r
440                                 Cチップ item = new Cチップ();\r
441                                 item.tコピーfrom( ur変更前.cc );\r
442                                 c小節.listチップ.Add( item );\r
443                                 this._Form.b未保存 = true;\r
444                         }\r
445                 }\r
446                 public void tチップ配置のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
447                 {\r
448                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
449                         if( c小節 != null )\r
450                         {\r
451                                 for( int i = 0; i < c小節.listチップ.Count; i++ )\r
452                                 {\r
453                                         Cチップ cチップ = c小節.listチップ[ i ];\r
454                                         if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )\r
455                                         {\r
456                                                 c小節.listチップ.RemoveAt( i );\r
457                                                 this._Form.b未保存 = true;\r
458                                                 return;\r
459                                         }\r
460                                 }\r
461                         }\r
462                 }\r
463                 public void tチップ番号置換のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
464                 {\r
465                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
466                         if( cチップ != null )\r
467                         {\r
468                                 cチップ.n値・整数1to1295 = ur変更後.n値・整数1to1295;\r
469                                 this._Form.b未保存 = true;\r
470                         }\r
471                 }\r
472                 public void tチップ番号置換のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
473                 {\r
474                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更後.n小節番号0to, ur変更後.nレーン番号0to, ur変更後.n位置grid );\r
475                         if( cチップ != null )\r
476                         {\r
477                                 cチップ.n値・整数1to1295 = ur変更前.n値・整数1to1295;\r
478                                 this._Form.b未保存 = true;\r
479                         }\r
480                 }\r
481                 public void tチップ表裏反転のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
482                 {\r
483                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
484                         if( cチップ != null )\r
485                         {\r
486                                 if( cチップ.b裏 )\r
487                                 {\r
488                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;\r
489                                         cチップ.b裏 = false;\r
490                                 }\r
491                                 else\r
492                                 {\r
493                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;\r
494                                         cチップ.b裏 = true;\r
495                                 }\r
496                                 this._Form.b未保存 = true;\r
497                         }\r
498                 }\r
499                 public void tチップ表裏反転のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
500                 {\r
501                         Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
502                         if( cチップ != null )\r
503                         {\r
504                                 if( cチップ.b裏 )\r
505                                 {\r
506                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;\r
507                                         cチップ.b裏 = false;\r
508                                 }\r
509                                 else\r
510                                 {\r
511                                         cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;\r
512                                         cチップ.b裏 = true;\r
513                                 }\r
514                                 this._Form.b未保存 = true;\r
515                         }\r
516                 }\r
517                 public void t初期化()\r
518                 {\r
519                         this.t初期化・listレーンの生成();\r
520                         this.t初期化・小節を10個まで作成する();\r
521                         this.t初期化・背景画像を生成する();\r
522                         this.t初期化・スクロールバーを初期設定する();\r
523                 }\r
524                 public void t小節削除のRedo( int nダミー, int n削除する小節番号0to )\r
525                 {\r
526                         this.dic小節.Remove( n削除する小節番号0to );\r
527                         int num = this.n現在の最大の小節番号を返す();\r
528                         for( int i = n削除する小節番号0to + 1; i <= num; i++ )\r
529                         {\r
530                                 C小節 c小節 = this.p小節を返す( i );\r
531                                 if( c小節 != null )\r
532                                 {\r
533                                         this.dic小節.Remove( i );\r
534                                         c小節.n小節番号0to3599 = i - 1;\r
535                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
536                                 }\r
537                         }\r
538                         this._Form.b未保存 = true;\r
539                 }\r
540                 public void t小節削除のUndo( int n削除された小節番号0to, int nダミー )\r
541                 {\r
542                         for( int i = this.n現在の最大の小節番号を返す(); i >= n削除された小節番号0to; i-- )\r
543                         {\r
544                                 C小節 c小節 = this.p小節を返す( i );\r
545                                 if( c小節 != null )\r
546                                 {\r
547                                         this.dic小節.Remove( i );\r
548                                         c小節.n小節番号0to3599 = i + 1;\r
549                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
550                                 }\r
551                         }\r
552                         this.dic小節.Add( n削除された小節番号0to, new C小節( n削除された小節番号0to ) );\r
553                         this._Form.b未保存 = true;\r
554                 }\r
555                 public void t小節挿入のRedo( int nダミー, int n挿入する小節番号0to )\r
556                 {\r
557                         for( int i = this.n現在の最大の小節番号を返す(); i >= n挿入する小節番号0to; i-- )\r
558                         {\r
559                                 C小節 c小節 = this.p小節を返す( i );\r
560                                 if( c小節 != null )\r
561                                 {\r
562                                         this.dic小節.Remove( i );\r
563                                         c小節.n小節番号0to3599 = i + 1;\r
564                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
565                                 }\r
566                         }\r
567                         this.dic小節.Add( n挿入する小節番号0to, new C小節( n挿入する小節番号0to ) );\r
568                         this._Form.b未保存 = true;\r
569                 }\r
570                 public void t小節挿入のUndo( int n挿入された小節番号0to, int nダミー )\r
571                 {\r
572                         this.dic小節.Remove( n挿入された小節番号0to );\r
573                         int num = this.n現在の最大の小節番号を返す();\r
574                         for( int i = n挿入された小節番号0to + 1; i <= num; i++ )\r
575                         {\r
576                                 C小節 c小節 = this.p小節を返す( i );\r
577                                 if( c小節 != null )\r
578                                 {\r
579                                         this.dic小節.Remove( i );\r
580                                         c小節.n小節番号0to3599 = i - 1;\r
581                                         this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
582                                 }\r
583                         }\r
584                         this._Form.b未保存 = true;\r
585                 }\r
586                 public void t小節長変更のRedo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )\r
587                 {\r
588                         C小節 c小節 = this.p小節を返す( ur変更後.n小節番号0to );\r
589                         if( c小節 != null )\r
590                         {\r
591                                 c小節.f小節長倍率 = ur変更後.f倍率;\r
592                                 this._Form.b未保存 = true;\r
593                         }\r
594                 }\r
595                 public void t小節長変更のUndo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )\r
596                 {\r
597                         C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
598                         if( c小節 != null )\r
599                         {\r
600                                 c小節.f小節長倍率 = ur変更前.f倍率;\r
601                                 this._Form.b未保存 = true;\r
602                         }\r
603                 }\r
604                 public void t垂直スクロールバーと譜面可視領域の上下位置の調整()\r
605                 {\r
606                         VScrollBar bar = this._Form.vScrollBar譜面用垂直スクロールバー;\r
607                         PictureBox box = this._Form.pictureBox譜面パネル;\r
608                         bar.Minimum = 0;\r
609                         bar.Maximum = this.n全小節の高さgridの合計を返す() - 1;\r
610                         bar.SmallChange = C小節.n基準の高さgrid / 0x10;\r
611                         bar.LargeChange = C小節.n基準の高さgrid;\r
612                         bar.Enabled = bar.Maximum > bar.LargeChange;\r
613                         if( bar.Enabled )\r
614                         {\r
615                                 this.n現在の譜面表示下辺の譜面先頭からの位置grid = ( ( bar.Maximum + 1 ) - bar.LargeChange ) - bar.Value;\r
616                                 box.Refresh();\r
617                         }\r
618                 }\r
619                 public void t水平スクロールバーと譜面パネル左右位置の調整()\r
620                 {\r
621                         HScrollBar bar = this._Form.hScrollBar譜面用水平スクロールバー;\r
622                         SplitContainer container = this._Form.splitContainerタブと譜面を分割;\r
623                         PictureBox box = this._Form.pictureBox譜面パネル;\r
624                         bar.Minimum = 0;\r
625                         bar.Maximum = box.Width - 1;\r
626                         bar.SmallChange = 5;\r
627                         bar.LargeChange = container.Panel2.Width;\r
628                         bar.Enabled = bar.Maximum > bar.LargeChange;\r
629                         if( bar.Enabled )\r
630                         {\r
631                                 int num = bar.Value;\r
632                                 if( ( num + bar.LargeChange ) > bar.Maximum )\r
633                                 {\r
634                                         num = ( bar.Maximum - bar.LargeChange ) + 1;\r
635                                 }\r
636                                 bar.Value = num;\r
637                                 box.Location = new Point( -num, 0 );\r
638                                 box.Refresh();\r
639                         }\r
640                 }\r
641                 public void t譜面を描画する( Graphics g, Size sz描画対象サイズdot, Rectangle rc可視領域dot )\r
642                 {\r
643                         this.strfmt小節番号文字フォーマット.LineAlignment = StringAlignment.Center;\r
644                         this.strfmt小節番号文字フォーマット.Alignment = StringAlignment.Center;\r
645                         this.strfmtレーン名文字フォーマット.LineAlignment = StringAlignment.Near;\r
646                         this.strfmtレーン名文字フォーマット.Alignment = StringAlignment.Center;\r
647                         this.strfmtレーン割付チップ番号文字フォーマット.LineAlignment = StringAlignment.Near;\r
648                         this.strfmtレーン割付チップ番号文字フォーマット.Alignment = StringAlignment.Near;\r
649                         int h = 0;\r
650                         int num2 = 0;\r
651                         int num3 = this.n現在の譜面表示下辺の譜面先頭からの位置grid * C小節.n1グリッドの高さdot;\r
652                         int num4 = num3 + rc可視領域dot.Height;\r
653                         int maxBar = this.n現在の最大の小節番号を返す();\r
654                         int bar = 0;\r
655                         while( bar <= maxBar )\r
656                         {\r
657                                 C小節 cs = this.p小節を返す( bar );\r
658                                 if( cs != null )\r
659                                 {\r
660                                         num2 = h + cs.n小節長倍率を考慮した現在の小節の高さdot;\r
661                                         if( h >= num4 )\r
662                                         {\r
663                                                 break;\r
664                                         }\r
665                                         if( num2 > num3 )\r
666                                         {\r
667                                                 Rectangle rectangle = new Rectangle( 0, sz描画対象サイズdot.Height - ( num2 - num3 ), sz描画対象サイズdot.Width, num2 - h );\r
668                                                 Rectangle rectangle2 = new Rectangle( rc可視領域dot.X, rectangle.Y, rc可視領域dot.Width, rectangle.Height );\r
669                                                 this.t譜面を描画する・1小節を描画する( g, cs, rectangle, rectangle2 );\r
670                                         }\r
671                                 }\r
672                                 bar++;\r
673                                 h = num2;\r
674                         }\r
675                         Rectangle rectangle3 = new Rectangle( 0, 0, sz描画対象サイズdot.Width, nレーン割付チップ番号表示高さdot );\r
676                         this.t譜面を描画する・レーン割付チップを描画する( g, rectangle3 );\r
677                         rectangle3 = new Rectangle( 0, 10, sz描画対象サイズdot.Width, nレーン番号表示高さdot );\r
678                         this.t譜面を描画する・レーン名を描画する( g, rectangle3 );\r
679                 }\r
680 \r
681                 /// <summary>\r
682                 /// 指定した種類のレーンを非表示にする\r
683                 /// </summary>\r
684                 /// <param name="eLaneType">非表示にするレーンの種類</param>\r
685                 public void tCollapseLanes( Cレーン.ELaneType eLaneType )\r
686                 {\r
687                         // なお、格納/展開状態を、#DTXV_COLLAPSED_LANES とかでDTXファイルに残した方がいいかも。\r
688                         int count = this.listレーン.Count;\r
689                         for ( int i = 0; i < this.listレーン.Count; i++ )\r
690                         {\r
691                                 Cレーン c = listレーン[ i ];\r
692                                 if ( c.eLaneType == eLaneType && c.bIsVisible == true ) // 対象レーンが見つかったら\r
693                                 {\r
694                                         this.listレーン[ i ].bIsVisible = false;\r
695                                         this.listレーン[ i ].n幅dot = 0;\r
696                                 }\r
697                         }\r
698                         this.tRefreshDisplayLanes();\r
699                 }\r
700                 /// <summary>\r
701                 /// 指定した種類のレーンを表示する\r
702                 /// </summary>\r
703                 /// <param name="eLaneType">表示にするレーンの種類</param>\r
704                 public void tExpandLanes( Cレーン.ELaneType eLaneType )\r
705                 {\r
706                         // tCollapseLanes()の反対の処理をする。\r
707 \r
708                         for ( int i = 0; i < this.listレーン.Count; i++ )                            // 以下本番\r
709                         {\r
710                                 Cレーン c = listレーン[ i ];\r
711                                 if ( c.eLaneType == eLaneType && c.bIsVisible == false )        // 対象レーンが見つかったら\r
712                                 {\r
713                                         this.listレーン[ i ].bIsVisible = true;\r
714                                         this.listレーン[ i ].n幅dot = Cレーン.LANEWIDTH;\r
715                                 }\r
716                         }\r
717                         this.tRefreshDisplayLanes();\r
718                 }\r
719 \r
720                 /// <summary>\r
721                 /// レーンの表示/非表示を反映する\r
722                 /// </summary>\r
723                 /// <param name="eLaneType">表示にするレーンの種類</param>\r
724                 public void tRefreshDisplayLanes()\r
725                 {\r
726                         this.tRecalc_n位置XdotX();                                                                                    // レーン位置が変わったので、レーン毎のX座標を再計算\r
727                         this.t初期化・背景画像を生成する();                                                                        // レーン数が変わったので、レーン画像を納める背景も再生成\r
728                         this.t水平スクロールバーと譜面パネル左右位置の調整();                             // レーン数が変わったので、スクロールバーの長さも再調整\r
729                 }\r
730 \r
731                 private void tRecalc_n位置XdotX()                                                                             // n位置Xdotの再計算\r
732                 {\r
733                         int x = 0;\r
734                         int count = this.listレーン.Count;\r
735                         for ( int i = 0; i < count; i++ )\r
736                         {\r
737                                 this.listレーン[ i ].n位置Xdot = x;\r
738                                 x += this.listレーン[ i ].n幅dot;\r
739                         }\r
740                 }\r
741 \r
742 \r
743                 #region [ private ]\r
744                 //-----------------\r
745                 private Cメインフォーム _Form;\r
746                 private Brush brレーン割付番号文字ブラシ = new SolidBrush( Color.White );\r
747                 private Brush brレーン割付番号文字ブラシ影 = new SolidBrush( Color.Black );\r
748                 private Brush brレーン名文字ブラシ = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) );\r
749                 private Brush brレーン名文字ブラシ影 = new SolidBrush( Color.Black );\r
750                 private Brush br小節番号文字ブラシ = new SolidBrush( Color.FromArgb( 80, 0xff, 0xff, 0xff ) );\r
751                 private Font ftレーン割付チップ番号文字フォント = new Font( "MS UI Gothic", 7f, FontStyle.Regular );\r
752                 private Font ftレーン番号文字フォント = new Font( "MS US Gothic", 8f, FontStyle.Regular );\r
753                 private Font ft小節番号文字フォント = new Font( "MS UI Gothic", 50f, FontStyle.Regular );\r
754                 private Pen penガイド線ペン = new Pen( Color.FromArgb( 50, 50, 50 ) );\r
755                 private Pen penレーン区分線ペン細 = new Pen( Color.Gray );\r
756                 private Pen penレーン区分線ペン太 = new Pen( Color.White, 2f );\r
757                 private Pen pen小節線ペン = new Pen( Color.White, 2f );\r
758                 private Pen pen拍線ペン = new Pen( Color.Gray );\r
759                 private StringFormat strfmtレーン割付チップ番号文字フォーマット = new StringFormat();\r
760                 private StringFormat strfmtレーン名文字フォーマット = new StringFormat();\r
761                 private StringFormat strfmt小節番号文字フォーマット = new StringFormat();\r
762 \r
763                 private void t初期化・listレーンの生成()\r
764                 {\r
765                         this.listレーン.Clear();\r
766                         int width = Cレーン.LANEWIDTH;\r
767                         int alpha = 0x19;\r
768 \r
769                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BPM, "BPM", 0x08, 0x03, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BPM, true ) );\r
770                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BEAT, "BEAT", 0xF8, 0xF3, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.Beat, false ) );\r
771 \r
772                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LC",  0x1a, 0x1a, true,  Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
773                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "HH",  0x11, 0x18, false, Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
774                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SD",  0x12, 0x12, false, Color.FromArgb( alpha, 0xff, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
775                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "BD",  0x13, 0x13, false, Color.FromArgb( alpha, 0xff, 0x7f, 0x7f ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
776                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "HT",  0x14, 0x14, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
777                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LT",  0x15, 0x15, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
778                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "FT",  0x17, 0x17, false, Color.FromArgb( alpha, 0xff, 0, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
779                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "CY",  0x16, 0x19, false, Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
780                         this.listレーン.Add( new Cレーン( Cレーン.E種別.FI,  "FI",  0x53, 0x53, true,  Color.FromArgb( alpha, 0xff, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
781 \r
782                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "BGM", 0x01, 0x01, true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGM, true ) );\r
783 \r
784                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE1", 0x61, 0x61, true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
785                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE2", 0x62, 0x62, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
786                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE3", 0x63, 0x63, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
787                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE4", 0x64, 0x64, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
788                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE5", 0x65, 0x65, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
789 \r
790                         // SE6~32は、初期状態では非表示とする。(n幅dotを0にし、bIsVisibleをfalseにする)\r
791                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE6", 0x66, 0x66, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
792                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE7", 0x67, 0x67, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
793                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE8", 0x68, 0x68, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
794                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE9", 0x69, 0x69, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
795                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S10", 0x70, 0x70, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
796                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S11", 0x71, 0x71, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
797                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S12", 0x72, 0x72, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
798                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S13", 0x73, 0x73, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
799                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S14", 0x74, 0x74, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
800                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S15", 0x75, 0x75, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
801                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S16", 0x76, 0x76, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
802                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S17", 0x77, 0x77, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
803                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S18", 0x78, 0x78, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
804                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S19", 0x79, 0x79, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
805                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S20", 0x80, 0x80, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
806                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S21", 0x81, 0x81, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
807                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S22", 0x82, 0x82, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
808                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S23", 0x83, 0x83, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
809                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S24", 0x84, 0x84, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
810                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S25", 0x85, 0x85, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
811                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S26", 0x86, 0x86, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
812                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S27", 0x87, 0x87, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
813                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S28", 0x88, 0x88, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
814                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S29", 0x89, 0x89, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
815                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S30", 0x90, 0x90, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
816                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S31", 0x91, 0x91, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
817                         this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S32", 0x92, 0x92, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
818 \r
819                         this.listレーン.Add( new Cレーン( Cレーン.E種別.GtV, "GtV", 0,    0,    true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
820                         this.listレーン.Add( new Cレーン( Cレーン.E種別.GtR, "GtR", 0,    0,    false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
821                         this.listレーン.Add( new Cレーン( Cレーン.E種別.GtG, "GtG", 0,    0,    false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
822                         this.listレーン.Add( new Cレーン( Cレーン.E種別.GtB, "GtB", 0,    0,    false, Color.FromArgb( alpha, 0, 0x80, 0xff ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
823                         this.listレーン.Add( new Cレーン( Cレーン.E種別.GtW, "GtW", 0x28, 0x28, true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
824                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BsV, "BsV", 0,    0,    true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
825                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BsR, "BsR", 0,    0,    false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
826                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BsG, "BsG", 0,    0,    false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
827                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BsB, "BsB", 0,    0,    false, Color.FromArgb( alpha, 0, 0x80, 0xff ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
828                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BsW, "BsW", 0xa8, 0xa8, true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
829 \r
830                         this.listレーン.Add( new Cレーン( Cレーン.E種別.AVI, "AVI", 0x54, 0x5A, true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.AVI, true ) );\r
831 \r
832                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG1", 0x04, 0xc4, true,  Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
833                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG2", 0x07, 0xc7, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
834                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG3", 0x55, 0xd5, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
835                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG4", 0x56, 0xd6, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
836                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG5", 0x57, 0xd7, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
837 \r
838                         // BG6~8も、初期状態では非表示とする。(n幅dotを0にし、bIsVisibleをfalseにする)\r
839                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG6", 0x58, 0xd8, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );\r
840                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG7", 0x59, 0xd9, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );\r
841                         this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG8", 0x60, 0xe0, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );\r
842 \r
843                         this.tRecalc_n位置XdotX();    // 0で固定初期化していたn位置XdotXを、ここで計算する。\r
844                                                                                 // (初期化の際に1つ1つまじめに計算しても良いが、単純にコード記述量が減るのでここでまとめて計算している)\r
845 \r
846                 }\r
847                 private void t初期化・スクロールバーを初期設定する()\r
848                 {\r
849                         this._Form.hScrollBar譜面用水平スクロールバー.Value = 0;\r
850                         this._Form.vScrollBar譜面用垂直スクロールバー.Value = 0;\r
851                         this.t水平スクロールバーと譜面パネル左右位置の調整();\r
852                         this.t垂直スクロールバーと譜面可視領域の上下位置の調整();\r
853                         this._Form.vScrollBar譜面用垂直スクロールバー.Value = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;\r
854                 }\r
855                 private void t初期化・小節を10個まで作成する()\r
856                 {\r
857                         for( int i = 0; i < 10; i++ )\r
858                         {\r
859                                 this.dic小節.Add( i, new C小節( i ) );\r
860                         }\r
861                 }\r
862                 private void t初期化・背景画像を生成する()\r
863                 {\r
864                         int width = 0;\r
865                         foreach( Cレーン cレーン in this.listレーン )\r
866                         {\r
867                                 width += cレーン.n幅dot;\r
868                         }\r
869                         this.bmp背景画像 = new Bitmap( width, 1 );\r
870                         Graphics graphics = Graphics.FromImage( this.bmp背景画像 );\r
871                         int x = 0;\r
872                         foreach( Cレーン cレーン in this.listレーン )\r
873                         {\r
874                                 graphics.FillRectangle( new SolidBrush( cレーン.col背景色 ), x, 0, cレーン.n幅dot, this.bmp背景画像.Height );\r
875                                 x += cレーン.n幅dot;\r
876                         }\r
877                         graphics.Dispose();\r
878                         this._Form.pictureBox譜面パネル.Width = this.bmp背景画像.Width;\r
879                         this._Form.pictureBox譜面パネル.BackgroundImage = this.bmp背景画像;\r
880                         this._Form.pictureBox譜面パネル.BackgroundImageLayout = ImageLayout.Tile;\r
881                 }\r
882                 private void t譜面を描画する・1小節を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域, Rectangle rc小節のPicBox内可視領域 )\r
883                 {\r
884                         this.t譜面を描画する・1小節を描画する・小節番号を描画する( g, cs, rc小節のPicBox内可視領域 );\r
885                         this.t譜面を描画する・1小節を描画する・ガイド線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
886                         this.t譜面を描画する・1小節を描画する・拍線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
887                         this.t譜面を描画する・1小節を描画する・レーン区分線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
888                         this.t譜面を描画する・1小節を描画する・小節線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
889                         this.t譜面を描画する・1小節を描画する・チップを描画する( g, cs, rc小節のPicBox内描画領域 );\r
890                 }\r
891                 private void t譜面を描画する・1小節を描画する・ガイド線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
892                 {\r
893                         if( this.n現在のガイド幅grid > 1 )\r
894                         {\r
895                                 int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;\r
896                                 for( int i = 0; i < num; i += this.n現在のガイド幅grid )\r
897                                 {\r
898                                         int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );\r
899                                         g.DrawLine( this.penガイド線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );\r
900                                 }\r
901                         }\r
902                 }\r
903                 private void t譜面を描画する・1小節を描画する・チップを描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
904                 {\r
905                         cs.listチップ.Sort();\r
906                         Rectangle rectangle = new Rectangle( 0, 0, 0, 0 );\r
907                         foreach( Cチップ cチップ in cs.listチップ )\r
908                         {\r
909                                 if( cチップ.n枠外レーン数 != 0 )\r
910                                 {\r
911                                         continue;\r
912                                 }\r
913                                 int num = cチップ.n位置grid;\r
914                                 Cレーン cレーン = this.listレーン[ cチップ.nレーン番号0to ];\r
915                                 if ( !cレーン.bIsVisible )\r
916                                 {\r
917                                         continue;\r
918                                 }\r
919                                 rectangle.X = cレーン.n位置Xdot;\r
920                                 rectangle.Y = ( rc小節のPicBox内描画領域.Bottom - ( num * C小節.n1グリッドの高さdot ) ) - Cチップ.nチップの高さdot;\r
921                                 rectangle.Width = cレーン.n幅dot;\r
922                                 rectangle.Height = Cチップ.nチップの高さdot;\r
923                                 if( !cチップ.b裏 )\r
924                                 {\r
925                                         switch( cレーン.eレーン種別 )\r
926                                         {\r
927                                                 case Cレーン.E種別.GtR:\r
928                                                 case Cレーン.E種別.GtG:\r
929                                                 case Cレーン.E種別.GtB:\r
930                                                 case Cレーン.E種別.BsR:\r
931                                                 case Cレーン.E種別.BsG:\r
932                                                 case Cレーン.E種別.BsB:\r
933                                                         if( ( ( cレーン.eレーン種別 != Cレーン.E種別.GtR ) || ( cチップ.n値・整数1to1295 != 2 ) ) && ( ( cレーン.eレーン種別 != Cレーン.E種別.BsR ) || ( cチップ.n値・整数1to1295 != 2 ) ) )\r
934                                                         {\r
935                                                                 Cチップ.t表チップを描画する( g, rectangle, -1, cレーン.col背景色 );\r
936                                                                 break;\r
937                                                         }\r
938                                                         rectangle.Width = cレーン.n幅dot * 3;\r
939                                                         Cチップ.tOPENチップを描画する( g, rectangle );\r
940                                                         break;\r
941 \r
942                                                 case Cレーン.E種別.BPM:\r
943                                                         Cチップ.t表チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );\r
944                                                         break;\r
945 \r
946                                                 case Cレーン.E種別.BEAT:\r
947                                                         Cチップ.t表チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色, Cレーン.E種別.BEAT );\r
948                                                         break;\r
949 \r
950                                                 default:\r
951                                                         Cチップ.t表チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );\r
952                                                         break;\r
953                                         }\r
954                                 }\r
955                                 else if( cレーン.eレーン種別 == Cレーン.E種別.BPM )\r
956                                 {\r
957                                         Cチップ.t裏チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );\r
958                                 }\r
959                                 else if ( cレーン.eレーン種別 == Cレーン.E種別.BEAT )\r
960                                 {\r
961                                         Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色, Cレーン.E種別.BEAT );\r
962                                 }\r
963                                 else\r
964                                 {\r
965                                         Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );\r
966                                 }\r
967                                 if ( cチップ.bドラッグで選択中 || cチップ.b確定選択中 )\r
968                                 {\r
969                                         Cチップ.tチップの周囲の太枠を描画する( g, rectangle );\r
970                                 }\r
971                         }\r
972                 }\r
973                 private void t譜面を描画する・1小節を描画する・レーン区分線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
974                 {\r
975                         int num = 0;\r
976                         foreach( Cレーン cレーン in this.listレーン )\r
977                         {\r
978                                 Pen pen = cレーン.b左側の線が太線 ? this.penレーン区分線ペン太 : this.penレーン区分線ペン細;\r
979                                 g.DrawLine( pen, num, rc小節のPicBox内描画領域.Top, num, rc小節のPicBox内描画領域.Bottom );\r
980                                 num += cレーン.n幅dot;\r
981                         }\r
982                 }\r
983                 private void t譜面を描画する・1小節を描画する・小節線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
984                 {\r
985                         Rectangle rectangle = rc小節のPicBox内描画領域;\r
986                         g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Bottom, rectangle.Right, rectangle.Bottom );\r
987                         g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Top, rectangle.Right, rectangle.Top );\r
988                 }\r
989                 private void t譜面を描画する・1小節を描画する・小節番号を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内可視領域 )\r
990                 {\r
991                         g.DrawString( C変換.str小節番号を文字列3桁に変換して返す( cs.n小節番号0to3599 ), this.ft小節番号文字フォント, this.br小節番号文字ブラシ, rc小節のPicBox内可視領域, this.strfmt小節番号文字フォーマット );\r
992                 }\r
993                 private void t譜面を描画する・1小節を描画する・拍線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
994                 {\r
995                         int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;\r
996                         for( int i = 0; i < num; i += C小節.n基準の高さgrid / 4 )\r
997                         {\r
998                                 int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );\r
999                                 g.DrawLine( this.pen拍線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );\r
1000                         }\r
1001                 }\r
1002                 private void t譜面を描画する・レーン割付チップを描画する( Graphics g, Rectangle rc小節のPicBox内描画領域 )\r
1003                 {\r
1004                         LinearGradientBrush brush = new LinearGradientBrush( rc小節のPicBox内描画領域, Color.FromArgb( 0xff, 0, 0, 100 ), Color.FromArgb( 0xff, 100, 100, 0xff ), LinearGradientMode.Vertical );\r
1005                         g.FillRectangle( brush, rc小節のPicBox内描画領域 );\r
1006                         brush.Dispose();\r
1007                         Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );\r
1008                         foreach( Cレーン cレーン in this.listレーン )\r
1009                         {\r
1010                                 if ( !cレーン.bIsVisible )\r
1011                                 {\r
1012                                         continue;\r
1013                                 }\r
1014                                 layoutRectangle.X = ( rc小節のPicBox内描画領域.X + cレーン.n位置Xdot ) + 1;\r
1015                                 layoutRectangle.Y = rc小節のPicBox内描画領域.Y + 1;\r
1016                                 layoutRectangle.Width = cレーン.n幅dot;\r
1017                                 layoutRectangle.Height = rc小節のPicBox内描画領域.Height;\r
1018                                 if ( cレーン.nレーン割付チップ・表0or1to1295 > 0 )\r
1019                                 {\r
1020                                         string s = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 );\r
1021                                         g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1022                                         layoutRectangle.X--;\r
1023                                         layoutRectangle.Y--;\r
1024                                         g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1025                                         layoutRectangle.X++;\r
1026                                         layoutRectangle.Y++;\r
1027                                 }\r
1028                                 layoutRectangle.X += cレーン.n幅dot / 2;\r
1029                                 if ( cレーン.nレーン割付チップ・裏0or1to1295 > 0 )\r
1030                                 {\r
1031                                         string str2 = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 );\r
1032                                         g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1033                                         layoutRectangle.X--;\r
1034                                         layoutRectangle.Y--;\r
1035                                         g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
1036                                 }\r
1037                         }\r
1038                 }\r
1039                 private void t譜面を描画する・レーン名を描画する( Graphics g, Rectangle rcレーン名のPicBox内描画領域 )\r
1040                 {\r
1041                         LinearGradientBrush brush = new LinearGradientBrush( rcレーン名のPicBox内描画領域, Color.FromArgb( 0xff, 100, 100, 0xff ), Color.FromArgb( 0, 0, 0, 0xff ), LinearGradientMode.Vertical );\r
1042                         g.FillRectangle( brush, rcレーン名のPicBox内描画領域 );\r
1043                         brush.Dispose();\r
1044                         Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );\r
1045                         foreach( Cレーン cレーン in this.listレーン )\r
1046                         {\r
1047                                 if ( !cレーン.bIsVisible )\r
1048                                 {\r
1049                                         continue;\r
1050                                 }\r
1051                                 layoutRectangle.X = ( rcレーン名のPicBox内描画領域.X + cレーン.n位置Xdot ) + 2;\r
1052                                 layoutRectangle.Y = rcレーン名のPicBox内描画領域.Y + 2;\r
1053                                 layoutRectangle.Width = cレーン.n幅dot;\r
1054                                 layoutRectangle.Height = 0x18;\r
1055                                 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ影, layoutRectangle, this.strfmtレーン名文字フォーマット );\r
1056                                 layoutRectangle.X -= 2;\r
1057                                 layoutRectangle.Y -= 2;\r
1058                                 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ, layoutRectangle, this.strfmtレーン名文字フォーマット );\r
1059                         }\r
1060                 }\r
1061                 //-----------------\r
1062                 #endregion\r
1063         }\r
1064 }\r