スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Outlookのメールアイコンが出てたらメッセージを表示したい Notifire(5)

通知領域に表示されているアイコンをバラす話。
バラすのはいいけどどうやって保持しようか。TImageListが使えないか試してみる。

ImageListに画像を追加する:[2012/10/05]

まず、Image1に通知領域全体を取得する。で、Image2に一つ切り出してImageList1に追加。次の一つを切り出してまたImageList1に追加。次の...としていけばよさそう。ちゃんと取得できているかどうかは、TImageListと関連付けできるコンポーネント(SpeedButtonとか)に表示させる。というはどうだろう。
色々やってみてこうしました。

1.Image1に通知領域全体を取得する
2.前準備
 (1)ImageList1をクリア
 (2)ImageList1の高さをImage1の高さに(デスクトップスタイルで変わる)
 (3)ImageList1の幅を24に(固定っぽい)
 (4)通知領域のアイコンの数を数える(左右マージン3ずつっぽい)
3.Image1をアイコンごとにバラしてImageList1に登録する
 (1)Image1からImage2にアイコン1つ分CopyRect
 (2)ImageList1にImage2を追加
4.確認のためにHeaderControl1に表示する
 (1)HeaderControl1のボタンの数をImageList1の画像の数に合わせる
 (2)HeaderControl1にImageList1を関連付ける



procedure TForm1.Button1Click(Sender: TObject);
var
LWnd: HWND;
LRect: TRect;
LCount: integer;
i: Integer;
begin
LWnd := TraceWindow(0, 'Shell_TrayWnd,TrayNotifyWnd,SysPager,ToolbarWindow32');
if (LWnd <> 0) then
begin
UpdateImage(LWnd);

ImageList1.Clear();
ImageList1.Height := Image1.Picture.Bitmap.Height;
ImageList1.Width := 24;

Image2.Picture.Bitmap.Height := Image1.Picture.Bitmap.Height;
Image2.Picture.Bitmap.Width := 24;
Image2.AutoSize := True;
LRect := Image2.ClientRect;

LCount := (Image1.Picture.Bitmap.Width - 6) div 24;
OffsetRect(LRect, 3, 0);

for i := 1 to LCount do
begin
Image2.Picture.Bitmap.Canvas.CopyRect(
Image2.ClientRect, Image1.Picture.Bitmap.Canvas, LRect
);
ImageList1.Add(Image2.Picture.Bitmap, nil);
OffsetRect(LRect, 24, 0);
end;

HeaderControl1.Sections.Clear();
for i := 0 to ImageList1.Count - 1 do
HeaderControl1.Sections.Add.ImageIndex := i;
HeaderControl1.Images := ImageList1;
end
else
ListBox1.Items.Add(SysErrorMessageUTF8(GetLastError()));
end;


何をしたいかというと、ImageList1に登録した画像=通知領域に表示されている画像から、事前に準備しておいたメールアイコンでIndexOfできたら、まさに求めている動きになるなぁ、です。

続く。
関連記事
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。