antarey Опубликовано 26 марта, 2014 Поделиться Опубликовано 26 марта, 2014 Руководствуясь темой (Как сделать автоматическое изменение высоты TListBoxItem под содержимое текста?) переделал код на C++Builder. Unit1.h public: // User declarations TTextLayoutClass *FTextLyoutClass; TTextLayout* FTextLyout; Unit1.cpp //--------------------------------------------------------------------------- void TForm1::CalculateItemHeight(TObject *Sender) { TListBoxItem *ListItem=dynamic_cast<TListBoxItem*>(Sender); if (ListItem!=NULL) { FTextLyout->BeginUpdate(); try { FTextLyout->Text = ListItem->Text; FTextLyout->MaxSize = TPointF(ListItem->Width, 1000); FTextLyout->WordWrap = ListItem->WordWrap; FTextLyout->Font = ListItem->Font; FTextLyout->HorizontalAlign = ListItem->TextAlign; FTextLyout->VerticalAlign = ListItem->VertTextAlign; ListItem->Height = FTextLyout->Height; } __finally { FTextLyout->EndUpdate(); } } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { FTextLyout = (TTextLayout*)(new TTextLayoutClass(TTextLayoutManager::DefaultTextLayout)); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { FreeAndNil(FTextLyout); } //--------------------------------------------------------------------------- void __fastcall TForm1::ListBoxItem3ApplyStyleLookup(TObject *Sender) { CalculateItemHeight(Sender); } //--------------------------------------------------------------------------- void __fastcall TForm1::ListBoxItem3Resize(TObject *Sender) { CalculateItemHeight(Sender); } //--------------------------------------------------------------------------- И получаю ошибку: Это я не правильно переделал код или же глюк студии? На офф. форуме тоже подымался етот вопрос - но к сожалению без ответов ASRenuff 1 Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 27 марта, 2014 Администраторы Поделиться Опубликовано 27 марта, 2014 Описанная вами проблема в вашем коде: FTextLyout = (TTextLayout*)(new TTextLayoutClass(TTextLayoutManager::DefaultTextLayout)); Абсолютно неправильно создаете объект TTextLayout. Нужно так: TTextLayoutClass textLayoutClass = TTextLayoutManager::DefaultTextLayout; TTextLayout* FTextLyout = TTextLayoutManager::TextLayoutForClass(textLayoutClass); Но здесь есть два важных момента. Вообще создание экземпляра переменной классового типа (Delphi) возможность языка Delphi, а не С++. И в С++ такой поддержки нету. Поэтому подобные создания объектов по делфовым классовым значениям (class of) выносят на сторону Delphi. Что в данном случае и сделано при помощи метода класса TextLayoutForClass. Которые и осуществляет создание объекта по делфовому классу. TTextLayoutClass - это наследник от TMetaClass<> и по сути внутри себя держит указатель на делфи класс. поэтому обычным оператором new объект вы не создадите. P.S. 32-битная версия компилятора С++ имеет ошибку, которая исправлена в XE6. Ссылка на комментарий
0 antarey Опубликовано 27 марта, 2014 Автор Поделиться Опубликовано 27 марта, 2014 К сожалению только один код //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { TTextLayoutClass textLayoutClass; TTextLayout *FTextLyout; textLayoutClass = TTextLayoutManager::DefaultTextLayout; FTextLyout = TTextLayoutManager::TextLayoutForClass(textLayoutClass); } //--------------------------------------------------------------------------- все остальное заремил вызывает ошибку Ссылка на комментарий
0 antarey Опубликовано 27 марта, 2014 Автор Поделиться Опубликовано 27 марта, 2014 Наверное ето все таки глюки студии, я перепробовал кучу вариантов и по наведенным Вами правилам и без правил все равно ошибка Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 27 марта, 2014 Администраторы Поделиться Опубликовано 27 марта, 2014 В моем коде - это ошибка 32-битного компилятора С++. В новой версии среды она уже устранена. Остальные компиляторы работают без ошибок (Win64, OSX, iOS). В вашем коде - ошибка кода. Ссылка на комментарий
0 antarey Опубликовано 28 марта, 2014 Автор Поделиться Опубликовано 28 марта, 2014 О какой версии идет речь? У меня ХЕ6 b7 работает на Вынь 8.1 64 бита Ссылка на комментарий
0 Администраторы Brovin Yaroslav Опубликовано 28 марта, 2014 Администраторы Поделиться Опубликовано 28 марта, 2014 Новая версия 32 битного C++ компилятора - XE6. В вашей бета версии у вас компилятор с ошибкой еще. Ссылка на комментарий
Вопрос
antarey
Руководствуясь темой (Как сделать автоматическое изменение высоты TListBoxItem под содержимое текста?) переделал код на C++Builder.
Unit1.h
И получаю ошибку:
Это я не правильно переделал код или же глюк студии?
На офф. форуме тоже подымался етот вопрос - но к сожалению без ответов
Ссылка на комментарий
6 ответов на этот вопрос
Рекомендуемые сообщения