16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:[+]とか[-]がついたアイコン"
この発言は #01390 アイクビー さんの[+]とか[-]がついたアイコン に対するコメントです
Show や Hide しなくてうまくいく方法がありました。
procedure TForm1.FormCreate(Sender: TObject);
var
fI: TIconInfo;
iW: Integer;
iH: Integer;
fB: TBitmap;
hI: HICON;
begin
if not GetIconInfo(Screen.Cursors[crDefault], fI) then begin
raise Exception.Create(
'GetIconInfo: '+SysErrorMessage(GetLastError())
);
end;
try
iW := GetSystemMetrics(SM_CXCURSOR);
iH := GetSystemMetrics(SM_CYCURSOR);
fB := TBitmap.Create();
try
fB.Handle := fI.hbmMask;
with fB.Canvas do begin
Rectangle(
Trunc((iW * 21) / 32), Trunc((iH * 21) / 32), iW, iH
);
MoveTo(Trunc((iW * 23) / 32), Trunc((iH * 26) / 32));
LineTo(Trunc((iW * 29) / 32) + 1, Trunc((iH * 26) / 32));
end;
fB.ReleaseHandle();
finally
fB.Free();
end;
hI := CreateIconIndirect(fI);
if (hI = 0) then begin
raise Exception.Create(
'CreateIconIndirect: '+SysErrorMessage(GetLastError())
);
end;
Screen.Cursors[1] := hI;
fB := TBitmap.Create();
try
fB.Handle := fI.hbmMask;
with fB.Canvas do begin
MoveTo(Trunc((iW * 26) / 32), Trunc((iH * 23) / 32));
LineTo(Trunc((iW * 26) / 32), Trunc((iH * 29) / 32) + 1);
end;
fB.ReleaseHandle();
finally
fB.Free();
end;
hI := CreateIconIndirect(fI);
if (hI = 0) then begin
raise Exception.Create(
'CreateIconIndirect: '+SysErrorMessage(GetLastError())
);
end;
Screen.Cursors[2] := hI;
finally
DeleteObject(fI.hbmMask);
if not (fI.hbmColor = 0) then begin
DeleteObject(fI.hbmColor);
end;
end;
end;
アイクビー
Original document by アイクビー 氏 ID:(KHB01350)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|