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

Портится канва при перерисовке компонентов


Letos

Вопрос

Рекомендуемые сообщения

  • 0
7 минут назад, POV сказал:

Готов поспорить у тебя использована конструкция with и ты обращаешься в полям которых нет, т.е. к чему-то другому публичному обращаешься.

Да нет, обращаюсь к Memo по-простому (тут по событию таймера):

...

        //отмечаем события троллейбусов
        for (unsigned int i = 0; i < TrollPositions_main.size(); i++) {
            sTrollPosition &P=TrollPositions_main[i];

            String S=P.Description;
            if(S!=NoNameSite)
            {
                TMemo *m= Form1->Memo1;

                S=P.TrollNum+": "+S;
                S+=", "+P.preDescription;
                S+=", "+P.LastKon;
                m->Lines->Add(S);
                vfScrollMemoDown(m);

//                MapRepaint();
            }
        }

...

Вызов своей функции по перерисовке карты MapRepaint(), который тут закомментирован, помогает, но не вставлять же его после каждого действия с компонентами...

Ссылка на комментарий
  • 0

Наверное, попробую компоненты разместить на другой форме (скорее всего, даже VCL), надеюсь, хоть там не будет глюка, но всё же непонятно, почему такое происходит...

Ссылка на комментарий
  • 0

Попробуй на делфи то же самое - сделать.  Я билдером пользуюсь чаще - там глюк га глюке в сравнении с делфи.

test.zip

Изменено пользователем POV
Ссылка на комментарий
  • 0
10 минут назад, POV сказал:

Попробуй на делфи то же самое - сделать.  Я билдером пользуюсь чаще - там глюк га глюке в сравнении с делфи.

test.zip

Да, вижу, добавил в примере на твою форму Memo, набираю там текст, канва не нарушается.

Но я с FMX очень мало работал, может разница в том, что мы по-разному рисуем канву? Я свою рисую в событии OnPaint (которое по необходимости вызывается), где вызывается функция, отрисовывающая карту и то, что на ней. И рисую, в отличие от твоего примера, между BeginScene и EndScene:

	ScreenMap->Canvas->BeginScene();
	ScreenMap->Canvas->DrawBitmap(MapBmImage,MapRect,ScreenRect,1);
	DisplayTrolls(ScreenMap);
	ScreenMap->Canvas->EndScene();

 

Ссылка на комментарий
  • 0

А я разобрался от чего такое было. Это моя ошибка. В событии OnPaint у меня было условие:

void __fastcall TForm1::MapImagePaint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect)

{
	if(MapRepainting) DisplayMap();
}

А так работает:

void __fastcall TForm1::MapImagePaint(TObject *Sender, TCanvas *Canvas, const TRectF &ARect)

{
//	if(MapRepainting) DisplayMap();
	DisplayMap();
}

 

Почему-то действия на другом компоненте затрагивают перерисовку TImage...

Изменено пользователем Letos
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...