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

nassl

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

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

  • Посещение

Весь контент nassl

  1. Баг, конечно был в свернутом состоянии. Исправил вопрос, но я его уже поборол.
  2. Да, примерно так и сделал, в событии панели OnShown - прописал у нужных элементов hittest:=true в событии панели OnHidden - обратно hittest:=false Но, все-равно, капец, какой сырой продукт
  3. nassl

    Странный баг с TMultiView 2

    Имеется панель с меню из tlisbox, который положен на multiview ( режим navigation pane). отображение multiview через masterbutton. теперь собственно баг: панель скрыта полностью свойство multiview.visible:=false, ширина 0, однако если кликать по области формы, где лежат пункты меню, какба панель в разcвернутом состоянии multiview эти пукты отрабатывают клик и запускаются .Вообще нет идей как править.
  4. мой пример максимально упрощен, чтобы обозначить проблему. интервал таймера 10, координаты, конечно single, но целое число, то в single преобразуется компилятором. Про эффект стробоскопа, видимо верно, но там, думаю проблема в самой студии - реально, то я вывожу небольшие битмапы на теперь уже TPainBox, так вот, когда этот битмап перемещается по диагональным направлениям видны искажения края в виде елочки.
  5. У меня, качество картинки на этом пробном коде не меняется при рисовании на painbox. (железо i5-8600k, gtx 1600, win10 )
  6. GlobalUseGPUCanvas := false; GlobalUseDirect2D := false; Это не помогло. Circle1.Position.X := Circle1.Position.X + 1; Circle1.Position.Y := Circle1.Position.Y + 1; Так нормально стало, но как менять скорость перемещения. Если таких кругов много, а двигаются все одним таймером. заводить на каждый круг не выход...
  7. Честно говоря, в примере выше смущает все, потому что он толком не работает. Хотя там настройки по умолчанию. Как вариант пробовал рисовать на битмапе и копировать его на канву формы. В таком режиме заливка, вроде, не должна играть роли. Но эффект тот же. Даже хуже, когда circle перемещается строго горизонтально или вертикально, то более менее нормально картинка идет, но если вбок, то идут искажения по краям в виде лесенки на несколько пикселей, но их видно. Причем на телефоне тоже края замазываются. Буду читать про GlobalUseDirect2D. (Ссылка от склероза https://stackoverrun.com/ru/q/2885822). Но как можно выкатывать среду разработки, которая на дефолтных настройках свой же компонент не может по пустрй форме без лагов перерисовать?!
  8. Не понимаю, как сделать нормальную картинку без смазов при движении. Ниже простейший код. На форму положен TCircle. Далее по таймеру он двигается. Картинка нечеткая - Circle идет не просто рывками, а двоится и троится. Пробовал сначала рисовать в буферный Bitmap, потом его разом аккуратно (с Canvas.BeginScene() и Canvas.EndScene() по событию OnPaint) рисовал на TRectangle, но картинка та же. Как правильно под FMX рисовать? unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects; type TForm1 = class(TForm) Circle1: TCircle; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormActivate(Sender: TObject); begin Circle1.Position.X:=0; Circle1.Position.Y:=0; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Circle1.Position.X:=Circle1.Position.X+5; Circle1.Position.Y:=Circle1.Position.Y+5; Invalidate(); end; end. Такой код не улучшает unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects; type TForm1 = class(TForm) Circle1: TCircle; Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormActivate(Sender: TObject); procedure FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormActivate(Sender: TObject); begin Circle1.Position.X:=0; Circle1.Position.Y:=0; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin Canvas.BeginScene; Circle1.Position.X:=Circle1.Position.X+5; Circle1.Position.Y:=Circle1.Position.Y+5; Canvas.EndScene; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Invalidate(); end; end.
  9. Конечно, глядя на эти костыли, хочется рыдать под одеялом. Поэтому улучшения приветствуются! Но этот код работает в TWebBrowser. Получается строка эквивалентная Latex'у m_1\vec{V}_1+m_2\vec{V}_2=m_1\vec{V}_1+m_2\vec{V}_2 Еще вопрос: Слой на котором лежит компонент TWebBrowser должен обработать жест "влево". Этот жест не проходит если WebBrowser. Visible:=true, причем WebBrowser. HitTest:=false. Как справить? const TEMP_FILE_NAME ='temp.html'; FILE_URL_OPEN_FILE ='file:/%s'; var HTMLPage :TStringList; TemporaryFileName: string; FS: UnicodeString; begin FS:='m<span class="_">1</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">1</span></span> +' +'m<span class="_">2</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">2</span></span> =' +'m<span class="_">1</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">1</span></span> +' +'m<span class="_">2</span><span class="vec"><span class="arrow">&rarr;</span>V<span class="_">2</span></span>'; HTMLPage:=TStringList.Create; try HTMLPage.Add('<!DOCTYPE html>'); HTMLPage.Add('<html>'); HTMLPage.Add('<head>'); HTMLPage.Add('<title>Test</title>'); HTMLPage.Add('<meta charset="UTF-8">'); HTMLPage.Add('<style type=''text/css''>'); HTMLPage.Add('.arrow{position: absolute; bottom:11px;}'); HTMLPage.Add('.vec{position: relative;}'); HTMLPage.Add('._{font: 80% sans-serif; position: relative; bottom: -8px;}'); HTMLPage.Add('.^{font: 80% sans-serif; position: relative; bottom: 8px;}'); HTMLPage.Add('</style>'); HTMLPage.Add('</head>'); HTMLPage.Add('<body>'); HTMLPage.Add('<p>Formulae:'+FS+'</p>'); HTMLPage.Add('</body>'); HTMLPage.Add('</html>'); TemporaryFileName:=TPath.GetTempPath+TEMP_FILE_NAME; HTMLPage.SaveToFile(TemporaryFileName); WebBrowser1.URL:=Format(FILE_URL_OPEN_FILE,[TemporaryFileName]); finally HTMLPage.Free;
  10. nassl

    Символы векторов

    Хочется вывести кусочек математического текста (должны быть значки векторов над буквами \vec(F) - латех) на форму в перемежку с парой картинок. Конечно, идеально иметь компонент с Latex, но вряд ли появится. Пока смог придумать генерировать html текст и кидать его в WebBrowser. Еще вопрос: Слой на котором лежит компонент TWebBrowser должен обработать жест "влево". Этот жест не проходит если WebBrowser. Visible:=true, причем WebBrowser. HitTest:=false. Как справить? try HTMLPage.Add('<!DOCTYPE html>'); HTMLPage.Add('<html>'); HTMLPage.Add('<head>'); HTMLPage.Add('<style type=''text/css''>'); HTMLPage.Add('.arrow {margin-left: -13px;}'); HTMLPage.Add('.arrow::before {content:''\2192''; position: relative; top: -11px;left: 13px;}'); HTMLPage.Add('</style>'); HTMLPage.Add('</head>'); HTMLPage.Add('<body>'); HTMLPage.Add('<p>some text <span class="arrow">F</span> some text</p>'); HTMLPage.Add('</body>'); HTMLPage.Add('</html>'); TemporaryFileName:=TPath.GetTempPath+TEMP_FILE_NAME; HTMLPage.SaveToFile(TemporaryFileName); WebBrowser1.URL:=Format(FILE_URL_OPEN_FILE,[TemporaryFileName]); finally HTMLPage.Free; получается такой html <!DOCTYPE html> <html> <head> <title>Проба</title> <style type='text/css'> .arrow {margin-left: -13px;} .arrow::before {content:'\2192'; position: relative; top: -11px;left: 13px;} </style> </head> <body> <p>some text <span class="arrow">F</span> some text</p> </body> </html> Проблема в том, что WebBrowser эту страницу выводит без учета стилей css, хотя в обычном браузере все хорошо. Как можно решить проблему? /need help/
  11. Как костыль: пробуй менять соответствующим образом сам текст Приве. .ривет
  12. Отвечу сам себе, чтобы не потерять . Итак, хочется ловить жесты влево, вправо и после лонгтап считывать координаты точки касания. В частности изменяется размер TImage, который скрывается по окончании свайпа запуском анимации в которой Opacity меняется от 1 до 0}. TPointF P, OldP; void __fastcall TForm1::FormGesture(TObject *Sender, const TGestureEventInfo &EventInfo, bool &Handled) { if (EventInfo.Flags.Contains(TInteractiveGestureFlag::gfBegin)) { switch (EventInfo.GestureID) { case igiLongTap: OldP.y=EventInfo.Location.y; OldP.x=EventInfo.Location.x; } } else if(EventInfo.Flags.Contains(TInteractiveGestureFlag::gfEnd)) {//Жест закончен - не убирать, иначе не сработает TTouchAction::Up } else {switch (EventInfo.GestureID) {case sgiRight: DosomethingRight(); break; case sgiLeft: DosomethingLeft(); break; case igiPan: P.y=EventInfo.Location.y; P.x=EventInfo.Location.x; break; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormTouch(TObject *Sender, const TTouches Touches, const TTouchAction Action) {if (Action==TTouchAction::Up) //Палец убран {// Обработка концовки свайпа, например FloatAnimation1->Start(); } } void __fastcall TForm1::FloatAnimation1Finish(TObject *Sender) { Image->Visible=false;Image->Opacity=1;} ........................................................... PS советы по улучшению кода приветствуются, но у меня получилось так.
  13. Нужна помощь! Все перепробовал, не выходит каменный цветок... На форме лежит скрытый компонент THUETrackBar. Хочется реализовать следующий функционал на с++ (fmx): свайп вверх по любому месту экрана - делает компонент THUETrackBar видимым, и двигает его ползунок вверх, свайп вниз - соответственно вниз. этот код не фурычит в процессе свайпа, только по завершении void __fastcall TForm1::windGesture(TObject *Sender, const TGestureEventInfo &EventInfo, bool &Handled) { switch (EventInfo.GestureID) { case sgiUp: TmpBar->Visible=true; TmpBar->Value++; break; case sgiDown: TmpBar->Visible=true; TmpBar->Value--; break; case igiLongTap: TmpBar->Visible=true;Location_x=EventInfo.Location.x; break; } } Хотел использовать свойство EventInfo.Location.x, но значение меняется только по окончании свайпа.
  14. Отвечу себе сам. Для сброса Rad Studio 10.3 к дефолтным настройкам удаляем раздел реестра HKEY_CURRENT_USER\Software\Embarcadero\BDS\20.0 После перегрузки системы все будет OK.
  15. спасибо, за ответ, указатели не причем. Размер менялся при отрисовке на внутренний битмап посредством DrawBitmap(....), в котором конечный TRect был c новыми размерами sphW.
  16. Спасибо, тоже дошел до этого, через отладчик.
  17. nassl

    Размеры TImage

    Привет, как правильно менять размеры изображения в runtime в fmx. TImagе лежит на форме, в него загружена картинка. Казалось бы: 1) Image->Width=w; Image->Height=w; // ставим размер w=30 или 60 2) Image->Bitmap->Width=w; Image->Bitmap->Height=w; Если только первая строка, то виндой работает, под андроид глюки, картинка при увеличении c 30 до 60 клонируется, в прямоугольнике 60x60. Хотя WrapMode - fit и MarginWrapMode - fit. Со второй строкой - черные квадраты. ============================================== Продолжаю искать ошибку, стало еще не понятнее. Имеется переменная sphW, с размером Image (квадратный). sphW =Image->Width; При выполнении sphW=w; // w целое значение изменяется размер картинки. Магия, ничего не понимаю.
  18. Возможно не по теме форума вопросы, но может кто знает, как сбросить настройки rad студии на дефолтные. Где-то натыкал, теперь 1) ctrl v срабатывает page doun, не удаляет выделенные фрагменты del-ом и т.д. 2) подсказка кода по ctl пробел показывает все, что угодно, но не в тему. 3) Основная проблема, пустой проект с дефолтными настройками не компилируется, ошибки на string.h
  19. Помогите решить проблему. Русую на канве компонента TPanel . Для этого создаю Bitmap в буфере, с размерами TPanel. Размеры считываю внутри FormCreate. Конкретно получается ширина 624 на 463. Потом запускаются таймеры с событиями OnPaint для этого компонента, после чего размеры компонента уже 611 на 411 (пробовал panel->Width, panel->Height, а также и panel->BoundsRect). Но Bitmap с фоном уже существует, и он большего чем нужно. Как сразу отследить правильные размеры компонента? Форма на весь экран - андроид.
×
×
  • Создать...