Я использую Delphi 2007. У меня TListView
с OwnerData
и OwnerDraw
установлено значение True. ViewStyle
установлен на vsReport
.
У меня есть record
.
type TAList=record
Item:Integer;
SubItem1:String;
SubItem2:String;
end;
var
ModuleData: array of TAList;
procedure TForm1.ListView3Data(Sender: TObject; Item: TListItem);
begin
Item.Caption := IntToStr(ModuleData[Item.Index].Item);
Item.SubItems.Add(ModuleData[Item.Index].SubItem1);
Item.SubItems.Add(ModuleData[Item.Index].SubItem2);
end;
procedure TForm1.ListView3DrawItem(Sender: TCustomListView; Item: TListItem; Rect: TRect; State: TOwnerDrawState);
var
LIndex : integer;
LRect: TRect;
LText: string;
TTListView: TListView;
begin
TTListView := TListView(Sender);
if (Item.SubItems[0] = '...') then
begin
TTListView.Canvas.Brush.Color := clHighlight;
TTListView.Canvas.Font.Color := clHighlightText;
end else
begin
TTListView.Canvas.Brush.Color := TTListView.Color;
TTListView.Canvas.Font.Color := TTListView.Font.Color;
end;
for LIndex := 0 to TTListView.Columns.Count - 1 do
begin
if (not(ListView_GetSubItemRect(TTListView.Handle, Item.Index, LIndex, LVIR_BOUNDS, @LRect))) then Continue;
TTListView.Canvas.FillRect(LRect);
if (LIndex = 0) then LText := Item.Caption else LText := Item.SubItems[LIndex - 1];
LRect.Left := LRect.Left + 6;
DrawText(TTListView.Canvas.Handle, PChar(LText), Length(LText), LRect, DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX or DT_END_ELLIPSIS);
end;
end;
Я хочу показать подсказку, когда SubItem2 усечен. В Windows XP никакой подсказки вообще не отображается. В Windows Vista и Windows 7, когда моя мышь находится над элементом, она показывает намек, который полностью отключен.
У меня нет специального кода для обработки подсказок. Должен ли быть один из режимов OwnerData
и OwnerDraw
?
Вот изображения того, что я получаю:
EDIT:
Дэвид спросил, почему OwnerDraw
был установлен в True
. Есть две причины:
- Таким образом, я могу "запретить" выбор пользователя.
- Если я установил
OwnerDraw
вFalse
, я получаю еще одну проблему. См. Почему я получаю белые разделители столбцов в своем списком списков на заказ?
ИЗМЕНИТЬ 2:
Если я обработаю событие OnInfoTip
, как было предложено TLama, я получаю подсказку с нечетким шаром и неправильную подсказку из Windows Vista и 7.