Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.12.21;
Скачать: CL | DM;

Вниз

CustomDrawTreeView.pas   Найти похожие ветки 

 
Лактоза   (2014-05-21 13:29) [0]

Друзья, поделитесь файликом, а то у меня не находится. Говорят, что в 2007 он лежи здесь:
Users\Public\Documents\RAD Studio\5.0\Demos\DelphiWin32\VCLWin32\CustomDraw\CustomDrawTreeView.pas

Можно всю демку, даже желательнее.
Спасибо.


 
MBo ©   (2014-05-21 13:56) [1]

демки теперь лежат тут:
http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/
но в том наборе, что у меня скачан, CustomDraw нет

какой-то пример есть  в онлайн-хелпе
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/ComCtrls_TTreeView_OnCustomDrawItem.html


 
Лактоза   (2014-05-21 14:03) [2]

Этот код я нашел, меня непосредственно интересовали эти строки:

DrawButton(NodeRect, Node); // See the CustomDraw demo

DrawImage(NodeRect, Node.ImageIndex); // See the CustomDraw demo


 
Игорь Шевченко ©   (2014-05-21 14:15) [3]

procedure TCustomDrawForm.DrawButton(ARect: TRect; Node: TTreeNode);
var
 cx, cy: Integer;
begin
 cx := ARect.Left + TV.Indent div 2;
 cy := ARect.Top + (ARect.Bottom - ARect.Top) div 2;
 with TV.Canvas do
 begin
   Pen.Color := ButtonColorDialog.Color;
   //draw horizontal line.
   if Node.HasChildren then
   begin
     PenPos := Point(cx+FButtonSize, cy);
     LineTo(ARect.Left + TV.Indent + FButtonSize, cy);
   end else
   begin
     PenPos := Point(cx, cy);
     LineTo(ARect.Left + TV.Indent + FButtonSize, cy);
   end;

   //draw half vertical line, top portion.
   PenPos := Point(cx, cy);
   LineTo(cx, ARect.Top-1);

   if ((Node.GetNextVisible <> nil) and (Node.GetNextVisible.Level = Node.Level))
   or (Node.GetNextSibling <> nil) then
   //draw bottom portion of half vertical line.
   begin
     PenPos := Point(cx, cy);
     LineTo(cx, ARect.Bottom+1);
   end;  

   if Node.HasChildren then
   begin
     //Let"s try a circular button instead
     Ellipse(cx-FButtonSize, cy-FButtonSize, cx+FButtonSize, cy+FButtonSize);

     //draw the horizontal indicator.
     PenPos := Point(cx-FButtonSize+2, cy);
     LineTo(cx+FButtonSize-2, cy);
     //draw the vertical indicator if the node is collapsed
     if not Node.Expanded then
     begin
       PenPos := Point(cx, cy-FButtonSize+2);
       LineTo(cx, cy+FButtonSize-2);
     end;
   end;
       //now connect vertical lines of higher level nodes.
   Node := Node.Parent;
   while Node <> nil do
   begin
     cx := cx - TV.Indent;
     if Node.GetNextSibling <> nil then
     begin
       PenPos := Point(cx, ARect.Top);
       LineTo(cx, ARect.Bottom);
     end;
     Node := Node.Parent;
   end;
 end;
end;

procedure TCustomDrawForm.DrawImage(NodeRect: TRect; ImageIndex: Integer);
var
 cy: Integer;
begin
 cy := NodeRect.Top + (NodeRect.Bottom - NodeRect.Top) div 2;
 //center image in NodeRect.
 ImageList.Draw(TV.Canvas, NodeRect.Left, cy - TV.Images.Height div 2,
                ImageIndex, True);
end;



 
Лактоза   (2014-05-21 14:30) [4]

Спасибо.


 
Лактоза   (2014-05-21 14:50) [5]

Интересно, что брошенный на форму тривью и имаджлист, связанные через TreeView.images и заполненное само дерево. Дают AV, т.к. на момент DrawImage ImageList = nil
Получается, что прорисовка начинается еще до создания всей формы. Кто-то там в генофонде накалокодил. Если поставить проверку на нил, то все нормально отрабатывает.


 
junglecat   (2014-05-21 15:58) [6]

> прорисовка начинается еще до создания всей формы

до создания имиджлиста еще может. Но никак не формы


 
Лактоза   (2014-05-21 16:39) [7]

Я имел в виду по полного создания формы до момента оншоу. Т.к. в конструкторе формы происходит создание контролов и компонентов на ней лежащих. И, видимо, в момент создания тривью, когда еще не создан имаджлист и происходит вызов его прорисовки. Я не копался, мне по большому счету всеравно, но либо кто-то принудительно вызывает перерисовку при создании, либо одно из двух.



Страницы: 1 вся ветка

Текущий архив: 2014.12.21;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
2-1385971168
opashka
2013-12-02 11:59
2014.12.21
программа на координаты


1-1329071444
Proger254
2012-02-12 22:30
2014.12.21
Вызов функции чужого приложения


15-1400787163
Дмитрий СС
2014-05-22 23:32
2014.12.21
Контрольное число


15-1400664566
Лактоза
2014-05-21 13:29
2014.12.21
CustomDrawTreeView.pas


2-1386312700
Dmitry123
2013-12-06 10:51
2014.12.21
перевод координат