DelphiのIDEのメニューのように、CoolBarの上に複数のToolBarを
置いたフォームを作成します。
ToolBarはドラッグして自由に移動できますので、この位置をini
ファイルに保存し、次回起動時に先ほど移動した位置に戻したいと
考えていますが、普通にToolBarのTop,Left,Widthなどを保存した
だけでは上手く復元できないようです。
ToolBarの位置の保存・復元はどのようにすればよいのでしょうか?
先の質問の仕方が分かりにくいかもしれなかったので、
もう少し具体的に書かせていただきます。
例えば、CoolBarの上に下記のようにToolBarが配置してある状態
(以下、Aの状態と呼びます)で、
[ToolBar1][ToolBar2][ToolBar3]
[ToolBar4][ToolBar5 ]
↓
各ToolBarをマウスでドラッグして下記のように移動・リサイズ
させたとします。(この状態をBの状態と呼びます)
[ToolBar3 ][ToolBar4 ]
[ToolBar5][ToolBar2][ToolBar1]
この状態の各ToolBarのTop , Left, Width などの数値をINIファイルに
保存します。
一旦アプリケーションを終了させ、次回起動時(FormCreate時)に
先ほど保存したINIファイルのデータを基に、Aの状態からBの状態に
移動・リサイズさせた状態で表示したいと思っています。
DelphiやExcelではうまくこれが実現できているようなので、実現方法は
あるはずなのですが、各ToolBarの座標情報を保存しただけではうまく
復元できませんでした。
CoolBarやBandの値も考えてみたのですが、それらしい値は見つからず、
途方にくれています。
もしどなたかアイディアだけでもお貸しいただけると助かります。
私はいつもControlBarなので、勘ですが・・・。
CoolBarのWidthとHeightは復元しているのでしょうか。
そうでないなら、CoolBarのAutoSizeをFalseにしてから
CoolBarのWidthとCoolBar.Heightを設定して
その後に、ToolBarのLeft,Top,Width,Heightを設定してみるとか。
必要があれば、最後に CoolBarのAutoSizeをTrueに戻す。
いかがでしょう。
もう遅いかも知れませんが、こんな感じでどうでしょう?
・読込時
for ii:=0 to CoolBar.Bands.Count-1 do begin
iNo := IniFile.ReadInteger(Section, 'CoolBarID' + IntToStr(ii), ii);
CoolBar.Bands.FindItemID(iNo).Index := ii;
CoolBar.Bands[ii].Break := IniFile.ReadBool(Section, 'CoolBarBreak' + IntToStr(ii), True);
CoolBar.Bands[ii].Width := IniFile.ReadInteger(Section, 'CoolBarWidth' + IntToStr(ii), 765);
end;
・書き込み時
for ii:=0 to CoolBar.Bands.Count-1 do begin
IniFile.WriteInteger(Section, 'CoolBarID'+ IntToStr(ii), CoolBar.Bands[ii].ID);
IniFile.WriteBool(Section, 'CoolBarBreak'+ IntToStr(ii), CoolBar.Bands[ii].Break);
IniFile.WriteInteger(Section, 'CoolBarWidth'+ IntToStr(ii), CoolBar.Bands[ii].Width);
end;
ツイート | ![]() |