Перейти к содержанию
Fire Monkey от А до Я

PFC

Пользователи
  • Постов

    7
  • Зарегистрирован

  • Посещение

Информация о PFC

  • День рождения 10.01.1984

Контакты

  • ICQ
    289187033
  • Skype
    pfedosov

Информация

  • Пол
    Мужчина
  • Город
    Saint-Petersburg

Посетители профиля

863 просмотра профиля
  1. Примерно так. Меня смутил TBrushKind.Solid - что для С++ явно не верный вариант т.к. объекта TBrushKind нет. Просто в данном сообщении компилятора имеется ввиду пространство имен TBrushKind, а не объект. Вариант не дающий предупреждения: Canvas->Stroke->Kind = TBrushKind::Solid;
  2. PFC

    bkSolid is deprecated: Use TBrushKind.Solid

    Во время компиляции С++ проекта получаю вот такие назойливые Warning'и: bkSolid is deprecated: Use TBrushKind.Solid В коде тип линии задается так: Canvas->Stroke->Kind = TBrushKind::bkSolid; Очевидно, что код: Canvas->Stroke->Kind = TBrushKind.Solid; Приведет к ошибке 'TBrushKind' does not refer to a value В целом оно и так работает, хочется понять как надо делать правильно.
  3. Подскажите куда копать. Пытаюсь нарисовать поле из прямоугольников, часть из которых символизирует фигуру и рисуется закрашенными. Под 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); } } } Рузультат:
  4. Есть класс: 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 было так же.
  5. Спасибо. Ну и последний вопрос. А можно как-то отключить очистку канвы? Т.е. чтобы OnPaint рисовал новую картинку поверх старой.
  6. Спсибо за ответ. Через OnPaint действительно работает. Однако у меня пиявилось еще несколько вопросов: В интернете много примеров, когда рисование все же идет по нажатию кнопки. Вот например: http://docwiki.embarcadero.com/CodeExamples/XE6/en/FMXTCanvasDrawFunctions_(Delphi) (этот примечателен еще и тем, что он от самой Embarcadero) Я вижу что он для XE6, в XE7 что-то изменилось (я уже заметил, что BitmapChanged стал приватным) ? Возможно ли как-то обойти ограничение на рисование только в OnPaint? У TImage и PaintBox действительно есть метод Repaint, а вот у формы такого метода нет. Что лучше использовать если я таки хочу рисовать на форме?
  7. Исходно пытался нарисовать битмап на канве формы. Затем пытался нарисовать хоть что-нибудь. Все время получаю пустой экран. При этом аналогично ничего не получается и с TImage и с PaintBox. Проект на С++, Embarcadero XE7. Что я делаю не так? SolverMXE7.zip
×
×
  • Создать...