link9380 link9381 link9382 link9383 link9384 link9385 link9386 link9387 link9388 link9389 link9390 link9391 link9392 link9393 link9394 link9395 link9396 link9397 link9398 link9399 link9400 link9401 link9402 link9403 link9404 link9405 link9406 link9407 link9408 link9409 link9410 link9411 link9412 link9413 link9414 link9415 link9416 link9417 link9418 link9419 link9420 link9421 link9422 link9423 link9424 link9425 link9426 link9427 link9428 link9429 link9430 link9431 link9432 link9433 link9434 link9435 link9436 link9437 link9438 link9439 link9440 link9441 link9442 link9443 link9444 link9445 link9446 link9447 link9448 link9449 link9450 link9451 link9452 link9453 link9454 link9455 link9456 link9457 link9458 link9459 link9460 link9461 link9462 link9463 link9464 link9465 link9466 link9467 link9468 link9469 link9470 link9471 link9472 link9473 link9474 link9475 link9476 link9477 link9478 link9479 link9480 link9481 link9482 link9483 link9484 link9485 link9486 link9487 link9488 link9489 link9490 link9491 link9492 link9493 link9494 link9495 link9496 link9497 link9498 link9499 link9500 link9501 link9502 link9503 link9504 link9505 link9506 link9507 link9508 link9509 link9510 link9511 link9512 link9513 link9514 link9515 link9516 link9517 link9518 link9519
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
VirtualTreeView и ноды
nut
Отправлено: 26.02.2007, 08:02


Ученик-кочегар

Группа: Участник
Сообщений: 22



Ребят помогите как изменить в virtualtreeview надпись у ноды, пытался и по описанию самого компонента и находил статью на русском но она на делфи и переводил ее на с++, не получалось.
olegenty
Отправлено: 26.02.2007, 08:28


Ветеран

Группа: Модератор
Сообщений: 2412



см. OnGetText, и всё станет понятно.
nut
Отправлено: 07.03.2007, 11:19


Ученик-кочегар

Группа: Участник
Сообщений: 22



Всетаки не получилось у меня, я так понял что надо подцепить данные с нодой. Можно примерчик.
Doga
Отправлено: 09.03.2007, 14:36


Мастер участка

Группа: Участник
Сообщений: 575



Вот здесь

http://cbuilder.ru/forums/index.php?s=5e8c...l=vtvdemo&st=30

есть и пример по работе с TVirtualStringTree и ссылка на ресурс с русскоязычным описанием компонента
** desivers
Отправлено: 10.03.2007, 14:19


Не зарегистрирован







Скачал пример, очень все запутано мне не разобрать, может кинете примерчик. rolleyes.gif
desivers
Отправлено: 10.03.2007, 17:34


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Все ребят заканчиваю диплом но осталось разаобратся с этим компонентом, напишите примерчики простые для заненсение текста и картинок буду очень благодпрен, без него валится диплом. wizard.gif
desivers
Отправлено: 13.03.2007, 15:20


Дежурный стрелочник

Группа: Участник
Сообщений: 32



по ковырял VTW заношу данные таким способом

CODE

WideString Names[4]={
"Петя",
"Маша",
"Костя",
"Дима"
};


CODE

//---------------------------------------------------------------------------
void __fastcall TForm1::VirtualStringTree1GetText(TBaseVirtualTree *Sender,
     PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
     WideString &CellText)
{
CellText = Names[Node->Index];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
VirtualStringTree1->NodeDataSize = sizeof(TPhoneNode);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
for( int i = 0; i <= 3; i++)
{
VirtualStringTree1->AddChild(NULL);
}
}
//---------------------------------------------------------------------------


но это очень не удобно есть способ по лучше?
olegenty
Отправлено: 13.03.2007, 16:22


Ветеран

Группа: Модератор
Сообщений: 2412



"не очень удобно" и "получше" — это очень относительная оценка. что конкретно не устраивает? а как устроило бы? а в чём проблема сделать так, как устроило бы?
desivers
Отправлено: 13.03.2007, 16:45


Дежурный стрелочник

Группа: Участник
Сообщений: 32



можно сделать както через структуру, так в примерах но они на дельфях вот и не как перести не могу, а смог только эти строки
olegenty
Отправлено: 14.03.2007, 08:37


Ветеран

Группа: Модератор
Сообщений: 2412



можно через что угодно. конкретизируй вопрос.
desivers
Отправлено: 14.03.2007, 10:57


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Вот смотрим хелп по нему, глава шаг за шагом там есть


Example class declaration

CODE

unit TreeData;
interface
//===========================================
type
// declare common node class
TBasicNodeData = class
protected
cName: ShortString;
cImageIndex: Integer;
public
constructor Create; overload;
constructor Create(vName: ShortString; vIIndex: Integer = 0); overload;
property Name: ShortString read cName write cName;
property ImageIndex: Integer read cImageIndex write cImageIndex;
end;
// declare new structure for node data
rTreeData = record
BasicND: TBasicNodeData;
end;
implementation
constructor TBasicNodeData.Create;
begin
{ not necessary
cName := '';
cImageIndex := 0;
}
end;
constructor TBasicNodeData.Create(vName: ShortString; vIIndex: Integer = 0);
begin
cName := vName;
cImageIndex := vIIndex;
end;
end.


Здесь вроде принцип понятен кроме

CODE

property Name: ShortString read cName write cName;
property ImageIndex: Integer read cImageIndex write cImageIndex;
constructor TBasicNodeData.Create;
begin
{ not necessary
cName := '';
cImageIndex := 0;
}
end;


Example creation of the tree

CODE

// Tree will be created when the form is created.
procedure TMyForm.FormCreate(Sender: TObject);
var
Node: PVirtualNode;
NodeD: ^rTreeData;
begin
// create tree
MyTree.NodeDataSize := SizeOf(rTreeData);
if MainControlForm.filename = '' then
begin
// create tree with top level node
Node := MyTree.AddChild(nil); // adds a node to the root of the tree
// assign data for this node
NodeD := MyTree.GetNodeData(Node);
NodeD.BasicND := TBasicNodeData.Create('new project');
end
else
begin
// load tree
end;
...
end;
// returns the text (the identification) of the node
procedure TMyForm.MyTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: Integer;
TextType: TVSTTextType; var Text: WideString);
var
NodeD: ^rTreeData;
begin
NodeD := Sender.GetNodeData(Node);
// return the identifier of the node
if NodeD.BasicND = nil then
Text := ''
else
Text := NodeD.BasicND.Name;
end;
// returns the index for image display
procedure TMyForm.MyTreeGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: Integer; var Index: Integer);
var
NodeD: ^rTreeData;
begin
NodeD := Sender.GetNodeData(Node);
case Kind of
ikState: // for the case the state index has been requested
Index := -1;
ikNormal, ikSelected: // normal icon case
Index := NodeD.BasicND.ImageIndex;
end;
end;


Здесь не понятно вот

CODE

NodeD: ^rTreeData;
NodeD := MyTree.GetNodeData(Node);
NodeD.BasicND := TBasicNodeData.Create('new project');


Вот надо разобраться с этим я так понимаю что при перерисовки текста и картинок каждая нода берет данные из соответствующей структуры.
desivers
Отправлено: 20.03.2007, 22:56


Дежурный стрелочник

Группа: Участник
Сообщений: 32



помогитте перевести
CODE

procedure TForm1.VSTFreeNode(Sender: TBaseVirtualTree; Node: PVirtualNode);
var
 Data: PVSTRecord;
begin
 Data := Sender.GetNodeData(Node);
 if Assigned(Data) then
   Finalize(Data^);
end;


или напишите как у вас освобождается память
desivers
Отправлено: 22.03.2007, 23:36


Дежурный стрелочник

Группа: Участник
Сообщений: 32



а эту строку ка можно перевести

Include(InitialStates, ivsMultiline);

с этой сам разобрался

Отредактировано desivers — 24.03.2007, 02:44
desivers
Отправлено: 23.03.2007, 22:41


Дежурный стрелочник

Группа: Участник
Сообщений: 32



как открыть определенную ноду, есть FullExpand но он не годится. в обычном было такое, а как здесь быть?

Вернуться в Вопросы программирования в C++Builder