2ヶ月以上も放置してました…少しはやってたんですけど、マザーボード買い替えやらその設定やらで時間を取られまくってたもんで
少しずつですが完成に近づいている……と、思うんですが。
この右クリックのメニューてのが割と厄介だったなぁ。何せ、全部で一個のポップアップメニューを使おうとすると、どのボタンで呼び出したのか解らない……TPopupMenu.OnClick イベントは、この場合 Sender にはホップアップメニュー自体が入るのだよ。かと言って、ボタン毎にメニューを作成してイベントハンドラだけを共有するってのも……。
なんてコトを考えてたら、TPopupMenu.PopupComponent と言うプロパティには呼び出したコンポーネントが格納されているではないか! 素晴らしい!! 従って、TPopupMenu.OnClickのハンドラを次のように記述する事ができるのだ。
procedure TfrmHM_Main.DeleteButton(Sender: TObject); var Btn: TCommandButton; Bar: TCommandBar; begin Btn := pumCmdBtn.PopupComponent as TCommandButton; Bar := Btn.Conteiner; Btn.Delete; (* ボタンが無くなればバンドも消去する *) if (Bar.Count=0) then ToolBars.Remove(Bar) else Bar.FitToButtonCount; end; |
ちなみに、TAction クラスにはこう言うプロパティは無いみたい……根性無しめ!! 仕方が無いので、左クリックの挙動は、各ボタン(TCommandButton)が所属するバンド(TCommandBar)か、もしくは更にそれらのバンドを管理しているTCommandBarsに処理させるほうが簡単だろう。
未だ実装はしてないが……実装すれば、HTMLエディタとしては最低限、機能するんだけどねぇ。ただ、この辺で少し、インタプリタめいたオブジェクトを作ろうかと画策しているので、完成には程遠いって感じ(笑)
この辺は色々と思考実験しているのだが、引数で渡せない限りは理想的にならないようだ。そうするためには、LoadFromFile だけじゃなく LoadFromStream なんかも作り変えなくちゃ行けない……やってられないわっ。
とにかく実験と言う事で、D-Pixed で書いた 24x24 の画像を WorkShop に貼り付けて、根性でパレットを設定(泣くかと思った)。これで表示できなかったら腹を切って死ぬしかないなと思ったんだが、我がやんごとなき IDE 殿はちゃんと256色で表示してくれました!