-
Постов
7 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные PFC
-
-
Во время компиляции С++ проекта получаю вот такие назойливые Warning'и:
bkSolid is deprecated: Use TBrushKind.Solid
В коде тип линии задается так:
Canvas->Stroke->Kind = TBrushKind::bkSolid;
Очевидно, что код:
Canvas->Stroke->Kind = TBrushKind.Solid;
Приведет к ошибке
'TBrushKind' does not refer to a valueВ целом оно и так работает, хочется понять как надо делать правильно.
-
Подскажите куда копать. Пытаюсь нарисовать поле из прямоугольников, часть из которых символизирует фигуру и рисуется закрашенными. Под Windows все чудесно, под Android вижу только закрашенные. Думал не попадаю в пикселы, установил толщину в 3 и AlignToPixel - не помогло.
Код:
void __fastcall TForm1::imgFieldPaint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect) { int min = Min(ARect.Width() / FieldRows, ARect.Height() / FieldCols); for (int y = 0; y < FieldRows; y++) { for (int x = 0; x < FieldCols; x++) { // ячейка для отрисовки TRectF R(Canvas->AlignToPixel(TPointF(x*min, y*min)), min, min); // если часть фигуры - рисуем квардрат if (iField[y][x]) { Canvas->Fill->Color = CellColors[iField[y][x]]; Canvas->FillRect(R, 0, 0, AllCorners, 1.0); } // рисуем ячейку Canvas->Stroke->Thickness = 3; Canvas->Stroke->Color = TAlphaColor(claRed); Canvas->DrawRect(R, 0, 0, AllCorners, 1.0); } } }
Рузультат:
-
Есть класс:
class TMyObjectInt : public TObject { private: int Value; public: __fastcall TMyObjectInt (int _Value); __fastcall ~TMyObjectInt(); };
Есть ComboBox:
for (int i = 1; i <= 10; i++) cbxItems->Items->AddObject(IntToStr(i), new TMyObjectInt(i));
Почему при вызове ->Clear() не вызываются деструкторы для TObject'ов? Казалось бы базовый TObject замечательно для этого подходит, даже деструктор у него виртуальным объявлен.
Я могу написать свою функцию очистки, но это потенциально приводит к ошибкам, особенно если я отдаю указатель на ComboBox за пределы своей формы.
Кстати, так же ведут себя и многие другие контролы, да и в VCL было так же.
-
Спасибо. Ну и последний вопрос. А можно как-то отключить очистку канвы? Т.е. чтобы OnPaint рисовал новую картинку поверх старой.
-
Спсибо за ответ. Через OnPaint действительно работает. Однако у меня пиявилось еще несколько вопросов:
- В интернете много примеров, когда рисование все же идет по нажатию кнопки. Вот например: http://docwiki.embarcadero.com/CodeExamples/XE6/en/FMXTCanvasDrawFunctions_(Delphi) (этот примечателен еще и тем, что он от самой Embarcadero) Я вижу что он для XE6, в XE7 что-то изменилось (я уже заметил, что BitmapChanged стал приватным) ? Возможно ли как-то обойти ограничение на рисование только в OnPaint?
- У TImage и PaintBox действительно есть метод Repaint, а вот у формы такого метода нет. Что лучше использовать если я таки хочу рисовать на форме?
-
Исходно пытался нарисовать битмап на канве формы. Затем пытался нарисовать хоть что-нибудь. Все время получаю пустой экран. При этом аналогично ничего не получается и с TImage и с PaintBox. Проект на С++, Embarcadero XE7. Что я делаю не так?
bkSolid is deprecated: Use TBrushKind.Solid
в Канва
Опубликовано
Примерно так. Меня смутил TBrushKind.Solid - что для С++ явно не верный вариант т.к. объекта TBrushKind нет. Просто в данном сообщении компилятора имеется ввиду пространство имен TBrushKind, а не объект.
Вариант не дающий предупреждения:
Canvas->Stroke->Kind = TBrushKind::Solid;