Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Выделение в TreeView


Автор: anmos 3.4.2014, 15:03
Добрый день! Помогите кодом нужно убрать (сетку из точек) выделения в TreeView. 

Вот эта сетка!  smile 
user posted image

Автор: PointerToNil 3.4.2014, 17:11
Код

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
begin
  if (Stage = cdPostPaint) and (cdsFocused in State) then
    Sender.Canvas.FrameRect(Node.DisplayRect(True)); // цвет остался от заливки
    // или - как вариант - DrawFocusRect инвертирует точки, так что второй раз по первому - и всё как было
    // DrawFocusRect(Sender.Canvas.Handle, Node.DisplayRect(True)); // Sender.Canvas.DrawFocusRect почему-то не пашет
end;

Автор: anmos 3.4.2014, 18:56
Цитата(PointerToNil @ 3.4.2014,  17:11)
Код

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
begin
  if (Stage = cdPostPaint) and (cdsFocused in State) then
    Sender.Canvas.FrameRect(Node.DisplayRect(True)); // цвет остался от заливки
    // или - как вариант - DrawFocusRect инвертирует точки, так что второй раз по первому - и всё как было
    // DrawFocusRect(Sender.Canvas.Handle, Node.DisplayRect(True)); // Sender.Canvas.DrawFocusRect почему-то не пашет
end;

Не лучший способ, имеются глюки с отрисовкой smile 

Добрый человек помог строчкой, работает на ура:
Perform(WM_CHANGEUISTATE,MAKEWPARAM(UIS_INITIALIZE,UISF_HIDEACCEL or UISF_HIDEFOCUS),0);
Но к сожалению не прокомментировал ее ( Может кто подскажет, как она работает, что бы понять ее смысл. 

Автор: anmos 3.4.2014, 20:45
О_о такой метод убрал выделение во всей системе, есть другие способы? 

Автор: PointerToNil 3.4.2014, 23:54
какие именно глюки?
вариант с DrawFocusRect пробовали? (строку с FrameRect убрать/закомментировать)

Автор: anmos 4.4.2014, 09:16
Цитата(PointerToNil @ 3.4.2014,  23:54)
какие именно глюки?
вариант с DrawFocusRect пробовали? (строку с FrameRect убрать/закомментировать)

Вот что получается ((

user posted image

Автор: Fomoco 8.4.2014, 20:41
Код

procedure TForm2.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
begin
  if cdsSelected in State then
  with Sender.Canvas do
  if Stage = cdPostPaint then // Erase focus rect by painting on top of it
  begin
    FrameRect(Node.DisplayRect(True));
  end;
end;


Turbo Delphi 2006.

Автор: -Сергей- 23.4.2014, 04:57
Это все применимо к классическому оконному стилю. Необходимо определять, какой текущий стиль установлен и от этого исходить. На неклассических стилях могут быть непредсказуемые последствия.

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