Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.12.21;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





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


2-1385899743
cr@nk
2013-12-01 16:09
2014.12.21
Парсер большого XML


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


11-1255823579
Ruzzz
2009-10-18 03:52
2014.12.21
Кол-во строк в Memo никогда не бывает 0


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский