またまたネタ切れで知恵を絞っているこの頃。家庭で必要な計算と言えば...

 

あ"っ、ローン返済シミュレーションがあるか?

 

「計算」はPCの最も得意とするところで、若いころ住宅ローン関係の業務や、赤本(注1)をベースに対人損害賠償計算アプリなどを作っていましたので、これなら基礎的知見(注2)があるので面白いかも、と考えました。

注1:日弁連交通事故相談センター東京支部発行の交通事故損害賠償裁判基準(弁護士基準)が書かれた書籍。

注2:基本的に借り入れ額、毎月払いと反年賦払い(およびその割合)、元利均等か元金均等か、利率、返済期間を変数にして、何を求めるのかをベースに計算対応をすればできます。

 

ところが、

 

ん?

 

と思ってググってみると、

 

何処でもやっていて、こんなにあるじゃん!

 

ということで 同じようなソフトやwebサービスがザックザク見つかりました。ということで、

 

没!

 

又何か考えましょう。

 

前回はJR横浜駅と勤務地周辺について書きましたが、夜ともなればさ迷い歩くのは26歳(転勤した1981年4月時点)の男子として当たり前のこと。

 

ということで、

 

今回は当時の私が飲み歩いた中でまだ覚えている所の「今」を調べてみましたので、紹介しましょう。

 

1.JR横浜駅周辺

勤務地周辺は矢張り手軽に飲み食いすることが多く、回数的には多かったのですが、余り記憶に残っている店は無いですね。

当時一緒だったアル中の()課長代理が(↓の通りの経緯の後)退院後連れて行ってくれた居酒屋というか、首都高速道の下にあった屋台のような狭い店なんですが、そこは店主が船で釣ってきた魚を当日出す店でとても新鮮なネタだったので覚えてはいますが、名前は思い出せません。(まぁ、現在は無いでしょうが。)

:実際、ある日会社に来なくなり、入院しましたので真正の、です。

 

今では信じがたいですが、現在の「横浜ベイシェラトン」のビル地階に「うなぎの肝焼き」一本で勝負していた店があり、時々仲良しの母店の総務の課長代理と飲みに行っていたことは覚えています。これも名前は思い出せませんね。

 

矢張り「家飲み」のような居酒屋系の店は、記憶に残りにくいようですね。

 

2.横浜中華街

インターネットweb上で何でも情報(偽情報も)が入手できる今の人は信じられないでしょうが、1980年初頭当時の日本には外国人が稀であり、町中華ではない本格中国料理を食べようと思ったら、「横浜中華街)迄行かなくちゃーね」なんて言われていた時代でした。

:より昔は南京街。当時「チャイナタウン(Chaina town)」なんていったらエーちゃん風で気障でしたね。

 

クロニカ(As the story is such,)

 

横浜と言えばエキゾチック、その中でも中華街は無視するわけにはいかない重要なエリアです。しかし、お店は山ほどあるのですべて廻るわけにはいきません。歓迎会や送別会等の会合で使うのも、よく知られている萬珍楼聘珍楼華正樓等の有名店(だけど高い!)は偉いさんが使う店で若かった僕らはもう少しリーズナブルな同發順海閣永福楼等の大衆店に行ったように記憶しています。

 

ネット等ない当時、情報媒体は雑誌(特にAn-an、Non-no等当時大流行の女性月刊誌や、POPEYE、BRUTUS等の男性ファッション雑誌)や口コミであり、その伝聞情報で特に有名であったのが「海員閣」で、私も神様(女房)とデートの後行って、冬の寒空の下1時間まって晩飯にありついたことを覚えています。しかし、当時すでに高齢であったご店主の後継者問題からか、現在はおひとりの方が完全予約制のコース料理のみで切り回しているようですね。

 

また、転勤後担当することになった当時の取引先に中国系アメリカ人の方が経営する会社があり、そこにお邪魔するたびに色々な名店(such as 山東謝甜記 etc etc)へランチに連れて行ってもらいました。

 

でも、

 

その際に教えてもらったのは、「中華街の中には外形的にはお店に見えない、個人経営の隠れ家的な店が多く存在し、自分の舌にあった好みの店を作って長く荒らされないで楽しむ」のが通なんだそうです。実際何店か連れて行ってもらい、正月料理 etc の珍しい中国料理もいただきました。(とはいっても、私ら一見客なんでねぇ...)

 

3.バー・レストラン

横浜と言えばエキゾチック」と書きましたが、それは中華だけではありません。若かったこともあり、気取った洋風のレストランやバーなどにも出没しました。

 

スカンディアScandia)ーシルクセンタービルの日本大通り対面にある「北欧料理レストラン」ということになっていますが、一般的な洋風料理も注文できます。しかし、ここも2025年冬から1階を開けていないようですね。

 

ホフ・ブロウThe Hof Brau)ー名前の通り、ザワークラウト、ジャーマンポテト、アイスヴァイン等のドイツ料理の店で、特にジャーマンポテトの印象が深いです。(今のメニューを見ると今は大分イタリアがかっていますが...でも、おすすめはドイツ料理でしょうね。)

 

WindJammer-酒とJAZZを愛する人にはたまらない、こういった店でした。が、たくさんの人が惜しむ中、2024年に閉店していました。残念です。ご興味のある方はこちらを→「日本のバーの歴史と歩む横浜今昔物語

 

最後に触れるのは山下公園の向かいにある「ホテルニューグランドHOTEL NEW GRAND)」。

 

ここも↑で述べた方(Chenさん)に連れて行ってもらい、そのクラシカルな佇まいに感銘したものでした。(その時Chenさんがオーダーしたサラダにイタリアンドレッシングがかかっていたのですが、彼は更に"Extra vinegor"を依頼したのでした。何故かそれが<元来お酢好きな私なので>心に刺さり、「サラダには"Extra vinegor"」が私の生き方になっています。)

 

エラそーに横浜を語る、なんて到底私にはできませんが、

 

「横浜」という歴史的、文化的に稀有な街についてご興味を持っていただき、閉店してしまう前に稀有な店の味を楽しんでいただける契機になれば望外の幸甚に感じます。

 

ps. GW中の手慰みに始めた今昔物語ですが、書き始めると長々となるので、一旦ここで打ち切り、特にこの後NewYorkへ研修に往き、更に駐在し、再度Singaporeに駐在した「今昔物語」はもう少し熟成させてからにしましょう。

 

少し音楽方向へ脱線気味でしたが、今回は日本橋で3か年勤め始めた後、初めての転勤先となった横浜について書きます。

 

当時私の勤めていた会社は転勤が多い業種で、「3年に一回」転勤するのが当たり前でしたが、とうとう私の番になりました。前年遠方へ転勤された先輩もいる中、

 

「なーんだ、お前は横浜か?隣町みたいなもんじゃないか?」

 

という上司等の「定義」により(今思えば、パワハラとしか思えませんが)、自分の送別会の幹事をまだ下から2番目の自分自身が担当することになりました。(トホホ)でも、4月1に日の転勤日当日は「(当時は1番線だった)東京駅の東海道線乗り場」で(当時は定番の)「〇〇君、バンザーイ!」等とやって頂き、約30分後に横浜駅に着く、という

 

なんとも間の抜けた転勤

 

であったことを思い出します。

 

とはいえ、

 

26~30歳まで4年間務めた間には、若かったこともあり色々と思い出があります。

 

・客先の接待後、余り一緒になりたくない先輩と同じ車で帰りたくなかったので、(8月だったこともあり)山下公園橋の埠頭のベンチで寝て、夜中にホームレスさんが(私の目の前で)焚火をしていたり、4時に起きて横浜球場迄歩いて最後のなけなしのコインで関内駅から電車で寮に買えり、シャワーを浴びてからまた横浜に出勤したり...

 

・日本橋時代に付き合ったけど、一旦分かれた彼女と又付き合い始め、とうとう所帯を持ったり...

 

・結婚直前で「全国最年少の地域分解組合委員長」となり、地方経営かつ仲人の取締役支店長とやりあったり...

 

・翌年長男が生まれたので、(現場用の作業服に着替えて)出役後、その帰りに入院先の病院に行った際、自宅アパートの鍵を忘れ、酔っぱらったまま3階の階段から窓の手すりに飛び移ろうかまじめに考えたり...(矢張りおっかないのであきらめて、元居た寮に頼み込んで寝かせてもらいました)

 

・米国研修試験に受かり(ご参考、その後の海外業務キャリアの出発点となったり...

 

等々、その他色々とエピソードがありましたが、その時代の勤め先はJR横浜駅西口駅前ドまん前、横浜市北幸1丁目3番23の「相鉄ビル」でした。JR横浜駅西口から一旦地下に入り、「横浜駅西口地下街(ダイアモンド地下街)」を通って通いました。当時の「横浜地下街」には飲食店が多く、「勝烈庵」とかお寿司屋さん、中華屋さんなどがひしめいていて、お昼は全く困らなかったことを覚えています。

 

偶々、2023年に女房が横浜で目の外科手術を受けることになり、何度か車、電車で横浜に足を運ぶ機会があり、帰りに駅前を散策する機会がありましたが、

 

 

まー、変わったこと、変わったこと

 

・まず勤め先が入っていた「相鉄ビル」が「横浜ベイシェラトン ホテル&タワーズ」になっているんですね。

・地下街も飲食店が(恐らくコロナの影響と横浜駅西口大改造構想により)跡形もなく、ブティックばかりになっています。

・当時立ち読みした本屋はありましたが、大分品揃えや店舗デザインも変わっていました。

・西口はそんなものですが、東口埋立地は矢張り(当時はなかった)ルミネやそごう等で趣が大きく変わっていました。

・横浜高島屋がテナントの相鉄ジョイナス横浜岡田屋(MORE'S)は健在ですが、矢張り当時とは様変わりですね。

・「ダイアモンド地下街」も「ザ・ダイアモンド」というそーな。

 

これが40余年の変化かぁ...もう郷愁、ノスタルジアでIR横浜駅を訪れることはないな...

 

という深い感慨をもって帰宅したことを覚えています。

 

ゴメンナサイ。(最初から謝っちゃいます。)

 

ここから始まった【TurtleGraphics】シリーズで、Visual StudioからC#5へ移行してサンプルやらTGEditorやらで22投稿したので疲れてしまったのと、GWに差し掛かり、このブログも5周年だったので、余り深く考えずに始めた

 

【今は昔...】シリーズ

 

社会人になった【今は昔...】今昔物語(1)日本橋時代から始めましたが、投稿した後、何故か学生時代に聴いた

 

 

にWEBで遭遇し、懐かしさの余り昨日私の「懐メロ」メニューに加えてしまいました。

 

そんなこととで、「今昔物語(2)」は「最初の転勤地の今」を予定していたのですが、突如余り深く考えずに学生時代」に退行してしまいました。

 

しっかし、

 

発見はあるもので、今聞き返すと、例えばTake it easyとかLyin’sEyesとか

 

Eaglesって、めっちゃカントリー

 

なんですね。

 

いずれにせよ、

 

Witchy WomanDesperadoOne of These Nights、そしてHotel Californiaと夜中、机に向かっていた時分が 蘇り、結構浸ってしまいました。

 

ん?

 

『だから何?』と言わないで

 

 

Don't say "So what?"

 

でよいのでしょうか?

 

今回の真意は、現在も存続する

 

Eagles

 

ではありますが、

 

決して同じではありえないEverything Must Change

 

ということを言いたかったのです。

 

ps. 次はまた(1)の延長に戻るつもりです。(のつもりですが... 「気分次第で責めないで」)

 

Golden Week ...とはいえ、今年6回目の年男である私は人混みに出てゆく体力、気力がわきません。(それというのも、ゴールデンウィークの高速の混雑についてトラウマがあるからなんですが...)

 

そんな時に

そうそう、今はグーグルビューがあって、何処でも行ったように見えるんだっけ

:正しくは「Google MapのStreet View」です。

 

と思い立ち、取り敢えず、学校を卒業して社会人になった1978年から3年間務めた東京、日本橋がどうなっているのか、グーグルマップの人型(so-called "pegman")

を落として、当時の勤務地を探ってみました。すると、

 

ビル自体が無いっ!(48年前だから当たり前だよな)

 

ということで、今がどうなっているのかを検索すると、

 

日本橋一丁目中地区第一種市街地再開発事業

という再開発プロジェクトを三井不動産と野村不動産が仕掛け、今年の3月に竣工して


東京ミッドタウン日本橋

 

になっているそーな。

 

でも、でもよっ!

 

このマップを見ていると、(1978年)当時(お昼の予算は500円で)勤務するビルの(社食で安くあげて矢張り)裏にあったアマンドに行くか、コーヒーを我慢して行った)中華料理店の

 

小洞天」はどうなっちゃったの?

 

という素朴な疑問が生じます。これも調べてみると、

 

日本橋小洞天閉店の理由と80年の歴史【1944年創業中華料理店の最後】

 

ということで、この再開発事業の結果(当然アマンドも同じく)

 

閉店(ガーン!!!)

 

になった模様です。それで焦って小洞天のホームページを詳細に調べると残っている店舗は

 

小洞天 大手町ファーストスクエア店

shop_fs

 

だけになってしまった模様。(💦)

 

でも、名物の

 

シュウマイご飯(Shumai and rice set  シュウマイ4ヶ+ライス+スープ+ザーサイ)

¥1,000

 

は勿論、当時先輩が「食べろ、食べろ」と煩かった、懐かしい

 

menu02

五目やわらか焼きそば(Five ingredient soft fried noodle)

¥ 1,300

 

はまだ健在の模様なので、一度食べに行かなくては!

 

このブログ、初めての投稿がこれ。なので、14日で

 

開設5周年!

 

を迎えます。大体GWに「あ"~、もう〇年ブログを書いたな~」と感じる暦年記念記事は

 

(1)一年目に祝一周年】ハァハァ、ゼィゼィなどを書いていますが、同時にこんな紹介を書いていますね。

(2)二年目は書いていませんが、ウィンドウズの描画がらみの(後にC#のEaselクラスとなる)こんな記事を書いていますね。

(3)三年目もかいていませんが、(OpenGLだから)矢張り描画がらみでこんな記事をかいています。」

(4)四年目も記念記事はかいていませんが、こんなことを書いています。(しょーもな。)

 

まぁ、

 

Anniversaryを祝う気がない

 

ことはわかりました(笑)が、5月1日に最終回

 

 

を迎え、結果的に5周年記念作品になったTGEditorもグラフィック系であることを考えると、絵心はない」私ですが、描画やグラフィックに関心があることは分かります。事実2022年のこんな紹介(BCCSkeltonのC++プログラム)

 

 

でも(より深度の大きい)フラクタルツリーが出ていました。C#でEaselクラスを作った後、手慰みでこんなもの

 

 

を作りましたが、矢張り環境ソフト的なものが好きなのでしょうかね?

 

いずれにせよ、

 

祝5周年、おめでとー!

 

前回でTGEditorの最終回としましたが、TGEditorが「独特な関数を用いた描画や、繰り返しネスティングの複雑な描画等には対応できないという限界が明白」ということで、

 

「独特な関数を用いた描画や、繰り返しネスティングの複雑な描画等はこっちを使いましょう。」

 

と結びました。以下では↑の青字の典型であるフラクタルや、フラクタル樹形を描画(末尾参照)してみましょう。

 

【TG_Ala_Carte.cs】

////////////////////////////
// TG_Ala_Carte.cs
// Copyright 2026 by Y-Sama
////////////////////////////

using System;
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
using System.Reflection;                //Assemblyを使う為
using Nakov.TurtleGraphics;                //TurtleGraphicsを使う為

namespace TG_Ala_Carte
{
    class Launcher
    {
        //エントリーポイント
        [STAThread]
        static void Main()
        {
            Application.Run(new TGAC());
        }
    }

    public class TGAC : Form
    {
        //クラスコントロール
        private Button Reset_Button;
        private Button Hide_Button;
        private Button Draw1_Button;
        private Button Draw2_Button;
        private Button Draw3_Button;
        private Button Exit_Button;

        //コントロールの初期化
        private void InitializeControls()
        {
            this.Reset_Button = new Button();
            this.Hide_Button = new Button();
            this.Draw1_Button = new Button();
            this.Draw2_Button = new Button();
            this.Draw3_Button = new Button();
            this.Exit_Button = new Button();
            this.SuspendLayout();
            //Reset_Button
            this.Reset_Button.Anchor = AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right;
            this.Reset_Button.Location = new Point(713, 12);
            this.Reset_Button.Name = "Reset_Button";
            this.Reset_Button.Size = new Size(75, 30);
            this.Reset_Button.TabIndex = 0;
            this.Reset_Button.Text = "リセット";
            this.Reset_Button.UseVisualStyleBackColor = true;
            this.Reset_Button.Click += new EventHandler(this.Reset_Button_Click);
            //Hide_Button
            this.Hide_Button.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            this.Hide_Button.Location = new Point(713, 44);
            this.Hide_Button.Name = "Hide_Button";
            this.Hide_Button.Size = new Size(75, 30);
            this.Hide_Button.TabIndex = 1;
            this.Hide_Button.Text = "亀表示";
            this.Hide_Button.UseVisualStyleBackColor = true;
            this.Hide_Button.Click += new EventHandler(this.Hide_Button_Click);
            //Draw1_Button
            this.Draw1_Button.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            this.Draw1_Button.Location = new Point(713, 74);
            this.Draw1_Button.Name = "Draw1_Button";
            this.Draw1_Button.Size = new Size(75, 30);
            this.Draw1_Button.TabIndex = 2;
            this.Draw1_Button.Text = "描画1";
            this.Draw1_Button.UseVisualStyleBackColor = true;
            this.Draw1_Button.Click += new EventHandler(this.Draw1_Button_Click);
            //Draw2_Button
            this.Draw2_Button.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            this.Draw2_Button.Location = new Point(713, 104);
            this.Draw2_Button.Name = "Draw2_Button";
            this.Draw2_Button.Size = new Size(75, 30);
            this.Draw2_Button.TabIndex = 3;
            this.Draw2_Button.Text = "描画2";
            this.Draw2_Button.UseVisualStyleBackColor = true;
            this.Draw2_Button.Click += new EventHandler(this.Draw2_Button_Click);
            //Draw3_Button
            this.Draw3_Button.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            this.Draw3_Button.Location = new Point(713, 134);
            this.Draw3_Button.Name = "Draw3_Button";
            this.Draw3_Button.Size = new Size(75, 30);
            this.Draw3_Button.TabIndex = 4;
            this.Draw3_Button.Text = "描画3";
            this.Draw3_Button.UseVisualStyleBackColor = true;
            this.Draw3_Button.Click += new EventHandler(this.Draw3_Button_Click);
            //Exit_Button
            this.Exit_Button.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
            this.Exit_Button.Location = new Point(713, 410);
            this.Exit_Button.Name = "Exit_Button";
            this.Exit_Button.Size = new Size(75, 30);
            this.Exit_Button.TabIndex = 4;
            this.Exit_Button.Text = "終了";
            this.Exit_Button.UseVisualStyleBackColor = true;
            this.Exit_Button.Click += new EventHandler(this.Exit_Button_Click);
            //TGAC本体
            Assembly myOwn = Assembly.GetEntryAssembly();
            this.Icon = Icon.ExtractAssociatedIcon(myOwn.Location);    //プログラムアイコンをフォームにつける
            this.AutoScaleDimensions = new SizeF(6F, 12F);
            this.AutoScaleMode = AutoScaleMode.Font;
            this.ClientSize = new Size(800, 450);
            this.Controls.Add(this.Hide_Button);
            this.Controls.Add(this.Reset_Button);
            this.Controls.Add(this.Draw1_Button);
            this.Controls.Add(this.Draw2_Button);
            this.Controls.Add(this.Draw3_Button);
            this.Controls.Add(this.Exit_Button);
            this.Name = "TGAC";
            this.Text = "TurtleGraphics Ala Carte";
            this.ResumeLayout(false);
        }

        //コンストラクター
        public TGAC()
        {
            Turtle.Init(this);
            Turtle.Reset();
            InitializeControls();
        }

        //終了処理
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
            DialogResult dr = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if(dr == DialogResult.No)
            {
                e.Cancel = true;
            }
            else
                Environment.Exit(0);    //解説【重要】ウィンドウをクローズしてもプロセスが終了せず、継続してしまう為
        }

        //リセットボタン処理
        private void Reset_Button_Click(object sender, EventArgs e)
        {
            Turtle.Reset();
        }

        //非表示処理
        private void Hide_Button_Click(object sender, EventArgs e)
        {
            if (Turtle.ShowTurtle)
            {
                Turtle.ShowTurtle = false;
                this.Hide_Button.Text = "亀表示";
            }
            else
            {
                Turtle.ShowTurtle = true;
                this.Hide_Button.Text = "亀非表示";
            }
        }

        //描画1ボタン

        private void Draw1_Button_Click(object sender, EventArgs e)
        {
            DisableCtrls();                                //ボタン無効化
            Turtle.Reset();
            Turtle.PenUp();
            Turtle.MoveTo(-100, 200);
            Turtle.PenDown();
            Turtle.Rotate(90);
            fractal(200, 0);

            Turtle.Reset();
            Turtle.PenUp();
            Turtle.MoveTo(-100, 100);
            Turtle.PenDown();
            Turtle.Rotate(90);
            fractal(200, 1);

            Turtle.Reset();
            Turtle.PenUp();
            Turtle.MoveTo(-100, 0);
            Turtle.PenDown();
            Turtle.Rotate(90);
            fractal(200, 2);

            Turtle.Reset();
            Turtle.PenUp();
            Turtle.MoveTo(-100, 0);
            Turtle.PenDown();
            Turtle.Rotate(90);
            fractal(200, 3);
            EnableCtrls();                                //ボタン有効化
        }

        private void fractal(int size, int depth)    //Used by Draw1 abd Draw2
        {
            if(depth <= 0)
                Turtle.Forward(size);
            else
            {
                Turtle.Delay = 50;
                Turtle.PenSize = 2;
                fractal(size / 3, depth - 1);
                Turtle.Rotate(-60);
                fractal(size / 3, depth - 1);
                Turtle.Rotate(120);
                fractal(size / 3, depth - 1);
                Turtle.Rotate(-60);
                fractal(size / 3, depth - 1);
            }
        }

        //描画2ボタン

        private void Draw2_Button_Click(object sender, EventArgs e)
        {
            DisableCtrls();                                //ボタン無効化
            Color[] col = new Color[3] {Color.Red, Color.Green, Color.Blue};
            for(int j = 0; j < 3; j++)
            {
                //Turtle.Reset();
                Turtle.PenUp();
                Turtle.MoveTo(-100 + j * 4, -100 + j * 4);
                Turtle.PenDown();
                Turtle.PenColor = col[j];
                for(int i = 0; i < 5; i++)
                {
                    fractal(200 - j * 4, 3);
                    Turtle.Rotate(360 / 5);
                }
            }
            EnableCtrls();                                //ボタン有効化
        }

        //描画3ボタン

        private void Draw3_Button_Click(object sender, EventArgs e)
        {

            //Fractal  Tree
            DisableCtrls();                                //ボタン無効化
            Turtle.Delay = 10;
            Turtle.PenSize = 2;
            Turtle.MoveTo(0, -150);
            for(int i = 0; i < 100; i++)
            {
                draw(100);
            }
            EnableCtrls();                                //ボタン有効化
        }

        private void draw(int i)    //Used by Draw3_Button_Click
        {
            if(i < 10)
                return;
            else
            {
                Turtle.Forward(i);
                Turtle.Rotate(-30);
                draw(3 * i / 4);
                Turtle.Rotate(60);
                draw(3 * i / 4);
                Turtle.Rotate(-30);
                Turtle.Backward(i);
            }
        }

        //終了ボタン

        private void Exit_Button_Click(object sender, EventArgs e)
        {
            Close();
        }

        //ボタンを無効化する

        private void DisableCtrls()
        {
            Reset_Button.Enabled = false;
            Hide_Button.Enabled = false;
            Draw1_Button.Enabled = false;
            Draw2_Button.Enabled = false;
            Draw3_Button.Enabled = false;
            Exit_Button.Enabled = false;
        }

        //ボタンを有効化する

        private void EnableCtrls()
        {
            Reset_Button.Enabled = true;
            Hide_Button.Enabled = true;
            Draw1_Button.Enabled = true;
            Draw2_Button.Enabled = true;
            Draw3_Button.Enabled = true;
            Exit_Button.Enabled = true;
        }
    }
}
 

【描画1】

(解説:フラクタル深度0、1、2を続く最後の2です。)

 

【描画2】

(解説:【注意】20分くらいかかるので注意してください。)

 

【描画3】

(解説:【危険】描画完了まで1時間以上かかります。)

 

まっ、

 

眺めて楽しい環境ソフトではありますが、時間が長いのは今風ではないかもしれませんね。(とはいえ、速過ぎるのは興ざめでもあったりして。)

 

前回でコードについては全て書きましたので、今回は「実際に使ってみるとどうか」、なんて書いてみましょう。

 

何度も表示していますが、単に起動すると

 

こんな風になります。又起動時に「実行リスト実行命令のファイル - *.tge)」をドロップするとそれが読み込まれ、又起動してからドロップしても同様に読み込まれます。「読み込まれているかどうか」の違いはウィンドウ最下部のステータスバーに表示されるファイル名で分かります。

(解説:   ↑ここです。)

 

ここで「ファイル」-「実行ファイルの新規作成」をメニューやツールバーボタンで選択すると、

 

と確認が出ます。要すれば「ファイル」メニューの対象ファイルは実行リスト(TGEクラスインスタンスのtge.ExeListメンバー)であり、「新規作成」はその初期化だけの意味しかありません。この確認に対して「はい」と答えると、(既にファイルがあってもなくても)次のダイアログが「何をすればよいのか(ToDo)」の操作指示を表示します。(尚、既にファイルを読み込んでいた場合には初期化され「(ファイル名)」状態に戻ります。)

 

例えば↑の第2パラにある「命令リスト(ダイアログ)」の「命令追加(ボタン)」から「(「命令入力ダイアログ」をつかって)命令セット」を作ります。この操作は画像を含めにやりましたね?(その結果、PenColor命令入力の仕様変更も行いました。)

又、作成した「命令セット(TGSetクラスインスタンス)」はダイアログを「はい」で終了すると自動的に「命令リスト(「命令セットライブラリー」であるTGEクラスインスタンスのtge.CmdListメンバー)」に追加されるので、即座に「実行」-「命令セットの実行」メニュー(またはツールバーの緑色の横▲ボタン)で命令セットライブラリー」から選択して実行できます。

 

単体の描画「命令セット」は部品として命令セットライブラリー」に登録されるので、

 

それを好きなように選択し、実行リスト(TGEクラスインスタンスのtge.ExeListメンバー)」に登録することができ、やや複雑な画像を連続して描画することが可能です。

 

又それらを「名前を付けて保存」することで、その後に「ファイル」ー「実行ファイルを開く」で読み込んで、「編集]-「実行リスト編集」で追加、削除、編集して新しい「実行リストファイルにすることができ、画像作成の生産効率が向上します。

(解説:最後の2枚は↑で単体で描いた命令セットのPenColor命令と繰り返し回数を変化させたものです。)

 

このような訳で、最初にやったダイアログへの描画命令記述()はWYSWYG化と再利用化が可能となりました

【TurtleGraphics】TurtleGraphics01

  【TurtleGraphics】TurtleGraphics02

  【TurtleGraphics】TurtleGraphics03

 

が、一方

 

独特な関数を用いた描画や、繰り返しネスティングの複雑な描画等には対応できないという限界も明確になりました。でも、それは「わかった上での設計方針」であったし、それを基に仕様を決めたのだから

 

No problem/No worries

没問題(メイウェンティ)

 

なんですが、矢張り対応できないのもちょっと気になるので、

 

なんくるナイサー

 

ということで、最初に作ったダイアログを使って

 

「独特な関数を用いた描画や、繰り返しネスティングの複雑な描画等はこっちを使いましょう。」

 

ということにしました。それはまた次回。

 

前回からの続きです。

 

【TGEditor.cs】

続き

        //終了処理
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);
            DialogResult dr = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if(dr == DialogResult.No)
            {
                e.Cancel = true;
            }
            //命令セットライブラリー(CmdList.tge)を書き込む(解説:一応システム管理です。上書きではなく、日時を付けて別ファイル処理の方がより安全ですが...)
            tge.CmdList.FileName = ".\\tgeFiles\\CmdList.tge";
            tge.CmdList.WriteFile();
        }

        //「新規作成」処理(解説:実際は「初期化」処理ですね。)
        private void OnNew_Click(object sender, EventArgs e)
        {
            if(tssl[1].Text != "(ファイル名)")
            {
                DialogResult dr = MessageBox.Show("データがありますが、初期化しますか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if(dr == DialogResult.Yes)
                {
                    tssl[1].Text = "(ファイル名)";
                    tssl[1].ToolTipText = "(ファイル名)";        //ToolTip設定
                }
                else
                    return;
            }
            tge.Reset();            //Nakov.TurtleGraphics初期化
            tge.ExeList.Clear();    //「実行リスト(ExeList)」初期化
            MessageBox.Show("実行リストを作るには、「実行リストの編集」で「命令リスト」から「命令セット」を選んでください。\r\n" +
                            "「命令リスト」は「命令リスト編集」で編集できます。また、新たに命令セットを作成するには「命令セット" +
                            "作成」または「命令リスト編集」の「命令セット追加」を選んでください。", "ToDo", MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
        }

        //「ファイルを開く」処理
        private void OnOpen_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofDlg = new OpenFileDialog();
            //ファイルフィルターの指定
            ofDlg.Filter = "タートルグラフィックデータファイル|*.tge";
            ofDlg.FilterIndex = 0;
            ofDlg.RestoreDirectory = true;    //初期ディレクトリへ復帰
            ofDlg.CheckPathExists = true;    //ファイルパスの存在チェック
            ofDlg.InitialDirectory = ".\\tgeFiles";            // デフォルトのフォルダーの指定
            ofDlg.Title = "ファイルを開く";    //ダイアログのタイトルを指定する
            if(ofDlg.ShowDialog() == DialogResult.Cancel)    //ダイアログを表示する
            {
                MessageBox.Show("キャンセルされました。", "キャンセル", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                if(Path.GetExtension(ofDlg.FileName) == ".tge")
                {
                    tssl[1].Text = ofDlg.FileName;            //ファイル名を記録
                    tssl[1].ToolTipText = ofDlg.FileName;    //ToolTip設定
                    //ExeListを初期化、ファイル読み込み(解説:対象は実行リストファイルです。)
                    tge.ExeList.Clear();
                    tge.ExeList.FileName = tssl[1].Text;
                    tge.ExeList.ReadFile();
                }
                else
                {
                    //エラー処理
                    MessageBox.Show("タートルグラフィックデータファイル(*.tge)ではありません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            //オブジェクトを破棄する
            ofDlg.Dispose();
        }

        //「保存」処理
        private void OnSave_Click(object sender, EventArgs e)
        {
            if(tssl[1].Text == "(ファイル名)")
                OnSaveAs_Click(sender, e);
            else
            {
                //ファイル保存処理
                tge.ExeList.FileName = tssl[1].Text;
                tge.ExeList.WriteFile();
            }
        }

        //「名前を付けて保存」処理
        private void OnSaveAs_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfDlg = new SaveFileDialog();
            //ファイルフィルターの指定
            sfDlg.AddExtension = true;        //拡張子自動付加
            sfDlg.DefaultExt = ".tge";
            sfDlg.Filter = "タートルグラフィックデータファイル|*.tge";
            sfDlg.FilterIndex = 0;
            sfDlg.RestoreDirectory = true;    //初期ディレクトリへ復帰
            sfDlg.CheckPathExists = true;    //ファイルパスの存在チェック
            sfDlg.InitialDirectory = ".\\tgeFiles";            // デフォルトのフォルダーの指定
            sfDlg.Title = "ファイルを保存";    //ダイアログのタイトルを指定する
            sfDlg.OverwritePrompt = true;    //上書き確認
            if(sfDlg.ShowDialog() == DialogResult.Cancel)    //ダイアログを表示する
            {
                MessageBox.Show("キャンセルされました。", "キャンセル", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else
            {
                //ファイル名を記録
                tssl[1].Text = sfDlg.FileName;
                tssl[1].ToolTipText = sfDlg.FileName;    //ToolTip設定
                //ファイル保存処理
                tge.ExeList.FileName = tssl[1].Text;
                tge.ExeList.WriteFile();
            }
            //オブジェクトを破棄する
            sfDlg.Dispose();
        }

        //「終了」処理
        private void OnExit_Click(object sender, EventArgs e)
        {
            Close();    //修了確認はOnClosingメソッドで行う
        }

        //「命令セット作成」処理
        private void OnSetEdit_Click(object sender, EventArgs e)
        {
            //CmdSetDlgによる命令セットの作成
            CmdSetDlg csd = new CmdSetDlg();    //引数無し(新規作成)
            if(csd.ShowDialog(this) == DialogResult.OK)
            {
                tge.CmdList.AddSet(csd.Tgs);    //作成したTGSetはCmdListに追加する
            }
            csd.Dispose();
        }

        //「命令リスト編集」処理
        private void OnListEdit_Click(object sender, EventArgs e)
        {
            //CmdListDlgによる命令セットの編集
            CmdListDlg cld = new CmdListDlg(tge, 1);
            if(cld.ShowDialog(this) == DialogResult.OK)
            {
                MessageBox.Show("命令リストが編集されました", "確認", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            cld.Dispose();
        }

        //「実行リスト編集」処理
        private void OnExeListEdit_Click(object sender, EventArgs e)
        {
            //CmdListDlgによる命令セットの編集
            CmdListDlg cld = new CmdListDlg(tge, 2);
            if(cld.ShowDialog(this) == DialogResult.OK)
            {
                MessageBox.Show("実行リストが編集されました", "確認", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            cld.Dispose();
        }

        //「命令セット実行」処理
        private void OnSetExe_Click(object sender, EventArgs e)
        {
            //CmdListDlgによる命令セットの選択
            CmdListDlg cld = new CmdListDlg(tge, 0);
            if(cld.ShowDialog(this) == DialogResult.OK)
            {
                //描画初期化
                tge.Reset();
                tge.CmdList.GetSet(cld.Selection).DoThis();
            }
            cld.Dispose();
        }

        //「実行リスト実行」処理
        private void OnExe_List_Click(object sender, EventArgs e)
        {
            //描画初期化
            tge.Reset();
            tge.ExeList.DoSet();
        }

        //「使い方」処理(解説:本当はもっと素敵な表示にしたかったのですが...手抜きでした。)
        private void OnHowtoUse_Click(object sender, EventArgs e)
        {
            MessageBox.Show("TGEditorはNakov.TurtleGraphics用の描画エディターです。\r\n\r\n" +
            "LOGOベースの描画命令を纏めた「命令セット」、その一覧である「命令リスト」及び" +
            "指定する「命令セット」で繰り返しを含め実行順を定めた「実行リスト」を編集し、" +
            "「命令セット」単体や「実行リスト」を実行してウィンドウに描画します。\r\n\r\n" +
            "出来上がった「命令リスト」、「実行リスト」は\"*.tge\"ファイルにすることができ" +
            "\"*.tge\"ファイルで起動したり、また起動後もドラッグアンドドロップすることができます。\r\n\r\n" +
            "【TurtleGraphicsメソッド】\r\n" +
            "Init(arg)-タートルグラフィックスシステムを初期化します。argは描画対象のFormsコントロールで、指定しない場合、アクティブなフォームが描画領域となります。\r\n" +
            "Dispose() / Reset()-タートルグラフィックスシステムを破棄し、関連するすべてのリソースを解放します。\r\n" +
            "Forward(arg)-現在の方向に亀をarg1ピクセル前進させ、ペンが下がっている場合線を描きます。\r\n" +
            "Backward(arg)-現在の方向に亀をarg1ピクセル後退させ、ペンが下がっている場合線を描きます。\r\n" +
            "MoveTo(arg1, arg2)-亀を指定した位置へ移動させます。ペンが下がっている場合線を描きます。\r\n" +
            "Rotate(arg)-現在の向きからarg(度数)亀を回転させます。\r\n" +
            "RotateTo(arg)-亀を指定角度(度数)へ向けます。初期状態の亀の方向(角度)は0度(上向き)です。\r\n" +
            "PenUp()-ペンを描画面から離し、線は描かれません。\r\n" +
            "PenDown()-ペンを描画面に降ろし、線が描かれます。\r\n\r\n" +
            "【TurtleGraphicsプロパティ】\r\n" +
            "X-亀の現在X座標を取得/設定します。初期状態の亀は {0, 0}(画面中央)です。\r\n" +
            "Y-亀の現在Y座標を取得/設定します。初期状態の亀は {0, 0}(画面中央)です。\r\n" +
            "Angle-亀の現在方向(度数)を取得/設定します。(上-0、右-90、下-180、左-270)\r\n" +
            "PenColor-描画色を取得/設定します。既定色はBlue(青)です。\r\n" +
            "PenSize-描画太さ(ピクセル単位)を取得/設定します。規定値は7です。\r\n" +
            "PenVisible-ペンが下がり描画可能であればtrue、ペンが上がればfalseとなります。\r\n" +
            "ShowTurtle-亀の表示可否を取得/設定します。規定値は表示可です。\r\n" +
            "Delay-移動/回転後の待機時間(ミリ秒)を取得/設定します。規定値は0です。",
            "簡単な説明", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        //「ショートカットキー」処理
        private void OnShortcutKey_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Ctrl+N-新規作成\r\nCtrl+O-ファイルを開く\r\n" +
            "Ctrl+S-ファイルの保存\r\nCtrl+P-印刷\r\nCtrl+X-終了\r\n\r\n" +
            "Ctrl+T-命令セット編集\r\nCtrl+L-命令リスト編集\r\nCtrl+E-実行リスト編集\r\n\r\n" +
            "Ctrl+H-使い方\r\nF1-ショートカットキーの解説\r\nF2-バージョン情報",
            "ショートカットキーの解説", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        //「バージョン」処理
        private void OnVersion_Click(object sender, EventArgs e)
        {
            VersionDlg verDlg = new VersionDlg(this.Icon);    //Versionダイアログ表示
            verDlg.ShowDialog();
            verDlg.Dispose();
        }
    }

    /////////////////////
    //Version ダイアログ
    /////////////////////

    class VersionDlg : Form
    {
        public VersionDlg(Icon ico)
        {
            //ダイアログの属性設定
            this.Text = "バーション情報";
            this.ClientSize = new Size(320, 100);
            this.MaximizeBox = false;        // 最大化ボタン
            this.MinimizeBox = false;        // 最小化ボタン
            this.ShowInTaskbar = false;        //タスクバー上表示
            this.FormBorderStyle = FormBorderStyle.FixedDialog;        // 境界のスタイル
            this.StartPosition = FormStartPosition.CenterParent;    // 親フォームの中央に配置
            //コントロールの属性設定
            Button btnOK = new Button();
            btnOK.Size = new Size(40, 28);
            btnOK.Location = new Point(ClientSize.Width - btnOK.Width - 10, (ClientSize.Height - btnOK.Height) / 2);
            btnOK.Text = "OK";
            btnOK.Click += new EventHandler(OnOK_Click);
            Label imglabel = new Label();
            imglabel.Size = new Size(40, 40);
            imglabel.Location = new Point(10, (ClientSize.Height - imglabel.Height) / 2);
            imglabel.BorderStyle = BorderStyle.Fixed3D;
            imglabel.Image = ico.ToBitmap();                        //親のシステムアイコン
            Label label = new Label();
            label.Size = new Size(ClientSize.Width - imglabel.Width - btnOK.Width - 40, ClientSize.Height- 20);
            label.Location = new Point(imglabel.Width + 20, (ClientSize.Height - label.Height) / 2);
            label.BorderStyle = BorderStyle.Fixed3D;
            label.Text = "TGEditor Version 1.0\r\nCopyright (c) 2026 by Ysama\r\n(written in Microsoft C#)";
            label.TextAlign = ContentAlignment.MiddleCenter;
            label.Font = new Font("Times New Roman", 10, FontStyle.Bold);
            this.Controls.Add(btnOK);
            this.Controls.Add(imglabel);
            this.Controls.Add(label);
        }

        private void OnOK_Click(object sender, EventArgs e)
        {
            Close();
        }
    }
}
 

はー、しんど。

 

書く方も大変です。次回からは(絵心のない私ですが)少し使い方をやってみましょうか?

 

さーて、前回で書いた通り、最後の「器プログラム」でプログラムの解説を終了します。今後は自分で使ってみた印象や改良点(てか、もうまた仕様変更しちゃったのですが...テヘ)と番外編が続きます。(尚、また字数制限に引っかかったので分割します。)

 

【TGEditor.cs】

///////////////////////////////
//        TGEditor.cs
// Copyright (c) 2026 by ysama
///////////////////////////////

using System;
using System.Windows.Forms;
using System.Drawing;
using System.Reflection;                //Assemblyを使う為
using System.Resources;                    //リソース関係クラス等の使用の為
using System.IO;                        //File.ReadAllText使用の為
using System.Text;                        //Encoding.GetEncoding使用の為
using TGE;                                //TGEditクラス使用の為(解説:これがTurtleGraphics機能の肝、になります。)

namespace TGEditor
{
    public class tgEditor : Form
    {
        //クラスメンバーフィールド
        Assembly myOwn = Assembly.GetEntryAssembly();
        TGEdit tge;        //TGEditクラスインスタンス(解説:まだメモリーに生成していないので、「ポインター」の状態です。)
        //クラスメンバーコントロール
        MenuStrip menuStrip;                        //メニュー
        ToolStrip toolStrip;                        //ツールバー
        ToolStripButton[] tsButton;                    //ツールバーボタン
        StatusStrip statusStrip;                    //ステータスバー
        ToolStripStatusLabel[] tssl;                //ステータスバーラベル

        [STAThread]
        public static void Main()                    //エントリーポイント
        {
            Application.Run(new tgEditor());
        }

        public tgEditor()                            //コンストラクター
        {
            this.Icon = Icon.ExtractAssociatedIcon(myOwn.Location);    //プログラムアイコン
            this.Size = new Size(960, 640);
            this.MinimumSize = new Size(480, 320);
            this.Text = "TGEditor";
            //Drag and Dropでの処理
            this.AllowDrop = true;
            this.DragEnter += tgEditor_DragEnter;
            this.DragDrop += tgEditor_DragDrop;
            //起動時処理
            this.Load += tgEditor_Load;
            //TGEditクラスインスタンス作成と描画初期化
            tge = new TGEdit(this);
            tge.Reset();
            //*.tgeファイル用ディレクトリーの作成(初回のみ)
            Directory.CreateDirectory(".\\tgeFiles");    //解説:既にフォールダーがある場合でも例外処理にはなりません。
        }

        private void tgEditor_Load(object sender, EventArgs e)
        {
            //フォームのレイアウトを一時停止
            this.SuspendLayout();
            //ツールバーとステータスバーの設定
            MakeBars();
            //メニューの作成(MenuStripはコントロールであり、上からの並びはDock投入のFILO順となる)
            MakeMenu();
            //フォームのレイアウトを再開
            this.ResumeLayout(false);
            this.PerformLayout();
            //命令セットライブラリー(CmdList.tge)を読み込む(解説:命令セットライブラリーは一応システム管理)
            tge.CmdList.FileName = ".\\tgeFiles\\CmdList.tge";
            tge.CmdList.ReadFile();
            //起動時の引数をチェックし、引数にファイル名があればそれを読み込む(解説:これはExeListとなります。)
            string[] arg = System.Environment.GetCommandLineArgs();
            if(arg.Length > 1)
            {
                if(Path.GetExtension(arg[arg.Length - 1]) == ".tge")
                {
                    //(複数投入であれば最後の)ファイル名を記録
                    tssl[1].Text = arg[arg.Length - 1];
                    tssl[1].ToolTipText = arg[arg.Length - 1];    //ToolTip設定
                    //ExeListを初期化、ファイル読み込み
                    tge.ExeList.Clear();
                    tge.ExeList.FileName = tssl[1].Text;
                    tge.ExeList.ReadFile();
                }
                else
                {
                    //エラー処理
                    MessageBox.Show("タートルグラフィックデータファイル(*.tge)ではありません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        //メニューの作成
        private void MakeMenu()
        {
            //メインメニュー作成
            menuStrip = new MenuStrip();
            menuStrip.SuspendLayout();
            //メインメニューアイテム付加
            ToolStripMenuItem miFile = new ToolStripMenuItem();        //「ファイル」メニュー
            miFile.Text = "ファイル(&F)";
            menuStrip.Items.Add(miFile);
            ToolStripMenuItem miEdit = new ToolStripMenuItem();        //「編集」メニュー
            miEdit.Text = "編集(&E)";
            menuStrip.Items.Add(miEdit);
            ToolStripMenuItem miExeTG = new ToolStripMenuItem();    //「実行」メニュー
            miExeTG.Text = "実行(&E)";
            menuStrip.Items.Add(miExeTG);
            ToolStripMenuItem miHelp = new ToolStripMenuItem();        //「ヘルプ」メニュー
            miHelp.Text = "ヘルプ(&H)";
            menuStrip.Items.Add(miHelp);
            //「ファイル」メニューアイテム付加
            ToolStripMenuItem miNew = new ToolStripMenuItem();        //「新規」メニューアイテム
            miNew.Text = "実行ファイルの新規作成(&N)";
            miNew.Click += OnNew_Click;
            miNew.ShortcutKeys = Keys.Control | Keys.N;
            miFile.DropDownItems.Add(miNew);
            ToolStripMenuItem miOpen = new ToolStripMenuItem();        //「開く」メニューアイテム
            miOpen.Text = "実行ファイルを開く(&O)";
            miOpen.Click += OnOpen_Click;
            miOpen.ShortcutKeys = Keys.Control | Keys.O;
            miFile.DropDownItems.Add(miOpen);
            ToolStripMenuItem miSave = new ToolStripMenuItem();        //「保存」メニューアイテム
            miSave.Text = "実行ファイルを保存(&S)";
            miSave.Click += OnSave_Click;
            miSave.ShortcutKeys = Keys.Control | Keys.S;
            miFile.DropDownItems.Add(miSave);
            ToolStripMenuItem miSaveAs = new ToolStripMenuItem();    //「名前を付けて保存」メニューアイテム
            miSaveAs.Text = "実行ファイルを名前を付けて保存(&A)";
            miSaveAs.Click += OnSaveAs_Click;
            miSaveAs.ShortcutKeys = Keys.Control | Keys.A;
            miFile.DropDownItems.Add(miSaveAs);
            miFile.DropDownItems.Add(new ToolStripSeparator());        //セパレーター
            ToolStripMenuItem miExit = new ToolStripMenuItem();        //「終了」メニューアイテム
            miExit.Text = "終了(&X)";
            miExit.Click += OnExit_Click;
            miExit.ShortcutKeys = Keys.Control | Keys.X;
            miFile.DropDownItems.Add(miExit);
            //「編集」メニューアイテム付加
            miEdit.DropDownItems.Add(new ToolStripSeparator());        //セパレーター
            ToolStripMenuItem miSetEdit = new ToolStripMenuItem();    //「命令セット作成」メニューアイテム
            miSetEdit.Text = "命令セット作成(&T)";
            miSetEdit.Click += OnSetEdit_Click;
            miSetEdit.ShortcutKeys = Keys.Control | Keys.T;
            miEdit.DropDownItems.Add(miSetEdit);
            ToolStripMenuItem miListEdit = new ToolStripMenuItem();    //「命令リスト編集」メニューアイテム
            miListEdit.Text = "命令リスト編集(&L)";
            miListEdit.Click += OnListEdit_Click;
            miListEdit.ShortcutKeys = Keys.Control | Keys.L;
            miEdit.DropDownItems.Add(miListEdit);
            miEdit.DropDownItems.Add(new ToolStripSeparator());        //セパレーター
            ToolStripMenuItem miExeList = new ToolStripMenuItem();    //「実行リスト編集」メニューアイテム
            miExeList.Text = "実行リスト編集(&E)";
            miExeList.Click += OnExeListEdit_Click;
            miExeList.ShortcutKeys = Keys.Control | Keys.E;
            miEdit.DropDownItems.Add(miExeList);
            //「実行」メニューアイテム付加
            ToolStripMenuItem miSetExe = new ToolStripMenuItem();    //「命令セット実行」メニューアイテム
            miSetExe.Text = "命令セット実行(&T)";
            miSetExe.Click += OnSetExe_Click;
            miExeTG.DropDownItems.Add(miSetExe);
            miExeTG.DropDownItems.Add(new ToolStripSeparator());        //セパレーター
            ToolStripMenuItem miExe_List = new ToolStripMenuItem();    //「実行リスト実行」メニューアイテム
            miExe_List.Text = "実行リスト実行(&E)";
            miExe_List.Click += OnExe_List_Click;
            miExeTG.DropDownItems.Add(miExe_List);
            //「ヘルプ」メニューアイテム付加
            ToolStripMenuItem miHowtoUse = new ToolStripMenuItem();    //「使い方」メニューアイテム
            miHowtoUse.Text = "使い方(&H)";
            miHowtoUse.Click += OnHowtoUse_Click;
            miHowtoUse.ShortcutKeys = Keys.Control | Keys.H;
            miHelp.DropDownItems.Add(miHowtoUse);
            ToolStripMenuItem miShortcutKey = new ToolStripMenuItem();    //「ショートカットキー」メニューアイテム
            miShortcutKey.Text = "ショートカットキー(&S)";
            miShortcutKey.Click += OnShortcutKey_Click;
            miShortcutKey.ShortcutKeys = Keys.F1;
            miHelp.DropDownItems.Add(miShortcutKey);
            ToolStripMenuItem miVer = new ToolStripMenuItem();        //「バージョン」メニューアイテム
            miVer.Text = "バージョン(&V)";
            miVer.Click += OnVersion_Click;
            miVer.ShortcutKeys = Keys.F2;
            miHelp.DropDownItems.Add(miVer);
            //メインメニューに設定して表示
            this.MainMenuStrip = menuStrip;
            this.Controls.Add(menuStrip);
            menuStrip.ResumeLayout(false);
            menuStrip.PerformLayout();
        }

        //ツールバーとステータスバーの作成
        private void MakeBars()
        {
            //ToolStripクラスインスタンスの生成
            this.toolStrip = new ToolStrip();
            //ツールバーのレイアウトを一時停止
            this.toolStrip.SuspendLayout();
            //ToolStripButton配列を作成
            this.tsButton = new ToolStripButton[11];
            //解説:以下がリソース(ツールバービットマップ)の準備処理です。

            //本プログラムの埋め込みリソースのリソースマネージャーを作成
            ResourceManager rm = new ResourceManager("TGEditor", myOwn);
            //ツールバービットマップの読み込み
            ImageList imgList = new ImageList();
            imgList.ImageSize = new Size(16, 15);
            imgList.Images.AddStrip((Bitmap)rm.GetObject("tgToolBar"));
            imgList.TransparentColor = Color.FromArgb(0xFF, 0xFF, 0xFF);    //tgToolBar.bmpの背景色

            //ToolStripButton[0]を作成
            this.tsButton[0] = new ToolStripButton();
            this.tsButton[0].Text = "実行ファイル新規作成";                    //テキスト設定
            this.tsButton[0].Image = (Bitmap)imgList.Images[0];                //画像設定
            this.tsButton[0].DisplayStyle = ToolStripItemDisplayStyle.Image;    //画像表示のみ
            this.tsButton[0].Click += OnNew_Click;                            //Clickイベントハンドラ追加(解説:メニュー連動、以下同じ。)
            this.toolStrip.Items.Add(this.tsButton[0]);                        //ボタンを追加
            //ToolStripButton[1]を作成
            this.tsButton[1] = new ToolStripButton();
            this.tsButton[1].Text = "実行ファイルを開く";                    //テキスト設定
            this.tsButton[1].Image = (Bitmap)imgList.Images[1];                //画像設定
            this.tsButton[1].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[1].Click += OnOpen_Click;                            //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[1]);                        //ボタンを追加
            //ToolStripButton[2]を作成
            this.tsButton[2] = new ToolStripButton();
            this.tsButton[2].Text = "実行ファイルの保存";                    //テキスト設定
            this.tsButton[2].Image = (Bitmap)imgList.Images[2];                //画像設定
            this.tsButton[2].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[2].Click += OnSave_Click;                            //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[2]);                        //ボタンを追加
            //セパレーターを挿入
            this.toolStrip.Items.Add(new ToolStripSeparator());
            //ToolStripButton[3]を作成
            this.tsButton[3] = new ToolStripButton();
            this.tsButton[3].Text = "終了";                                    //テキスト設定
            this.tsButton[3].Image = (Bitmap)imgList.Images[3];                //画像設定
            this.tsButton[3].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[3].Click += OnExit_Click;                            //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[3]);                        //ボタンを追加
            //セパレーターを挿入
            this.toolStrip.Items.Add(new ToolStripSeparator());
            //ToolStripButton[4]を作成
            this.tsButton[4] = new ToolStripButton();
            this.tsButton[4].Text = "命令セット作成";                        //テキスト設定
            this.tsButton[4].Image = (Bitmap)imgList.Images[4];                //画像設定
            this.tsButton[4].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[4].Click += OnSetEdit_Click;                        //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[4]);                        //ボタンを追加
            //ToolStripButton[5]を作成
            this.tsButton[5] = new ToolStripButton();
            this.tsButton[5].Text = "命令リスト編集";                        //テキスト設定
            this.tsButton[5].Image = (Bitmap)imgList.Images[5];                //画像設定
            this.tsButton[5].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[5].Click += OnListEdit_Click;                        //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[5]);                        //ボタンを追加
            //ToolStripButton[6]を作成
            this.tsButton[6] = new ToolStripButton();
            this.tsButton[6].Text = "実行リスト編集";                        //テキスト設定
            this.tsButton[6].Image = (Bitmap)imgList.Images[6];                //画像設定
            this.tsButton[6].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[6].Click += OnExeListEdit_Click;                    //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[6]);                        //ボタンを追加
            //セパレーターを挿入
            this.toolStrip.Items.Add(new ToolStripSeparator());
            //ToolStripButton[7]を作成
            this.tsButton[7] = new ToolStripButton();
            this.tsButton[7].Text = "命令セット実行";                        //テキスト設定
            this.tsButton[7].Image = (Bitmap)imgList.Images[7];                //画像設定
            this.tsButton[7].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[7].Click += OnSetExe_Click;                        //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[7]);                        //ボタンを追加
            //ToolStripButton[8]を作成
            this.tsButton[8] = new ToolStripButton();
            this.tsButton[8].Text = "実行リスト実行";                        //テキスト設定
            this.tsButton[8].Image = (Bitmap)imgList.Images[8];                //画像設定
            this.tsButton[8].DisplayStyle = ToolStripItemDisplayStyle.Image;//画像表示のみ
            this.tsButton[8].Click += OnExe_List_Click;                    //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[8]);                        //ボタンを追加
            //セパレーターを挿入
            this.toolStrip.Items.Add(new ToolStripSeparator());
            //ToolStripButton[9]を作成
            this.tsButton[9] = new ToolStripButton();
            this.tsButton[9].Text = "使い方";                                //テキスト設定
            this.tsButton[9].Image = (Bitmap)imgList.Images[9];            //画像設定
            this.tsButton[9].DisplayStyle = ToolStripItemDisplayStyle.Image;    //画像表示のみ
            this.tsButton[9].Click += OnHowtoUse_Click;                        //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[9]);                    //ボタンを追加
            //ToolStripButton[10]を作成
            this.tsButton[10] = new ToolStripButton();
            this.tsButton[10].Text = "バージョン情報(&V)";                    //テキスト設定
            this.tsButton[10].Image = (Bitmap)imgList.Images[10];            //画像設定
            this.tsButton[10].DisplayStyle = ToolStripItemDisplayStyle.Image;    //画像表示のみ
            this.tsButton[10].Click += OnVersion_Click;                        //Clickイベントハンドラ追加
            this.toolStrip.Items.Add(this.tsButton[10]);                    //ボタンを追加
            //ツールバーの設定
            this.Controls.Add(this.toolStrip);
            //ツールバーのレイアウトを再開
            this.toolStrip.ResumeLayout(false);
            this.toolStrip.PerformLayout();

            //StatusStripクラスインスタンスの生成
            this.statusStrip = new StatusStrip();
            //ステータスバーにパネルとテキストを追加
            tssl = new ToolStripStatusLabel[2];
            tssl[0] = new ToolStripStatusLabel();
            tssl[0].BorderSides = ToolStripStatusLabelBorderSides.All;
            tssl[0].BorderStyle = Border3DStyle.SunkenInner;
            tssl[0].BackColor = SystemColors.Control;
            tssl[0].Text = "TGEditor Ver. 1.0";
            tssl[0].AutoSize = true;
            tssl[0].TextAlign = ContentAlignment.MiddleLeft;
            tssl[1] = new ToolStripStatusLabel();
            tssl[1].BorderSides = ToolStripStatusLabelBorderSides.All;
            tssl[1].BorderStyle = Border3DStyle.SunkenInner;
            tssl[1].BackColor = SystemColors.Control;
            tssl[1].TextAlign = ContentAlignment.MiddleLeft;
            tssl[1].Text = "(ファイル名)";
            tssl[1].ToolTipText = "(ファイル名)";                            //ToolTip設定
            tssl[1].Spring = true;
            statusStrip.Items.AddRange(tssl);
            statusStrip.ShowItemToolTips = true;                            //ToolTip表示
            this.Controls.Add(this.statusStrip);                            //StatusStrip(ステータスバー)を追加
        }

        //ドラッグされた時
        private void tgEditor_DragEnter(object sender, DragEventArgs e)
        {
            if(e.Data.GetDataPresent(DataFormats.FileDrop))
            {
                e.Effect = DragDropEffects.Copy;
            }
        }

        //ドロップされたとき
        private void tgEditor_DragDrop(object sender, DragEventArgs e)
        {
            //ドロップされたファイルパスを取得
            string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
            if(files.Length > 0)
            {
                if(Path.GetExtension(files[files.Length - 1]) == ".tge")
                {
                    //ファイル名を記録
                    tssl[1].Text = files[files.Length - 1];
                    tssl[1].ToolTipText = files[files.Length - 1];    //ToolTip設定
                    //ExeListを初期化、ファイル読み込み
                    tge.ExeList.Clear();
                    tge.ExeList.FileName = tssl[1].Text;
                    tge.ExeList.ReadFile();
                }
                else    //エラー処理
                    MessageBox.Show("タートルグラフィックデータファイル(*.tge)ではありません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }