TControlBar に TToolBar を DLL から追加したい


tat  2005-12-18 17:04:19  No: 19300

Windows 2000/Delphi 7 Professional にて
実験用に Main.exe と Plug.dll の2つを作成しました。
Main.exe には、Form1 : TForm の上に ControlBar1 : TControlBar があります。
Plub.dll <--> Main.exe 間で CallBack にて ControlBar1 のハンドルを取得できるようにています。
Exe が起動したら DLL の Show関数を呼び、DLL 側では

procedure Show(); stdcall; export;
begin
 BarHnd       := CallBackGetHandle();  // ExeにControlBarのハンドルを要求
 ToolBar      := TToolBar.Create(Application); // 終了時にApplicationに破棄してもらう
 ParentWindow := BarHnd;    // 親のハンドル(VCL)
 Color        := clBlue;
 Windows.SetParent( ToolBar1.Handle,  BarHnd ); // 親のハンドル(Windows)
end;

としてにて、表示することはできました。
しかし、作成されたToolBarにはグリップが表示されません。
Exe内で
 Tool := TToolBar.Create(Self);
 with Tool do begin
   Parent  := ControlBar1;
   Color   := clRed;
   Align   := alTop;
 end;
とするとグリップが表示されることから、DLL からの場合は、
ControlBarが追加されたことを検知できなない為だと思います。
長文にならないようポイント部に絞ってるので伝わるか心配ですが、どのようにしたら
追加されたToolBarにグリップが表示できるかアドバイスをお願いします。


.  2005-12-20 22:15:49  No: 19301

私ならTClassで渡しexe側でcreateします


tat  2005-12-22 05:31:28  No: 19302

アドバイスありがとうございます。
>TClassで渡しexe側でcreate

DLLでツールバーを作成するのではなく、Exeに作らせるという手段で、
//ToolBarを作成するCallBack関数をExe側に用意
function CreateToolBar(): THandle; stdcall;

DLL側で、ロードされたタイミングで Panelと配下のボタンのインスタンスを作成
DLLからExeのCreateToolBarをCallBackし、ツールバーのハンドルを取得
Panel.ParentWindow := ツールバーのハンドル;

という手順で、グリップを表示したいという目的は達成できました。

しかし、このままでは、単にToolBarを作るだけとなっています。
EdgeやWrapable等のプロパティを設定するために、引数もしくは構造体なりを受け渡す手段が必要になります。

と、ここまで書いて、
. さんのアドバイスにある、TClass を渡して、ExeでCreateするという手法ではない事に気づきました。思い込みで突っ走ってました

TClass を渡して、ExeでCreate するのは、どのような事でしょうか。

最初の質問時に巧い例えが出ませんでしたが、こんな感じです。

Intenet Explorer のコントロールバーには、ツールバーとアドレスバーがありますが、このツールバーとアドレスバーをDLLで搭載できないかと勉強中です。
(あくまでも画面のレイアウトのネタで、ブラウザを作るわけじゃないのでIEコンポ等の話は無視しちゃってください)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加