掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
お気に入りをメニューに追加するには? (ID:13018)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
今作っているブラウザのメニューにお気に入りのメニューを 追加したいのです。動的メニューの追加の方法は検索して 見つけたのですが、お気に入りで言うフォルダ部分を 表現するためのサブメニューがうまく作れなくて困っています。 →本家Actyでは実装している機能なのですが・・・(T_T) 今テストで作っているコードを載せます。 取り込むお気に入りのファイル形式はDelphi初めの一歩(delphi.sakura.vg)の タブブラウザサンプル3と同じです。(階層番号,ページタイトル,URLのテキストファイル) //引数に上位メニューアイテム、Caption、位置を受け取り、 //メニューを追加し、作成したメニューアイテムを返す関数 function TForm1.AddMenu(OwnerMenu : TMenuItem ; Title : AnsiString; Hint: String; Index : Integer; Event: TNotifyEvent) : TMenuItem; var NewItem : TMenuItem; begin NewItem := TMenuItem.Create(self); NewItem.Caption := Title; NewItem.Hint := Hint; NewItem.Visible := true; NewItem.Enabled := true; NewItem.OnClick := Event; OwnerMenu.Insert(Index ,NewItem); result := NewItem; end; procedure TForm1.Button2Click(Sender: TObject); var P:PBookMarkItem; BookMark_TBL : TStringList; LevelA, LevelB, intA, intB, i, n : integer; BookMarkFile, tmpStr, TitleStr : String; begin // まずは初期化 LevelA := 0; LevelB := 0; intB := 0; BookMarkFile := 'BookMark.txt'; BookMark_TBL := TStringList.Create; try // ブックマークファイルがあればリストに取り込む if FileExists('BookMark.txt') <> False then begin BookMark_TBL.LoadFromFile('BookMark.txt'); // ブックマークの終端まで続ける for i := 0 to BookMark_TBL.Count -1 do begin // ブックマークの文字列をワークに格納 tmpStr := BookMark_TBL.Strings[i]; // 'の最初の位置をintAに格納 intA := Pos(',', tmpStr); // ワーク領域の配列番号が1になるまで続ける for n := Length(tmpStr) downto 1 do begin // ワーク領域の配列に'があったとき if tmpStr[n] = ',' then begin // intBに'のある配列番号を格納して抜ける intB := n; break; end; end; try // LevelAにワーク領域の左端の数字を格納する // Copy関数はMid関数とほぼ同じ使い方 LevelA := StrToInt(Copy(tmpStr, 1, intA - 1)); except // エラーが発生した場合はエラー表示をして抜ける on EConvertError do begin MsgBox('ブックマークの読み込みに失敗しました。'); Exit; end; end; // ワーク領域からページのタイトル(,と,の間の文字列)を格納する TitleStr := Copy(tmpStr, intA + 1, intB - intA - 1); // ブックマークを作成 New(P); // ワーク領域からURL(2個目の,1つ先の文字から最後まで)を格納する P^.URL := Copy(tmpStr, intB + 1, Length(tmpSTr) - intB); AddMenu(Favorites1, TitleStr, P^.URL, i, ItemClick); { // LevelAの階層が0以上のとき if LevelB > LevelA then begin // LevelBにLvelAの階層を格納する LevelB := LevelA; // メニューの階層がLvelA以上になるまで while Favorites1.Count > LevelA do begin // メニューを追加 AddMenu(Favorites1, TitleStr, P^.URL, i, ItemClick); end; end // もし、LevelBがLevelA以下のとき else if LevelB < LevelA then begin // メニューを追加 AddMenu(Favorites1, TitleStr, P^.URL, i, ItemClick); // LevelBにLevelAの階層を格納する LevelB := LevelA; end; } end; end; finally // ブックマークを解放する BookMark_TBL.Free; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.