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 |