Проблема с назначением eDitlink TvirtualTreeView в C ++ BuilderC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с назначением eDitlink TvirtualTreeView в C ++ Builder

Сообщение Anonymous »

У меня есть проблема с назначением EditLink TvirtualStringTree в эмбаркадеро C ++ Builder. Когда я пытаюсь назначить новый класс редактора, работает только редактор по умолчанию.
Только конструктор вызывается в событии OncreateEditor . После того, как редактор создан и назначен в EditLink , фактически мой пользовательский редактор больше не называется или даже удаляется. Работает только встроенный редактор.

Код: Выделить всё

class TFormMain : public TForm, public EcuCommListenerItem
{
__published:    // IDE-managed Components
TVirtualStringTree *VST;

void __fastcall VSTCreateEditor(TBaseVirtualTree *Sender, PVirtualNode Node,
TColumnIndex Column, IVTEditLink *EditLink);

private:    // User declarations

public:     // User declarations
__fastcall TFormMain(TComponent* Owner);
};

typedef struct {
unsigned Id;
String Caption;
}MyRecord;

//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner),
{
VST->NodeDataSize = sizeof(MyRecord);
VST->RootNodeCount = 3;
}

class TPropertyEditor : public TInterfacedObject, public IVTEditLink
{
private:
TWinControl* m_Edit;
TVirtualStringTree* m_Tree;
PVirtualNode m_Node;
int m_Column;

public:
__fastcall TPropertyEditor() //:
IVTEditLink(),
TInterfacedObject()
{
DEBUG_FUNC("\n");
m_Edit = nullptr;
m_Tree = nullptr;
m_Node = nullptr;
m_Column = 0;
}

__fastcall ~TPropertyEditor() {
DEBUG_FUNC("\n");
delete m_Edit;
}

HRESULT __stdcall QueryInterface(const GUID& IID, void **Obj) override {
return GetInterface(IID, Obj) ? S_OK : E_NOINTERFACE;
}

ULONG __stdcall AddRef() override  {
return TInterfacedObject::_AddRef();
}
ULONG __stdcall Release() override {
return TInterfacedObject::_Release();
}

bool __stdcall BeginEdit() override {
DEBUG_FUNC("\n");
m_Edit->Show();
static_cast(m_Edit)->DroppedDown = true;
m_Edit->SetFocus();

return true;
}

bool __stdcall CancelEdit() override {
DEBUG_FUNC("\n");
m_Edit->Hide();

return true;
}

bool __stdcall EndEdit() override {
DEBUG_FUNC("\n");

m_Edit->Hide();
m_Tree->SetFocus();

return true;
}

bool __stdcall PrepareEdit(TBaseVirtualTree* Tree, PVirtualNode Node, Virtualtrees::Types::TColumnIndex Column) override {

DEBUG_FUNC("PrepareEdit\n");

m_Tree = reinterpret_cast(Tree);
m_Node = Node;
m_Column = Column;

delete m_Edit;
m_Edit = nullptr;

m_Edit = new TComboBox( Tree );
m_Edit->Parent = Tree;
m_Edit->Visible = false;
static_cast(m_Edit)->Items->Add(L"Option 1");
static_cast(m_Edit)->Items->Add(L"Option 2");
static_cast(m_Edit)->Items->Add(L"Option 3");

return true;
}

void __stdcall ProcessMessage(Winapi::Messages::TMessage &Message) override {
m_Edit->WindowProc(Message);
}

void __stdcall SetBounds(const System::Types::TRect &R) override {
//FTree.Header.Columns.GetColumnBounds(FColumn, Dummy, R.Right);
DEBUG_FUNC("\n");
m_Edit->BoundsRect = R;
}

};

void __fastcall TFormMain::VSTCreateEditor(TBaseVirtualTree *Sender, PVirtualNode Node,
TColumnIndex Column, IVTEditLink *EditLink)
{
EditLink = new TPropertyEditor();

DEBUG_FUNC("\n");
}
< /code>

 edit < /strong>: < /p>
Я нашел Tvirtualtreeview :: oncreateeditorVent < /code> Prototype, и это отличается от того, что создано IDE: < /p>
< /p>


Подробнее здесь: [url]https://stackoverflow.com/questions/79734089/problem-with-tvirtualtreeview-editlink-assignment-in-cbuilder[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»