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

Камышев Александр

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

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

  • Посещение

  • Победитель дней

    9

Весь контент Камышев Александр

  1. Камышев Александр

    TImageControl

    CBuilder XE7, приложение под андроид. На форме есть несколько TImageControl с загруженными изображениями. Тестирование показало, на андроид 5.x приложение крашится на запуске, с сообщением "Приложение было остановлено". До 5.x все отлично работает. Пустой TImageControl приложение такой ошибки не дает, только с изображением. Кто нибудь знает, что это за беда и какие есть варианты решения? Вот в этом обсуждении http://fire-monkey.ru/topic/159-kak-dobavit-v-svoi-komponent-timage-i-dat-vozmozhnos/?p=569 есть 3 и 4 пункт, что вроде как можно в битмапе хранить изображение. Уточните, как добавить битмап в published секцию(формы я так понял?), и загрузить свое изображение?
  2. Сделать антиалиасинг пока не получилось, но... Изначально неправильная постановка задачи, не нужен буфер для рисования, это же не GDI. Прорисовка в PaintBox на OnPaint с заливанием фона, копированием слоя подложки и иконок, рисование ломаных линий и фигур, прозрачность, антиалиасинг и т.д. абсолютно не вызывает проблем с ресурсами и морганием, все рисуется быстро и плавно.
  3. искал информацию по теме, необязательно Quality для формы устанавливать в design-time, в FormCreate срабатывает Quality = TCanvasQuality::HighQuality; RecreateCanvas(); Invalidate(); по нажатию кнопки этот код не дает эффекта
  4. протестировал 3 варианта: 1. правка FMX.Graphics.pas как указано выше 2. пишу на с++, можно исправить файл FMX.Graphics.hpp заменить код __property TCanvasQuality Quality = {read=FQuality, nodefault}; на __property TCanvasQuality Quality = {read=FQuality, write=FQuality, nodefault}; после этого можно bmp_buf->Canvas->Quality = TCanvasQuality::HighQuality; 3. Создать новую канву как указано выше TCanvas *MyCanvas = TCanvasManager::CreateFromBitmap( bmp_buf, TCanvasQuality::HighQuality ); во всех трех случаях свойство Quality под debug имеет значение HighQuality, проверял перед DrawPath: bool b = MyCanvas->Quality == TCanvasQuality::HighQuality; и во всех вариантах эффекта не было... неспроста Quality для формы нужно ставить в design-time что происходит при сборке, из-чего включается антиалиасинг? .
  5. сори не написал, под андроид пишу приложение с графикой, канва FMX
  6. в разделе Антиалиасинг обсуждалось присвоение свойству Quality формы HighQuality и рисование на канве. если рисовать сразу к примеру в PaintBox или на канву формы, то это работает. по опыту GDI, стандартно отрисовывают буфер, а уже его копируют на канву визуальных компонентов. по коду, буфер: bmp_buf = new TBitmap();bmp_buf->Width = window_rect.Width(); bmp_buf->Height = window_rect.Height(); рисование: TPathData *pd = new TPathData; pd->MoveTo( Point( 100, 100 ) ); pd->LineTo( Point( 150, 100 ) ); pd->LineTo( Point( 100, 150 ) ); bmp_buf->Canvas->Stroke->Thickness = 5; bmp_buf->Canvas->Stroke->Kind = TBrushKind::Solid; bmp_buf->Canvas->Stroke->Dash = TStrokeDash::Solid; bmp_buf->Canvas->Stroke->Color = (TAlphaColor)TAlphaColorRec::Black; bmp_buf->Canvas->DrawPath( pd, 1 ); delete pd; на OnPaint копирование буфера: pbMap->Canvas->BeginScene();pbMap->Canvas->DrawBitmap( bmp_buf, bmp_rect, window_rect, 1, false ); pbMap->Canvas->EndScene(); в результате все быстро, без морганий, но антиалиасинга нет. у канвы буфера bmp_buf есть свойство Quality: __property TCanvasQuality Quality = {read=FQuality, nodefault}; - только чтение принимает значения: enum class DECLSPEC_DENUM TCanvasQuality : unsigned int { ccSystemDefault, ccHighPerformance, ccHighQuality }; по умолчанию ccSystemDefault вот как бы и вопрос, как создать буферный TBitmap с TCanvas, у которого Quality == ccHighQuality? возможно есть другие варианты рисовать ломаные линии с антиалиасинг?
  7. На свежую голову сам разобрался, все просто, для некоторых полей ширина по коду получается == 0, присвоение нуля Columns->Width и дает такую картинку.
  8. CBuilder XE7 в StringGrid 14 StringColumn, отображаются корректно: до вот этого куска кода: for ( int i = 0; i < sgVehicles->ColumnCount; i++ ) { sgVehicles->Columns->Width = w; } после изменения ширины Column отображаются только 6 первых, с наложением полей друг на друга ColumnCount остается равным 14 Column создавал динамически, пробовал в ItemEditor, эффект остается. Замена TStringGrid на TGrid также не помогла
×
×
  • Создать...