16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE^3:標準的なボタン画像を得るコンポーネ"
この発言は #01220 ぜえた さんのRE^2:標準的なボタン画像を得るコンポーネ に対するコメントです
こんにちは、ぜえた です。
ToolBarを CoolBarにのせて使うなら、ToolBarを複数にすることが簡単にでき
るので、複数のイメージリストを使う方がよいかも。そのほうがバージョンが
上がってイメージが増えるとい事態に万一なっても対応できるし。
ImageCategoryプロパティでイメージのカテゴリー、ImageSizeでイメージの大
小を設定します。
動作確認は Win98, NT4上での D3でです。
相変わらずエラー処理を記述していません(^^;
unit CommImg;
interface
uses Windows, SysUtils, Classes, Controls, CommCtrl;
type
TImageCategory = (icStandard, icView, icHistory);
TImageSize = (isSmall, isLarge);
TCommImageList = class(TImageList)
private
FImageCategory: TImageCategory;
FImageSize: TImageSize;
procedure SetImageCategory(Value: TImageCategory);
procedure SetImageSize(Value: TImageSize);
protected
procedure DefineProperties(Filer: TFiler); override;
procedure LoadImage;
procedure Update; virtual;
public
constructor Create(AOwner: TComponent); override;
published
property ImageCategory: TImageCategory read FImageCategory
write SetImageCategory;
property ImageSize: TImageSize read FImageSize write SetImageSize;
end;
procedure Register;
implementation
{ TCommImageList }
const
ImageWidth: array[TImageSize] of Integer = (16, 24);
ImageID: array[TImageCategory, TImageSize] of UINT = (
(IDB_STD_SMALL_COLOR, IDB_STD_LARGE_COLOR),
(IDB_VIEW_SMALL_COLOR, IDB_VIEW_LARGE_COLOR),
(IDB_HIST_SMALL_COLOR, IDB_HIST_LARGE_COLOR));
constructor TCommImageList.Create(AOwner: TComponent); //override;
begin
inherited Create(AOwner);
Update;
end;
procedure TCommImageList.DefineProperties(Filer: TFiler); //override;
begin
Clear;
try
inherited DefineProperties(Filer);
finally
Update;
end;
end;
procedure TCommImageList.LoadImage;
var
hwndTB: HWND;
tbab: TTBAddBitmap;
begin
hwndTB := CreateWindowEx(0, TOOLBARCLASSNAME, nil, 0,
0, 0, 0, 0, 0, 0, HInstance, nil);
try
SendMessage(hwndTB, TB_BUTTONSTRUCTSIZE, SizeOf(TTBButton), 0);
SendMessage(hwndTB, TB_SETIMAGELIST, 0, LPARAM(Handle));
tbab.hInst := HINST_COMMCTRL;
tbab.nID := ImageID[FImageCategory, FImageSize];
SendMessage(hwndTB, TB_ADDBITMAP, 0, LPARAM(@tbab));
SendMessage(hwndTB, TB_SETIMAGELIST, 0, 0);
finally
DestroyWindow(hwndTB);
end;
end;
procedure TCommImageList.SetImageCategory(Value: TImageCategory);
begin
if Value = FImageCategory then Exit;
FImageCategory := Value;
Update;
end;
procedure TCommImageList.SetImageSize(Value: TImageSize);
begin
if Value = FImageSize then Exit;
FImageSize := Value;
Update;
end;
procedure TCommImageList.Update; //virtual;
begin
Clear;
Width := ImageWidth[FImageSize];
Height := ImageWidth[FImageSize];
LoadImage;
Change;
end;
procedure Register;
begin
RegisterComponents('Samples', [TCommImageList]);
end;
end.
ぜえた (QZC05100)
- FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/01/03 -
Original document by ぜえた 氏 ID:(QZC05100)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|