を呼び出すとTIcon.LoadFrom...()
、未加工のアイコン データのコピーが内部メモリ ブロックに保存され、終了します。そのブロックは、プロパティが使用さTIcon.HandleNeeded()
れるときなど、次に呼び出されるまで処理されません。TIcon.Handle
アイコン データがタイプのアイコンRC3_STOCKICON
(通常は遭遇しない) を表している場合は、そのIDI_APPLICATION
アイコンLoadIcon()
が使用されます。それ以外の場合、アイコン データがタイプのアイコンを表している場合 (通常の場合)、データが解析され、現在のandプロパティ値 (ディメンションがまだ割り当てられていない場合はandメトリックス経由)RC3_ICON
に最もよく一致する画像が渡されます。に。TIcon.Width
TIcon.Height
SM_CXICON
SM_CYICON
GetSystemMetrics()
TIcon
CreateIcon()
その時点から、またはHICON
によって返されるは、 の存続期間の残りの間、または少なくとも 、 、 、 などを介して が解放/解放されるまで使用されるイメージです。LoadIcon()
CreateIcon()
TIcon
HICON
TIcon.ReleaseHandle()
TIcon.Assign()
TIcon.LoadFrom...()
TIcon.SetHandle()
メモリ ブロック自体は、TIcon
が解放されるか、TIcon.Assign()
が呼び出されるか、新しいイメージ ソースがロードされるときにのみ解放されます。したがって、たとえば、を呼び出しTIcon.ReleaseHandle()
て現在のを解放しHICON
(その後、 を介して手動で解放する必要がありますDestroyIcon()
)、 の次元のサイズを変更してTIcon
から、を呼び出しTIcon.HandleNeeded()
てメモリ ブロックを再解析し、次に最も近い一致をロードすることが可能です。画像。
更新:TIcon
解像度の異なる複数の画像を同時に読み込むことはできません。AForm
のコーナー アイコンとそのタスクバー アイコン (Application->MainFormOnTaskbar
が false の場合、タスクバー ボタンは、その動作を手動でオーバーライドしない限りApplication
、ウィンドウではなく、非表示のウィンドウによって制御されるMainForm
ことに注意してください) は、実際には OS レイヤーで個別のアイコンであり、WM_SETICON
異なる入力パラメーター (それぞれwParam=ICON_SMALL
およびwParam=ICON_BIG
) を使用したメッセージ。ただし、VCLWM_SETICON
はウィンドウの BIG アイコンを設定するためにのみ使用し、SMALL アイコンを設定することはありません。したがって、のコーナー アイコンは、タスクバー アイコン (が true の場合) またはのタスクバー ボタン (が falseの場合)Form
の縮小バージョンです。VCLがMainFormOnTaskbar
Application
MainFormOnTaskbar
WM_SETICON
Form
、割り当てられている場合はForm
独自のものを使用し、そうでない場合は割り当てられている場合は を使用し、そうでない場合はデフォルトのアイコンをロードするために使用します。Icon
Application
Icon
LoadIcon()
IDI_APPLICATION
したがって、Form
のコーナー アイコンとタスクバー アイコンに異なる解像度の異なるアイコンが本当に必要な場合はTIcon
、上記のように、別のオブジェクトを使用して目的の解像度の画像をロードし、それWM_SETICON
に応じて独自のメッセージを発行する必要があります。