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.
自己レスです
OnTestClickを以下に変えて実行したところ
表示がおかしいボタンのStyleはちゃんとtbsButtonに
なっていることが分かりました。
あと、ボタンの数を増やしたところ、たえず最後の2つのボタンがおかしく
なるようです。
当方には、Delphi2005しかないのですが、ほかのバージョンではどうなのでしょうか?
お分かりの方がいましたら、情報お願いします。
procedure TDataModule1.OnTestClick(Sender: TObject);
begin
ShowMessageFmt('Name:%s'#13'ClassName:%s'#13'Style:%s',
[TControl(Sender).name, Sender.ClassType.ClassName,
GetEnumName(TypeInfo(TToolButtonStyle), Ord(TToolButton(Sender).Style))]);
end;
自己レスです
とりあえず一番最後に1つ余計にダミーのボタンを追加し、すぐに開放すれば正しくボタンが表示されるようになりました。
具体的には、以下の2行を
ToolBar.Visible := True;
の前に追加
ToolButton := IDEServices.AddToolButton(TOOLBAR_NAME,'Dummy',nil ,True) as TToolButton;
ToolButton.Free;
おかけさまで完成しました。
http://www.vector.co.jp/soft/winnt/prog/se491992.html
ツイート | ![]() |