Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2015, 08:53   #1
Implosion.IT
 
Регистрация: 25.02.2015
Сообщений: 5
Сообщение Treeview Drag'n'Drop прорисовка ветви с её дочерними элиментами

Добрый вечер господа!,
Ищу ответ на мой вопрос, не получается прорисовать всю ветку и её дочерние элементы при перетаскивании верхнего элемента.
Вот что получается во вложении... А хотелось бы что бы рисовался 3 и 4 элемент!!!

Помогите плиз!
Изображения
Тип файла: jpg Treeview.jpg (5.0 Кб, 90 просмотров)
Implosion.IT вне форума Ответить с цитированием
Старый 25.02.2015, 08:55   #2
Implosion.IT
 
Регистрация: 25.02.2015
Сообщений: 5
По умолчанию

выкладываю то что у меня получилось
<*.h>
Код:
#ifndef NodeDragH
#define NodeDragH
#include<Vcl.Controls.hpp>
#include <Vcl.ComCtrls.hpp>

#pragma hdrstop

class TNodeDrag: public TDragControlObjectEx
{
protected:
	virtual TDragImageList* __fastcall GetDragImages(void);
private:
	TDragImageList *FDragImages;
	TTreeView *TV;
	TBitmap *BMPTreeBranch(TTreeView *TV);
	void NextBMPTreeBranch(TTreeView *TV, TTreeNode *Node, TBitmap *bmp, int *delt);
public:
	inline __fastcall virtual TNodeDrag(TControl* Control);
	inline __fastcall virtual ~TNodeDrag();
};

#endif
<*.cpp>
Код:
#pragma hdrstop
#include "NodeDrag.h"
#pragma package(smart_init)

__fastcall TNodeDrag::TNodeDrag(TControl* Control): TDragControlObjectEx(Control)
{
	FDragImages = NULL;
	TV = static_cast<TTreeView*>(Control);
}

TDragImageList* __fastcall TNodeDrag::GetDragImages()
{
	if(!FDragImages) {
		Graphics::TBitmap* bmp = new Graphics::TBitmap;
		Graphics::TBitmap* mask = new Graphics::TBitmap;
		bmp->Assign(BMPTreeBranch(TV));
		FDragImages = new TDragImageList(bmp->Width, bmp->Height);
		FDragImages->Masked = true;
		FDragImages->Clear();

		mask->Assign(bmp);
		mask->Mask(TV->Color);
		FDragImages->Add(bmp, mask);
		delete bmp;
		delete mask;
	}
	return FDragImages;
}

__fastcall TNodeDrag::~TNodeDrag()
{
	delete FDragImages;
}

void TNodeDrag::NextBMPTreeBranch(TTreeView *TV, TTreeNode *Node, TBitmap *bmp, int *delt)
{
	Node = Node->getFirstChild();
	while (Node!=NULL) {
		*delt = *delt + 1;
		TRect RectNode = Node->DisplayRect(true);
		RectNode.Left = RectNode.Left - (TV->Indent*2)*(*delt);
		bmp->Canvas->CopyRect(RectNode, TV->Canvas, RectNode);

		NextBMPTreeBranch(TV, Node, &(*bmp), &(*delt));
		Node = Node->GetNextChild(Node);
	}
}

TBitmap *TNodeDrag::BMPTreeBranch(TTreeView *TV)
{
	TBitmap *bmp = new TBitmap();
	bmp->SetSize(TV->Width, TV->Height);
	//bmp->Canvas->Brush->Color = TV->Color;
	//bmp->Canvas->FillRect(bmp->Canvas->ClipRect);
	TTreeNode *Node = TV->Selected;
	TV->Canvas->Brush->Color = clRed;
	TRect RectNode = Node->DisplayRect(true);
	bmp->Canvas->FillRect(RectNode);
	RectNode.Left = RectNode.Left - TV->Indent + 0x3;
	int RectTop = RectNode.Top;
	int RectLeft = RectNode.Left;
	bmp->Canvas->CopyRect(RectNode, TV->Canvas, RectNode);
	int delt = 1;
	NextBMPTreeBranch(TV, Node, &(*bmp), &delt);
	TBitmap *b = new TBitmap();
	b->SetSize(TV->Width, TV->Height);
	//b->Canvas->Brush->Color = clRed;
	//b->Canvas->FillRect(b->Canvas->ClipRect);
	b->Canvas->CopyRect(TRect(0,0, bmp->Width, bmp->Height),bmp->Canvas,TRect(RectLeft, RectTop, RectLeft+bmp->Width, RectTop+bmp->Height));
	delete bmp;
	return b;
}

Последний раз редактировалось Stilet; 25.02.2015 в 09:32.
Implosion.IT вне форума Ответить с цитированием
Старый 28.02.2015, 21:05   #3
Implosion.IT
 
Регистрация: 25.02.2015
Сообщений: 5
По умолчанию

Тема Закрыта! Решение найдено!
Implosion.IT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Drag and Drop из TreeView'а в PaintBox Montysson Общие вопросы Delphi 3 15.04.2012 22:52
Drag-and-Dock панели с дочерними элементами Robbie Общие вопросы Delphi 1 21.04.2011 23:33
Drag and Drop в multiselected TreeView Boban1951 Компоненты Delphi 0 14.10.2009 10:57
реализация Drag /n/ Drop в TreeView nusik Общие вопросы Delphi 3 11.06.2009 21:11
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15