ファイルタイプのアイコンにデルファイダイナミックアクセス

私は期待していないものを.txtファイルタイプアイコンへのデルファイダイナミックアクセスは、ちょうどあなたが女性のように良いものではありません願っています。本当に人間のような子、ああ、暑い日私ができる、あまりにも光の腕を欠場!アプリケーションの準備では、コンボボックス(コンボボックス)、リストボックス(ListBoxコントロール)、および他の一般的なコンポーネントは、通常はテキストだけを表示するだけでなく、そのテキストに関連するアイコンを表示するために使用されます。一般的なWindowsアプリケーションでは、これらのアイコンは、このようなことが左側のボックスには、現在のディレクトリコンボボックス内のすべてのファイルを一覧表示する場合などの変更、のリストと一緒に外出表示テキストの表示を変更すると、ファイル名の組み合わせを表示しますそれにアイコンが、これはダイナミックなアイコンと呼ばれています。次のようにDelphiで動的なアイコンを使用するには:

 

 

  まず、アイコンを取得
  あなたは、私たちが最初に解決しなければならない動的なアイコンを使用したいが、それに関連付けられたハンドルテキストとアイコンを取得する方法です。システムによってレジストリを通じてファイルに関連付けられたアイコンを決定し、同じファイル(またはサブディレクトリ、またはフォルダ)は、Windowsプログラミングでデスクトップ上に表示される2つの結果を有していてもよく、これはDOSのファイル名と表示名(表示名)であります。我々のアプリケーションは、効果のようなもののように、Windowsエクスプローラを持つ必要がない場合は、そうでない場合、我々はWINDOWSAPIを取得するには、showを使用する、DOSのファイル名を取得する関数は、FindFirst()とのFindNext()関数と2 FindClose()プロシージャを使用することができます名前。ファイル名を取得SHGetFileInfo ShellAPI.pas()関数アイコンハンドルHICONで使用することによって得ることができるが、次のように
  SHGetFileInfo(:; dwFileAttributes PAnsiChar:pszPath DWORDと、VaRのpsfi:TSHFileInfo; cbFileInfo、uFlags:UINT)機能:DWORDl;
  pszPathパラメータ:ファイル名を指定します。値は、uFlags SHGFI_PIDLに含まれていない直接指定することができる場合、pszPathは、そうでなければ、計算により求めること直接指定することはできません。
   dwFileAttributesパラメータ:ファイル属性、値がuFlags SHGFI_USEFILEATTRIBUTESを含有する場合にのみ有効であり、一般的に、このパラメータを持っていない。
  psfiパラメータ:、取得したファイル情報を返すレコードタイプは、次のフィールドがあります
  HICON:HICON; //ファイルのアイコンハンドル
  iIcon:整数; //インデックスアイコンシステム
  dwAttributes:DWORD; //ファイルの属性値
  szDisplayName:配列[0..MAX_PATH-1] AnsiCharのの; //ファイル名表示
  szTypeName:AnsiCharのアレイ[0..79] ; //ファイルタイプ名
  cbFileInfoパラメータ:psfiのビット値、
  uFlagsパラメータ:示さ我々は一般的に使用され、ファイル情報の識別子を返すために必要な以下の定数です:
  SHGFI_ICONは; //アイコンを取得
  SHGFI_DISPLAYNAMEを; //表示名を取得
  SHGFI_TYPENAMEを; //タイプ名の取得
  SHGFI_ATTRIBUTESを、プロパティを取得//
  SHGFI_LARGEICON; //大きいアイコンを取得
  SHGFI_SMALLICON; / /小アイコンが得られる
  SHGFI_PIDLを; // pszPath識別子は
  値変化uFlagsとSHGetFileInfo()戻り値の関数も変化します。あなたはSHGetFileInfo()を呼び出すことによってpsfiパラメータによって、アイコンファイルへのハンドルを取得しますが、「マイコンピュータ」や他の仮想フォルダ等の情報を取得できない場合、SHGetFileInfo()uFlags引数にSHGFI_PIDLを使用しないように注意してくださいすることができます。

 

  第二に、アイコンをロードし
  得るアイコンをロードするために、そのインデックス番号は、テキストと表示に対応することを確実にするために()関数ImageList_AddIcon COMMCTRLの.PASを呼び出すことにより、デルファイによって提供TImageListの成分を用いて。:次のように
  (:; //ロードイメージリストハンドルアイコンHIMAGELISTイメージリスト機能ImageList_AddIcon
  アイコン:HICONアイコンハンドル//ロード):整数;イメージリストのインデックスで//戻りアイコン
  ときインデックスは、アイコンを指定する必要が使用することができますImageList_AddIcon ()の戻り値。

 

  第三に、グラフィックスとテキスト出力アイコン
  :また同時に、たとえば、テキストオブジェクトは、それに対応するスタイルプロパティを設定することによって達成することができます表示しながら、アイコンの要件を表示するので、コンボボックス、リストボックス、およびその他のコンポーネントについては、直接、アイコンを表示することができない
  の組み合わせをブロック:ComboBox1.Style:実際の経験に基づい= csOwnerDrawVariableが最良の直接ObjectInspector状に配置され、むしろプログラムコードが適切な位置に追加されないか、描画領域の高さの凹凸を発生することがあり
  、リストボックス:ListBox1.Style: = lbOwnerDrawVariableの
  ステータスバー:StatusBar1.Panels [I] .Style:= psOwnerDraw 単純なステータスバーを使用することができない、私は、ウィンドウインデックスアイコンを描画するステータスバーで、グラフィック出力はImageList1.Draw TImageListの()メソッドを使用することができます、およびテキスト出力コンポーネントのキャンバス特性から継承のTextOutののTCanvas()メソッドを使用することができ、コンポーネントキャンバスは明らかにアイコンを表示するには、この方法を使用することができない属性はなかったです。
  成分は直接直接イメージStateImages他の所望の属性アイコン対応TImageListのコンポーネント名を指定したアイコンを表示することができるため、アイコンが表示され、アイコンによって指定されたインデックスの数であってもよいです。なお:大きいアイコンを使用する場合は、あなたが最初のアイコンのサイズをロードすることができます指定するCreateSize TImageListの()メソッドを呼び出す必要があり、各TImageListのクリアメソッド呼び出しの後にCreateSizeを思い出す必要があります()。
  リフレッシュするために必要なときにアイコンロードクリアするImageList1.Clearの道のTImageListの使用は、頻繁に使用されます。

 


このメソッドは、ファイル拡張子のアイコンを取ることが示され、ファイルが完全に完全に存在する必要はありません!!!!

TForm1.FormCreate手順(送信者:TObjectを);
VAR
のFileInfo:TSHFileInfo;
始まる
//セット小さなアイコンが扱う作ら
S_ImageListHandleを:SHGetFileInfo( 'C:\'、0、FileInfoに、=
にSizeOf(のFileInfo)、またはSHGFI_SYSICONINDEX SHGFI_SMALLICONを);
//小さなアイコンセットのハンドルは、リストを指す
のSendMessage(Listview1.Handle、LVM_SETIMAGELIST、LVSIL_SMALL、S_ImageListHandle);
END;

ときに使用:
ListItemの:= ListView1.Items.Addを、
FillChar(のFileInfo、にSizeOf(のFileInfo)、#0);
=のTy '<DIR>は' //ディレクトリ・アイコン取る場合
SHGetFileInfo(PChar型(extractfilepath(application.ExeNameを) )、0、のFileInfo、はsizeof(のFileInfo)、
SHGFI_SYSICONINDEX又はSHGFI_SMALLICON)
他//ファイルアイコンがかかり
SHGetFileInfo(PChar型(N)、0、のFileInfo、はsizeof(のFileInfo)、
SHGFI_SYSICONINDEX又はSHGFI_USEFILEATTRIBUTES又はSHGFI_SMALLICONを);
ListItem.ImageIndex:=のFileInfo .iIcon;
いくつかの変数を使用すると、OKに意味見て、私のローカル変数があります

おすすめ

転載: www.cnblogs.com/blogpro/p/11453534.html