Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TListBox + TButton


Автор: h5who 16.4.2009, 12:56
У меня есть TListBox, в котором я сделал собственную отрисовку элементов. В OnDrawItem все это дело отрисовывал по своему.
А теперь я еще хочу добавить что бы при выделенном элементе в TListBox, у этого элемента появлялась дополнительно кнопка.
Я испробовал множество вариантов. Я сделал наследника TListBox в котором перекрывал DrawItem, где пытался при определенных условиях показывать кнопку. Но ничего не получилось, глючит у меня отрисовка, уже сто способов испробовал.

Буду очень благодарен за любые советы или примеры. 

Автор: Frees 16.4.2009, 13:13
покажи код который писал...посмотрим че глючит

Автор: h5who 16.4.2009, 13:43
Код у моего наследника TListBox:
Код

procedure TListBox.CreateWnd;
begin
  inherited CreateWnd;
  FButton := TButton.Create(Self);
  FButton.Parent := Self;
  FButton.Visible := False;
  FButton.Caption := 'Êíîïêà…';
  FButtonRect := Rect(0, 0, 0, 0);
end;

procedure TListBox.DrawItem(Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
begin
  FButtonRect := Rect;
  InflateRect(FButtonRect, -2, -2);
  if odSelected in State then
  begin
    FButtonRect.Left := FButtonRect.Right - 100;
    FButton.BoundsRect := FButtonRect;
    FButton.Visible := True;
    Canvas.Brush.Color := clHighlight;
    Canvas.Font.Color := clHighlightText;
  end else
  begin
    Canvas.Brush.Color := Color;
    Canvas.Font.Color := Font.Color;
  end;
  inherited DrawItem(Index, Rect, State);
end;


Этот код даже как-то работает, но: первый раз ткнешь в элемент TListBox и кнопка показывается, а потом начинаешь тыкать в другие элементы из списка и кнопка при этом не появляется. Для того что бы появилась кнопка нужно мышкой навести на то место в котором кнопка должна предположительно быть, тогда кнопка появляется.

Автор: Frees 16.4.2009, 14:22
Код

....
 FButton.Visible := True;
  FButton.Invalidate;
...


может это поможет

Автор: DimaBr 16.4.2009, 14:22
Попробуйте заменить TButton на TSpeedButton

Автор: h5who 16.4.2009, 14:35
Спасибо, похоже Invalidate помогло, глюков пока не заметил smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)