喫茶XRAYトップページ

[スレッド全体
]

[3353] Re2:ShellExecuteExとCreateProcess関数返信 削除
2010/5/14 (金) 15:53:17 Mr.XRAY
▼ たてぐやさん

>  ファイルの種類(拡張子)を見てアイコンを取得するにはどういう

あっ,これ何か関数がありましたね.
ちょっと待ってください(こればっか)

>漠然とした例ではありますが、

喫茶店にはこういう会話がいいですねぇ.
ちょっと忘れてしまったとか.ヘルプのどこに書いてあるとか.


[3354] Re3:ShellExecuteExとCreateProcess関数返信 削除
2010/5/14 (金) 16:57:54 Mr.XRAY
EXE,DLL等は複数のアイコンを持っていますが,
一般のファイルということでしたら,以下のような関数があります.

//-----------------------------------------------------------------------------
//  指定ファイルのアイコンを表示
//  usesにShellAPIが必要
//-----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  lpiIcon  : WORD;
  hico     : HIcon;
  FilePath : String;
begin
  //自分のアイコンを表示
  FilePath := ExtractFilePath(ParamStr(0)) + 'Project1.exe';

  lpiIcon :=0;
  //アイコンのハンドルを取得
  hIco := ExtractAssociatedIcon(hInstance, PChar(FilePath), lpiIcon);
  if hico <> 0 then begin
    DrawIcon(Canvas.Handle, 0, 0, hico);
  end;
  DestroyIcon(hico);
end;


//-----------------------------------------------------------------------------
//  指定ファイルのアイコンを表示
//  usesにShellAPIが必要
//-----------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var
  FileInfo : SHFILEINFO;
  AIcon    : TIcon;
  FilePath : String;
begin
  //自分のアイコンを表示
  FilePath := ExtractFilePath(ParamStr(0)) + 'Project1.exe';

  //ファイルに関連づいたアイコンの取得
  AIcon := TIcon.Create;
  try
    SHGetFileInfo(PChar(FilePath),
                  FILE_ATTRIBUTE_DIRECTORY,
                  FileInfo,
                  SizeOf(FileInfo),
                  SHGFI_ICON);
    AIcon.Handle:=FileInfo.hIcon;

    Image1.Picture.Assign(AIcon);
  finally
    FreeAndNil(AIcon);
  end;
end;

//-----------------------------------------------------------------------------
//  指定ファイルのアイコンを表示 小さいアイコン
//  usesにShellAPIが必要
//-----------------------------------------------------------------------------
procedure TForm1.Button2Click(Sender: TObject);
var
  FileInfo : SHFILEINFO;
  AIcon    : TIcon;
  FilePath : String;
begin
  //自分のアイコンを表示
  FilePath := ExtractFilePath(ParamStr(0)) + 'Project1.exe';

  //ファイルに関連づいたアイコンの取得
  AIcon := TIcon.Create;
  try
    SHGetFileInfo(PChar(FilePath),
                  FILE_ATTRIBUTE_DIRECTORY,
                  FileInfo,
                  SizeOf(FileInfo),
                  SHGFI_SMALLICON or SHGFI_ICON or SHGFI_SYSICONINDEX);
    AIcon.Handle:=FileInfo.hIcon;

    Image2.Picture.Assign(AIcon);
  finally
    FreeAndNil(AIcon);
  end;
end;


私がよく使用しているのは,後者のSHGetFileInfoです.
ListViewなどにファイルの一覧を表示する場合は,システムのイメージリストを使って

http://mrxray.on.coocan.jp/Delphi/plSamples/790_ListView.htm#05

のような感じのコードを書いています.


[3355] Re4:ShellExecuteExとCreateProcess関数返信 削除
2010/5/14 (金) 17:40:48 Mr.XRAY
> EXE,DLL等は複数のアイコンを持っていますが,

参考までに,EXEやDLLの複数のアイコンを取り出すには以下の関数が
あります.

ExtractIcon
http://msdn.microsoft.com/ja-jp/library/cc410841.aspx

ExtractIconEx
http://msdn.microsoft.com/ja-jp/library/cc410843.aspx


[3356] Re4:ShellExecuteExとCreateProcess関数返信 削除
2010/5/14 (金) 21:59:51 たてぐや
▼ Mr.XRAYさん

 さっそくお調べいただき、ありがとうございます。早急にお礼を、と
思ったのですが、Windows機のディスクチェックを夕方から始めたらまだ
終わっていませんので、これは最近インストールしたCentOSから書いて
います。
 しかしまぁ、MR.XRAYさんの宝箱にはどれだけ宝物が詰まっているので
しょうか? 「こんなのあります?」と聞けば「ちょっと待ってね」と
言ってドンガラガッシャッンと宝箱をひっくりかえして出してくるんだ
もの。Delphiプログラマの貴重な宝島です。
 この件は、ずっと昔にちょっとだけやったことがあり、Imagelistに
格納して、というのはおぼろげな記憶にありましたが、これですっきり
できそうな気がします。ありがとうございました。

[3357] Re5:ShellExecuteExとCreateProcess関数返信 削除
2010/5/15 (土) 07:13:37 Mr.XRAY
▼ たてぐやさん

> 終わっていませんので、これは最近インストールしたCentOSから書いて

どうですか,CentOSは.
Ubuntue入れたけど,最近全く起動していません.

>  しかしまぁ、MR.XRAYさんの宝箱にはどれだけ宝物が詰まっているので

うまいこと言いますね.
でもたまたまです.この手のテストは結構していますから.
どうしても,簡易エクスプローラみたいのが欲しかったのです.
本当はDelphiのシェルコンポーネントの使いかってがよくないので,
シェルの機能で作りたかったのですが,何年も前からてをつけて,
いまだに完成していません.


[3358] Re6:ShellExecuteExとCreateProcess関数返信 削除
2010/5/15 (土) 21:46:22 たてぐや 〔HomePage
▼ Mr.XRAYさん
> どうですか,CentOSは.

 CentOSはfedoraと比べるとハードウェアに対するは要求は低いです。
本サーバのメンテナンス用の予備機なので、気軽にインストールしましたが、
fedoraではメモリが512MないとGUIインストールできなかったのが256Mでも
インストールできました。ただ、今度はハードウェアの対応はfedoraにかな
わないようで、オンボードチップセットで1680×1050に対応できませんでし
た。ferora12ではアップデートしたら対応してくれたのですが…

> Ubuntue入れたけど,最近全く起動していません.

 パーソナルユーズのデスクトップならubuntuが最適でしょう。私の場合は
TruboLINUXから始めて、RHEL系を使ってきましたので、fedoraになりましたが、
さすがに半年に一度のバージョンアップ、一年後のサポート終了という流れに
ついて行くのがつらくなって、CentOSにしようと思っている次第です。
 とりあえずWebサーバとsambaサーバ、FTPは動くようになりましたが、メー
ルサーバがまだです。
 しかしここまでLINUXを使うようになることがわかっていたらKylixを買って
おくんだった、と悔やんでいたりします。

> シェルの機能で作りたかったのですが,何年も前からてをつけて,
> いまだに完成していません.


 そいういうのってありますよね。私も「こういうのを作ろう」とドンガラ
フォームを作って少し作り込んで、ほうり出しているのがいくつかあります。

[3359] Re7:ShellExecuteExとCreateProcess関数返信 削除
2010/5/16 (日) 19:32:46 Mr.XRAY
すごですね.サーバー立ててしまうんですから.
この店の他のお客さんにもいますが...
そんなことやっていたら,時間がいくらあったて足りなくなって
しまいそう.

>  しかしここまでLINUXを使うようになることがわかっていたらKylixを買って
> おくんだった、と悔やんでいたりします。


今のところDelphi Prismでしょうけど,あと,1,2年で...

http://edn.embarcadero.com/article/images/40588/0300000D.png


[3361] Re8:ShellExecuteExとCreateProcess関数返信 削除
2010/5/16 (日) 23:35:12 たてぐや 〔HomePage
▼ Mr.XRAYさん

 自前サーバを立ち上げることはそんなに難しいことではありません。
ほとんど何もしなくてもLINUXをインストールするだけで使えます…

> そんなことやっていたら,時間がいくらあったて足りなくなって
> しまいそう.


 サーバは、セットアップ時に多少時間はかかりますが、動くように
なってしまえば何もすることはありません。スクリプトを書いておけ
ばバックアップも自動で取れますし。時間かかるのはむしろ運用の方
です。スパム投稿の退治などは毎日のように発生します。今私のとこ
ろで多いのは「男を買う」とかいうサイトのリンク書き込みですね。
とてもとてもそういう対象の年齢層のメンバーではないんだけど…

> 今のところDelphi Prismでしょうけど,あと,1,2年で...

 あと1,2年したらもうプログラミングはやっていないだろう、と
数年前に思ったのにまだやってるし…

[▼次のスレッド]
INCM/CMT
Cyclamen v3.82