Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TreeView Цветные строки [D7, XP]


Страницы:   1 2 3

kirat ©   (2011-05-25 12:29:00) 

Подскажите пожалуйста как сделать цветные строки при их создании?
....
public
   izm:integer;
 end;
.....

procedure TForm1.Button1Click(Sender: TObject);
var
node:TTreeNode;
begin
izm:=1;
node:=TreeView1.Items.AddChild(nil,'sdf');
izm:=0;
node:=TreeView1.Items.AddChild(nil,'sdsdfsdf');
izm:=1;
node:=TreeView1.Items.AddChild(node,'sdfsdfs');
izm:=0;
node:=TreeView1.Items.AddChild(nil,'sdfsdf,');
izm:=0;
node:=TreeView1.Items.AddChild(node,'sdf');
izm:=0;
node:=TreeView1.Items.AddChild(node,'sdf');

end;

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
 Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if izm =1 then Sender.Canvas.Font.Color:= clRed;
end;


VirEx   (2011-05-26 15:25:00) [21]

>Dennis I. Komarov ©   (26.05.11 15:19) [26]
>
> > однако в цикле удаления желательна проверка: если из базы
> > удалена запись привязаная к ноду, тогда ноду нужно удалить
>
> Той записи уже может и не быть вовсе, а нод при этом еще оприсован...


о_О каким образом если удаляет он только через дерево?


Dennis I. Komarov   (2011-05-26 15:19:00) [22]


> однако в цикле удаления желательна проверка: если из базы
> удалена запись привязаная к ноду, тогда ноду нужно удалить

Той записи уже может и не быть вовсе, а нод при этом еще оприсован...


VirEx   (2011-05-26 14:32:00) [23]

>KSergey ©   (26.05.11 14:14) [21]

так он я так понимаю в дереве при нажатии на ноде помечает на удаление (шрифт нода краснеет), а затем отдельной кнопкой удаляет помеченые, что и приведено в моем коде

однако в цикле удаления желательна проверка: если из базы удалена запись привязаная к ноду, тогда ноду нужно удалить


Ega23   (2011-05-26 14:27:00) [24]


> Только там громадное количество данных и прорисовка снова
> занимает много времени.


TreeView.Items.BeginUpdate;
try
 // Работа с узлами
finally
 TreeView.Items.EndUpdate;
end;


Ega23   (2011-05-26 14:25:00) [25]


> Их еще удалять надо при удалении ноды дерева...


Нет проблем.

type

 TMyTreeNode = class (TTreeNode)
 public
    destructor Destroy; override;
 end;

destructor TMyTreeNode.Destroy;
begin
 if (Data <> nil) then
   TObject(Data).Free;
end;

procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
 var NodeClass: TTreeNodeClass);
begin
 NodeClass := TMyTreeNode;
end;


Ну и следить внимательно, чтобы в data действительно объект сидел.


Kirat   (2011-05-26 14:23:00) [26]

Так в БД редактируется. Только там громадное количество данных и прорисовка снова занимает много времени. Это конечно не глобально, но хотелось бы чтобы быстрее. А на данный момент я удаляю все дерево и заново его делаю =(!!!


KSergey   (2011-05-26 14:14:00) [27]

> MsGuns ©   (26.05.11 13:02) [19]
> >VirEx ©   (25.05.11 17:31) [12]

Их еще удалять надо при удалении ноды дерева...


Dennis I. Komarov   (2011-05-26 13:21:00) [28]


> Kirat ©   (26.05.11 10:55) [18]

Дык сперва надо БД редактировать, а уж только потом ГУИ дергать...


MsGuns   (2011-05-26 13:02:00) [29]

>VirEx ©   (25.05.11 17:31) [12]

Хороший код, классы там всякие.. Еще оракл до кучи и цены не будет решению :)


Kirat   (2011-05-26 10:55:00) [30]

Спасибо большое! А вот вопрос а как мне всю ветку поменять? на первом я то помечу что он Delete, а в остальных ветках тоже надо так сделать! Ато пока только прорисовка получается! (Данные попадают из БД)


VirEx   (2011-05-25 21:13:00) [31]

>Ega23 ©   (25.05.11 20:29) [16]

спасибо кэп :)
утратил навыки


Ega23   (2011-05-25 20:29:00) [32]

itm:=TMyItem.Create();
node.Data := Pointer(itm);

Зачем к указателю указатель приводишь?

begin
i:=0;
while i<TreeView1.items.Count-1 do begin
if TMyItem(TreeView1.items[i].Data).isDelete then // удаляем этот элемент
i:=i+1;
end;


OMG

for i := TreeView1.items.Count - 1 downto 0 do
begin
 И хоть сами узлы удаляй. Только для этого нефигово Items.BeginUpdate перед циклом сделать, цикл в try..finally обернуть, в finally - Items.EndUpdate;
end;


Dennis I. Komarov   (2011-05-25 18:08:00) [33]

а не надо...
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);


VirEx   (2011-05-25 18:05:00) [34]

да не помню какой, я дельфи уж год почти не запускал


Dennis I. Komarov   (2011-05-25 18:01:00) [35]

Кто сказал, что черный по дефолту?


VirEx   (2011-05-25 17:31:00) [36]

// делаем объект с нужными свойствами
type
 TMyItem=class
 public
   isDelete:Boolean;
   //можно добавить дополнительные свойства
end;
-----

// добавляем в дерево объекты
var
 itm:TMyItem;
begin
node:=TreeView1.Items.AddChild(nil,'text1');
itm:=TMyItem.Create();
node.Data := Pointer(itm);

node:=TreeView1.Items.AddChild(nil,'text2');
itm:=TMyItem.Create();
node.Data := Pointer(itm);
----

//при щелчке на элементе делаем его удаляемым или наоборот
TreeView1.OnItemClick(Sender: TObject; Button: TMouseButton;    Node: TTreeNode; const Pt: TPoint)
begin
TMyItem(Node.Data).isDelete = not TMyItem(Node.Data).isDelete;
----

//в прорисовке каждого элемента
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if TMyItem(Node.Data).isDelete then Sender.Canvas.Font.Color:= clRed
else
Sender.Canvas.Font.Color:= clBlack;
end;

//где-то в коде при нажатии кнопки удаляем все элементы помеченные на удаление в цикле
//притом цикл должен быть не for а while!
begin
i:=0;
while i<TreeView1.items.Count-1 do begin

if TMyItem(TreeView1.items[i].Data).isDelete then // удаляем этот элемент

i:=i+1;
end;


Dennis I. Komarov   (2011-05-25 15:20:00) [37]


> Если есть другой вариант то я не против посмотреть.

За чем другой? Просто я думаю, что он Вам не понятен (судя по [0]). Если это не так, то можно только порадоваться за Вас...


Kirat   (2011-05-25 14:05:00) [38]

Мне надо пометить другим цветом те строки,  которые как бы помеченые на удаление. Если есть другой вариант то я не против посмотреть.


Dennis I. Komarov   (2011-05-25 13:52:00) [39]

Только вряд ли твой Pointer(0) будет понят...
Да и бросал бы уж туда весь TColor, к чему извращения if?


Kirat   (2011-05-25 13:49:00) [40]

Грамадное спасибо =)! Почему я сам к єтому не пришел =(?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо