Webbrowserのアイコン表示の名前の変更と表示の変更

解決


横山  2012-07-08 23:21:10  No: 42564

よろしくお願いします。
windows7  Delphi  6  personalです。
Webbrowserの勉強をしています。

Form1にTWebbrowserを貼り付けて、
画像のあるフォルダパスにナビゲートすると
WebBrowser1.Navigate('c:\xxxx(画像のあるフォルダパス)');
Imageのアイコンを表示してくれます。

質問1
表示しているイメージのアイコンを右クリックするとデフォルトの
ブラウザーのポップアップメニューが開きます。
このメニューの「名前の変更」を実行したいのですが、入力さえ受け付けてくれません。
ReadOnlyプロパティも見あたらないので、どうしたら名前の変更が
可能になるのか教えてくれませんか。

質問2:
前記の続きでアイコンを表示している画面のアイコンではない空白の部分を右クリックすると
デフォルトのポップアップメニューに「表示」があり、プルダウンメニューで
アイコンの大きさや、表示の種類を選べますが、
これを、プログラムのソフトでボタンの命令で表示を変える方法はないでしょうか。

以上質問1、質問2のどちらでもいいです。よろしくお願いします。


  2012-07-09 00:33:04  No: 42565

その1
https://www.petitmonte.com/bbs/answers?question_id=6369

その2
https://www.petitmonte.com/bbs/answers?question_id=5582

とりあえずこの辺見てみては。


横山  2012-07-09 01:58:21  No: 42566

あさんありがとうございました。
質問1:は完動です。
質問2はやや完動です。
ご指摘のサイトの例ではアイコンが消えないため、やや不完全です。
上のコメント部分です。
他のサイトで見つけたのがありまして、それはほぼ正常に作動します。
出来れば、windows7から見かけた特大のアイコンがあれば言うこと無しですが。コンスタントをめくらめっぽうやってみましたが当たらないです。

procedure TForm1.mSamnaileClick(Sender: TObject);
{var
 h : HWND ;
 GWLSTYLE : Longint;
 LVS : Word;
begin

    if Sender=mSamnaile then LVS := LVS_ICON
    else
    if Sender=mTitle then  LVS :=LVS_REPORT
    else
    if Sender=mIcon then  LVS := LVS_SMALLICON
    else
    if Sender=mList then  LVS := LVS_LIST
    else
    if Sender=mReport then LVS:= LVS_TYPEMASK;

  h := FindWindowEx(WebBrowser1.Handle , 0, 'SHELLDLL_DefView', nil);
  h := FindWindowEx(h, 0, 'SysListView32', nil);
  GWLSTYLE := GetWindowLong(h,GWL_STYLE);
  GWLSTYLE := GWLSTYLE and (not LVS_TYPEMASK);
  GWLSTYLE := GWLSTYLE or LVS ;
  SetWindowLong(h,GWL_STYLE,GWLSTYLE );
}
const
  SHVIEW_Default    = 0;
  SHVIEW_ICON      = $7029;
  SHVIEW_LIST      = $702B;
  SHVIEW_REPORT    = $702C;
  SHVIEW_THUMBNAIL = $702D;
  SHVIEW_TILE      = $702E;
  SHVIEW_SLIDE     = $702F;
var
    AViewStyle : Integer;
begin
    if Sender=mSamnaile then begin
     AViewStyle := SHVIEW_THUMBNAIL;
    end else
    if Sender=mTile then begin
      AViewStyle := SHVIEW_TILE;
    end else
    if Sender=mIcon then begin
      AViewStyle := SHVIEW_ICON;
    end else
    if Sender=mList then begin
      AViewStyle := SHVIEW_LIST;
    end else
    if Sender=mReport then begin
     AViewStyle := SHVIEW_REPORT;
    end;
    if Sender=mDefault then begin
     AViewStyle := SHVIEW_Default;
    end;

    SendMessage(Webbrowser1.Handle,WM_COMMAND,AViewStyle,0);
end;


Nov  2012-07-10 13:00:33  No: 42567

もう、見ないかもしれませんが、覚書として。
'SHELLDLL_DefView'でWM_COMMANDをキャプチャしたところ、
  SHV_ICON_LL = $704D;  // 特大アイコン
  SHV_ICON_L  = $704F;  // 大アイコン
  SHV_ICON_M  = $704E;  // 中アイコン
  SHV_ICON_S  = $7050;  // 小アイコン
  SHV_LIST    = $7051;  // 一覧
  SHV_DETAIL  = $704B;  // 詳細
  SHV_SIDEBY  = $704C;  // 並べる
でした(定数名は勝手に命名)。
オーナー(Webbrowser1)ハンドルに送っても同じ動作でした。


横山  2012-07-10 23:55:15  No: 42568

Novさん、貴重な情報をありがとうございました。
しばらく自分のコード作成に夢中になり見ませんでした、
大変遅くなりすみません。
ありがたく利用させていただきます。
では。<(_ _)>


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

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






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