掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
DELPHIのIDEにOpenToolsAPIでツールバーを追加するには (ID:40651)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
DelphiのIDEにMS_OfficeのVBAエディタのブックマーク機能っぽいのを実装しようとして OpenToolsAPIを使用し、ToolBarの追加を行ったところ、ToolButtonが正しく表示されません。 お分かりになる方がおられれば、改善個所を指摘いただければ幸いです。 環境 DELPHI2005 update3 WindowsXP SP3 やったこと パッケージの新規作成を選択 パッケージのソースを表示し、Requiresに designide, vclを追加 プロジェクトに新規データモジュールを追加 データモジュールに以下に示すソースコードを記述 プロジェクトの右クリックからインストールを選択 結果 ツールバーが追加されたことは確認できた ツールバーにボタンが3つあって、それぞれクリックイベントが設計通り実行された 問題 1つ目のボタン以外、正しく表示されない ボタンが小さかったり、Dividerのままだったり 2つ目3つ目のボタンが、いろいろ試してみましたが正しく表示されません。 改善する方法がお分かりの方がいましたら、よろしくお願いします。 unit Unit1; interface uses SysUtils, Classes, Controls, ToolsAPI, Dialogs, ComCtrls; procedure Register; const TOOLBAR_NAME = 'TEST'; type TDataModule1 = class(TDataModule) procedure DataModuleDestroy(Sender: TObject); procedure DataModuleCreate(Sender: TObject); private { Private 宣言 } procedure OnTestClick(Sender: TObject); public { Public 宣言 } end; var DataModule1: TDataModule1; implementation {$R *.dfm} procedure TDataModule1.DataModuleCreate(Sender: TObject); var IDEServices: INTAServices; ToolBar: TToolBar; ToolButton: TToolButton; begin IDEServices := (BorlandIDEServices as INTAServices); ToolBar := IDEServices.NewToolbar(TOOLBAR_NAME, '編集(ユーザ定義)'); Assert(Assigned(Toolbar), 'ユーザ定義のツールバーの作成に失敗しました'); //第4引数をTrueにすればStyle=tbsDividerとなるが、第3引数の設定が不要になる //第4引数をFalseにするとTSpeedButtonが作成され、第3引数にTActionを設定しなければいけない ToolButton := IDEServices.AddToolButton(TOOLBAR_NAME,'SetBookmark',nil ,True) as TToolButton; ToolButton.Style := tbsButton; ToolButton.OnClick := OnTestClick; ToolButton := IDEServices.AddToolButton(TOOLBAR_NAME,'NextBookmark',nil ,True) as TToolButton; ToolButton.Style := tbsButton; ToolButton.OnClick := OnTestClick; ToolButton := IDEServices.AddToolButton(TOOLBAR_NAME,'PrevBookmark',nil ,True) as TToolButton; ToolButton.Style := tbsButton; ToolButton.OnClick := OnTestClick; ToolBar.Visible := True; end; procedure TDataModule1.OnTestClick(Sender: TObject); begin ShowMessageFmt('Name:%s, ClassName:%s',[TControl(Sender).name, Sender.ClassType.ClassName]); end; procedure Register; begin DataModule1 := TDataModule1.Create(nil); end; procedure TDataModule1.DataModuleDestroy(Sender: TObject); var IDEServices: INTAServices; EditToolBar: TToolBar; begin IDEServices := (BorlandIDEServices as INTAServices); EditToolbar := IDEServices.ToolBar[TOOLBAR_NAME]; if Assigned(EditToolbar) then EditToolBar.Free; end; procedure UnRegister; begin DataModule1.Free; end; initialization finalization UnRegister; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.