nassl

Пользователи
  • Публикаций

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

  • Посещение

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

  • Звание
    Пользователь
  1. Не понимаю, как сделать нормальную картинку без смазов при движении. Ниже простейший код. На форму положен 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.
  2. nassl

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

    Конечно, глядя на эти костыли, хочется рыдать под одеялом. Поэтому улучшения приветствуются! Но этот код работает в 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;
  3. 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/
  4. nassl

    Бегущая строка

    Как костыль: пробуй менять соответствующим образом сам текст Приве. .ривет
  5. Отвечу сам себе, чтобы не потерять . Итак, хочется ловить жесты влево, вправо и после лонгтап считывать координаты точки касания. В частности изменяется размер 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 советы по улучшению кода приветствуются, но у меня получилось так.
  6. Нужна помощь! Все перепробовал, не выходит каменный цветок... На форме лежит скрытый компонент 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, но значение меняется только по окончании свайпа.
  7. Отвечу себе сам. Для сброса Rad Studio 10.3 к дефолтным настройкам удаляем раздел реестра HKEY_CURRENT_USER\Software\Embarcadero\BDS\20.0 После перегрузки системы все будет OK.
  8. nassl

    Размеры TImage

    спасибо, за ответ, указатели не причем. Размер менялся при отрисовке на внутренний битмап посредством DrawBitmap(....), в котором конечный TRect был c новыми размерами sphW.
  9. Спасибо, тоже дошел до этого, через отладчик.
  10. 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 целое значение изменяется размер картинки. Магия, ничего не понимаю.
  11. nassl

    Настройки RAD studio 10.3

    Возможно не по теме форума вопросы, но может кто знает, как сбросить настройки rad студии на дефолтные. Где-то натыкал, теперь 1) ctrl v срабатывает page doun, не удаляет выделенные фрагменты del-ом и т.д. 2) подсказка кода по ctl пробел показывает все, что угодно, но не в тему. 3) Основная проблема, пустой проект с дефолтными настройками не компилируется, ошибки на string.h
  12. Помогите решить проблему. Русую на канве компонента TPanel . Для этого создаю Bitmap в буфере, с размерами TPanel. Размеры считываю внутри FormCreate. Конкретно получается ширина 624 на 463. Потом запускаются таймеры с событиями OnPaint для этого компонента, после чего размеры компонента уже 611 на 411 (пробовал panel->Width, panel->Height, а также и panel->BoundsRect). Но Bitmap с фоном уже существует, и он большего чем нужно. Как сразу отследить правильные размеры компонента? Форма на весь экран - андроид.