16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"[+]とか[-]がついたアイコン"
この発言に対し以下のコメントが寄せられています
#01391 アイクビー さん RE:[+]とか[-]がついたアイコン
#01392 アイクビー さん RE:[+]とか[-]がついたアイコン
TTreeViewでノードをドラッグする時、Shift を押すと [-] が、Ctrl を押すと
[+] がくっつくようにしたかったので、とりあえずそういうアイコンを作る方法
を考えてみました。リソースとかよくわからないので、解放のしかたが大丈夫が
不安ですが、なんとか動いているようです。
白黒の場合は、TIconInfo.hbmMask の下半分をいじると、[+] や [-] を不透明
にできるようです。カラーの場合は TIconInfo.hbmColor をいじるとできるよう
にみえるんですが、うまくいかないし、透明でも困らないので、そのままにして
ます。
procedure TForm1.FormCreate(Sender: TObject);
var
fI: TIconInfo;
hI: HICON;
fB: TBitmap;
iW: Integer;
iH: Integer;
begin
if not GetIconInfo(Screen.Cursors[crDefault], fI) then begin
raise Exception.Create(SysErrorMessage(GetLastError()));
end;
try
fB := TBitmap.Create();
try
iW := GetSystemMetrics(SM_CXCURSOR);
iH := GetSystemMetrics(SM_CYCURSOR);
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;
Show(); // これをしないと、なぜかうまくいきません。(笑)
hI := CreateIconIndirect(fI);
if (hI = 0) then begin
raise Exception.Create(SysErrorMessage(GetLastError()));
end;
Screen.Cursors[1] := hI;
Hide(); // これをしないと、なぜかうまくいきません。
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;
Show(); // これをしないと、なぜかうまくいきません。
hI := CreateIconIndirect(fI);
if (hI = 0) then begin
raise Exception.Create(SysErrorMessage(GetLastError()));
end;
Screen.Cursors[2] := hI;
finally
fB.Free();
end;
finally
DeleteObject(fI.hbmMask);
if not (fI.hbmColor = 0) then begin
DeleteObject(fI.hbmColor);
end;
end;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if (Screen.Cursor = 1) then begin
Screen.Cursor := 2;
end
else begin
Screen.Cursor := 1;
end;
end;
アイクビー
- FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/10/08 -
Original document by アイクビー 氏 ID:(KHB01350)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|