| Tips.36 | C++Builder/Windowsプログラミング |
| ListView(vsReport)上でマウスのある位置の文字列を得る | |
|
ListViewでマウスが指しているアイテム(サブアイテムも考慮して)の文字列を取得します。 AnsiString __fastcall
TListView_GetTooltipStr( TListView* List, int& x, int& y)
{
//マウスが指しているアイテムを探す
//素直に GetItemAt(x, y) とするとサブアイテム上でNULLを返してしまう。
TListItem* Item = List->GetItemAt(4, y);
if ( Item == NULL )
{ //失敗
return "";
}
//++++++ マウスの指しているカラムを取得する +++++++++++
int width = 3;
int i;
for ( i = 0 ; i < List->Columns->Count ; i++)
{
if ( x < width + List->Columns->Items[i]->Width)
{
break;
}
width += List->Columns->Items[i]->Width;
}
//====================================================
if ( i == List->Columns->Count )
{ //範囲外
return "";
}
//++++++ スクリーン座標へ変換する ++++++++++++++++++++
//これは、Tips37で説明する隠れているアイテムをツールチップで
//表示するために使用します。
TPoint TipPos = Point(width, Item->Top);
TipPos = List->ClientToScreen( TipPos );
x = TipPos.x , y = TipPos.y;
//====================================================
AnsiString Ret = "";
if ( i == 0)
{
//純粋に文字を返すなら
// return Item->Caption; //のみでいい。
if ( List->StringWidth( Item->Caption ) > List->Columns->Items[0]->Width)
{
return Item->Caption;
}
return "";
}
else
{
//純粋に文字を返すなら
// return Item->SubItems->Strings[i-1]; //のみでいい。
if ( List->StringWidth( Item->SubItems->Strings[i-1] )
> List->Columns->Items[i]->Width)
{
Ret = Item->SubItems->Strings[i-1];
}
}
return Ret;
}
//------------------------------------------------------------------
|
|
| 戻る | [参照] TListView |