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

Mars M

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

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

  • Посещение

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

    4

Активность репутации

  1. Thanks
    Mars M отреагировална slav_z в FMX: Скроллинг и нажатия   
    Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
    Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,

    получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
    Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
    Делаем следующее:

    Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
    Удачи!
    https://github.com/slav-libx/scroll-click.git
  2. Thanks
    Mars M получил реакцию от MrSergei2017 в Настройки SDK для Токио   
    В SDK Manager оставляешь всё как есть, идешь в c:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\
    Там запускаешь SDK Manager.exe, обновляешь/устанавливаешь всё что он предложит. После устанавливаешь Android SDK build-tools 22.0.1
    И в принципе всё. Если будет ошибка при компиляции то в Environment Variables > BDSPLATFORMSDKSDIR указываем правильный путь до SDK - C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs
    Если всё равно ошибка то в  Environment Variables > Path вместо C:\ProgramData\Oracle\Java\javapath  указываем прямой путь до Java(к примеру C:\Program Files\Java\jdk1.8.0_60\bin)
  3. Thanks
    Mars M получил реакцию от MrSergei2017 в Странные ошибки при сборке   
  4. Like
    Mars M отреагировална Vitaldj в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.   
    Коллеги, я опубликовал на сайте FGX свое приложение. Можете «щупать». ?
     
    https://forum.fgx-native.com/topic/76-медицинская-программа-для-оценки-взаимодействия-препаратов/
  5. Like
    Mars M отреагировална Nick Peterson в Перевод VCL приложения на FMX. Подводные камни, стоит ли?   
    По итогу месяца работы на FMX хочу сказать - это глюкодром адский!:)) Вернулся бы обратно на VCL, но жаль потраченного месяца работы :))
    Несколько моментов, может кому будет интересно, кто пойдет по этому пути перевода проекта с VCL:
    1) рисование в буфере перед выводом на PaintBox (знаю что не обязательно, но именно в моей проге нужно, разные куски картинки готовятся в разное время)
    Инфы в одном месте не найти. Даже на этом форуме она не полна и в одном месте ошибочна:)
    XScale := GetWndScale(FormToHWND(OwnerForm)); // только так! Другие методы получения Scale не работают при // перетаскивании проги на другой монитор. w:=trunc(XScale * Image.Width); h:=trunc(XScale * Image.Height); // при перетаскивании на второй мониторе с другим масштабом Image.Width и Image.Height могут станут неверными. // Помогает только пересоздание хэндла формы (баг) If (bm.Width<>w) or (bm.Height<>h) then bm.SetSize(w,h); bm.Canvas.BeginScene; bm.Canvas.SetMatrix(TMatrix.CreateScaling( XScale, XScale) * Matrix); 1.1) Как нарисовать линию толщиной 1 пиксель? Этот простой вопрос отнял у меня пол дня:) Пришлось править код FMX.Canvas.D2D, по-другому никак не отключить антиалиасинг в битмапе. На форме его можно отключить свойством Quality, вот только его значения перепутаны - HighQuality на самом деле означает худшее качество с размытой графикой.
    Даже после отключения AA нужна еще 1 хитрость - чтобы линия (горизонтальная или вертикальная) получилась толщиной ровно 1 пиксель,  у меня получился примерно такой код
    procedure TCanvasHelper.LineToPix(xFrom, yFrom, xTo, yTo, Opacity: single); var pFrom, pTO: TPointF; xs: single; begin xs := Max(1, Matrix.m11); If xs > 1.1 then begin pFrom := PointF(xFrom, yFrom).Round; pTO := PointF(xTo, yTo).Round; end else begin pFrom := PointF(round(xFrom) + 0.5, round(yFrom) + 0.5); pTO := PointF(round(xTo) + 0.5, round(yTo) + 0.5); end; Stroke.Thickness := 1/xs; DrawLine( pFrom, pTO, Opacity); end; 2) Шрифты. Это жуть!:) Впрочем об этом пишут везде.
    Заставить в D2D канве (винда) работать ClearType не удалось
    (хотя при рисовании в битмапе как написано выше он у меня заработал, путем очередной правки FMX.Canvas.D2D. Надо еще отметить, что править системные коды я никогда не любил, и на VCL приходилось всего 1 раз, тут же у меня исходники очень быстро лишились девственности:))
    2.2) Шрифты и так выглядят не очень, но еще круче их портит свойство TAlign.Scale, из-за которого позиции контролов принимают не целые значения. Просто киньте на форму пару Label'ов с TAlign.Scale , запустите и начните медленно растягивать, наблюдая как мерцают и размыливаются буковки:))
    Вообще по итогу шрифты оказались самым неприятным моментом, все остальное кое-как правится, кроме внешнего вида приложения с замыленными шрифтами... (отключать D2D канву не предлагать!)
    Почему не доделали SetTextRenderingParams в FMX.Canvas.D2D.pas, почему не работает SetTextAntialiasMode - для меня пока загадка.
    3) Сворачивание приложения кликом по таскбару. Оно не работает:) (Почему за столько лет существования FMX никто этого не заметил? всем плевать, или никто не пользуется?) Да, на форуме есть пара решений, но они не идеальны, если у вас внимательные юзеры, они обязательно заметят странное мелькание приложения при разворачивании. Очередная правка системных кодов.
    4) FMX.TrayIcon.Win - штатного нет, но код выложенный на этом форуме работает идеально. Респект его автору. С ужасом думаю, что буду делать на MacOS..:)
    5) Если в TEdit нажать CTRL-V при пустом буфере, вылезает AV:) Правится не сложно, но блин, очередной системный юнит легко лишился девственности:))
    6) Выделение дабл-кликом на TEdit не работает..... (10.3) Хорошо что FMX.Edit.pas уже лежит в папке с проектом, долго искать не пришлось:))
    7) А на этот с виду несложный вопрос я так и не нашел ответа..
     
  6. Like
    Mars M получил реакцию от qz5 в FillText непонятно отрисовывает.   
    Решил проблему так.
    Canvas.FillText(aInfoRect, StrInfo, False, 1, [], TTextAlign.Leading, TTextAlign.Center);  
  7. Like
    Mars M получил реакцию от Ingalime в FillText непонятно отрисовывает.   
    Решил проблему так.
    Canvas.FillText(aInfoRect, StrInfo, False, 1, [], TTextAlign.Leading, TTextAlign.Center);  
  8. Like
    Mars M отреагировална slav_z в Работа с атрибутами текста   
    Как сделать текст с подобными атрибутами? Очень просто!
    (Цвет текста не работает в XE8) Вот весь код:
    unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.UIConsts, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.TextLayout; type TForm1 = class(TForm) Button1: TButton; Text1: TText; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.fmx} type TTextAccess = class(TText); procedure ClearTextAttribute(Text: TText); begin TTextAccess(Text).Layout.ClearAttributes; end; procedure AddTextAttribute(Text: TText; Pos,Length: Integer; FontStyles: TFontStyles; FontColor: TAlphaColor); var Font: TFont; begin Font:=TFont.Create; Font.Assign(Text.Font); Font.Style:=FontStyles; TTextAccess(Text).Layout.AddAttribute( TTextRange.Create(Pos,Length), TTextAttribute.Create(Font,FontColor)); end; procedure TForm1.Button1Click(Sender: TObject); begin AddTextAttribute(Text1,10,17,[TFontStyle.fsBold],claRed); AddTextAttribute(Text1,34,8,[TFontStyle.fsUnderline],claBlue); AddTextAttribute(Text1,47,8,[TFontStyle.fsStrikeOut],claGreen); Text1.Repaint; end; end.  
  9. Like
    Mars M отреагировална Vladimir PRO в Узнать размер видеопамяти   
    Обновлённая ссылка на DEMO:
    http://gofile.me/2Zesj/fbsharing-C0f3wb1o
    Последняя версия в папке:
    OpenCL_Demo2018 Barrier and Local_Memory REDUCT Delphi Tokyo 10.2.2 !! LAST !!
  10. Like
    Mars M отреагировална beeoz в TExpander глюки при при isExpanded=False   
    Проблема сохранилась и в IDE Delphi Rio 10.3 . Причиной оказалось то, что в модуле FMX.StdCtrls в процедуре TExpander.UpdateControlSize указана переменная FContentHeight вместо FContent.Height
    procedure TExpander.UpdateControlSize(const ChangingState: Boolean); begin FChangingState := ChangingState; try if FIsExpanded then begin FContent.Visible := FIsExpanded; if FButton <> nil then Height := FButton.Height + FContent.Height; // здесь заменил FContentHeight на FContent.Height и заработало Repaint; end else begin Repaint; FContent.Visible := FIsExpanded; if FButton <> nil then Height := FButton.Height; end; finally FChangingState := False; end; end;  
  11. Like
    Mars M получил реакцию от Ллирик в Странные ошибки при сборке   
  12. Like
    Mars M отреагировална ENERGY в Получить размер файла   
    function FileSize(const aFilePath: string): Int64; var   vSR : TSearchRec; begin   if FindFirst(aFilePath, faAnyFile, vSR ) = 0 then   begin     Result := vSR.Size;     FindClose(vSR);   end   else      Result := -1; end; Мультиплатформенный вариант без открытия файла (размер берется из файловой системы).
  13. Like
    Mars M отреагировална umkes в XE8, не могу установить соединение с базой Sqlite на устройстве под Android   
    Я делал так,
    FDMainConnection.Params.Values['Database'] := TPath.Combine(TPath.GetDocumentsPath, 'DB.s3db'); Создает в моих документах на винде, и где-то не знаю где на андроидах)
    Так же мб понадобится
    FDMainConnectionAfterConnect(Sender: TObject); begin FDMainConnection.ExecSQL('CREATE TABLE If Not Exists [TableName] (' + #13#10 + '[IdObject] INTEGER PRIMARY KEY NOT NULL,' + #13#10 + '[SomeField] INTEGER NULL' + #13#10 + ')'); end { FDMainConnectionAfterConnect }; и т.д.
  14. Like
    Mars M отреагировална ophion в Записать картинку с камеры в BLOB   
    Вот пример того, как писать и читать BLOB
    procedure SaveToFireDACBlob; var MemStream: TMemoryStream; begin FireDAC.Connected := True; MemStream := TMemoryStream.Create; try Image1.Bitmap.SaveToStream(MemStream); MemStream.Seek(0,0); FDQueryInsert.ParamByName('Media').LoadFromStream(MemStream,ftBlob); FDQueryInsert.ParamByName('MType').AsString := '0'; FDQueryInsert.ExecSQL(); except on e: Exception do begin ShowMessage(e.Message); end; end; MemStream.Free; FireDAC.Connected := False; end; procedure LoadFromFireDACBlob; var BlobStream: TStream; begin FireDAC.Connected := True; try FDQuerySelect.Open; FDQuerySelect.First; while(not FDQuerySelect.EOF)do begin // access a stream from a blob like this BlobStream := FDQuerySelect.CreateBlobStream(FDQuerySelect.FieldByName('Media'),TBlobStreamMode.bmRead); // access a string from a field like this if (FDQuerySelect.FieldByName('MType').AsString='0') then begin // load your blob stream data into a control ImageViewer.Bitmap.LoadFromStream(BlobStream); end; BlobStream.Free; FDQuerySelect.Next; end; except on e: Exception do begin //ShowMessage(e.Message); end; end; FireDAC.Connected := False; end; {источник http://www.fmxexpress.com/read-and-write-a-blob-field-using-firedac-with-firemonkey-on-android-and-ios/} Касательно работы с изменением качества/размера, считаю что необходимо использовать TBitmapSurface  (unit FMX.Surfaces)
  15. Thanks
    Mars M отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги   
    В конце концов получилось исправить.
    Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно.
    Пользуйтесь на здоровье!
    FMX.GifUtils.zip
  16. Thanks
    Mars M отреагировална x11 в Toast для Android Service   
    Это не вопрос. Просто подумал, что кому-нибудь может пригодится.
    https://forums.embarcadero.com/thread.jspa?threadID=118465
    Используем 2 файла: Androidapi.JNI.ToastForService.pas + FlyUtils.Android.PostRunnableAndTimer.pas.
    Пример вызова:
    Androidapi.JNI.ToastForService.PostToast('текст сообщения', LongToast); Проверил - работает.
    Есть ещё третий параметр "UseLastToastObj", но я так и не понял, для чего он. Документации нет.
  17. Thanks
    Mars M отреагировална dnekrasov в Таймер в сервисе   
    В архиве - простенький проект. Протестирован на Win и OSX.
     
    TimerThreadDemo.zip
  18. Like
    Mars M отреагировална x11 в Embarcadero.... Community Edition!   
    Настройка Delphi Community Edition для разработки под Android
     
    https://www.youtube.com/watch?v=_DXtU_8QdVE
     
  19. Like
    Mars M получил реакцию от Rusland в Настройки SDK для Токио   
    В SDK Manager оставляешь всё как есть, идешь в c:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\
    Там запускаешь SDK Manager.exe, обновляешь/устанавливаешь всё что он предложит. После устанавливаешь Android SDK build-tools 22.0.1
    И в принципе всё. Если будет ошибка при компиляции то в Environment Variables > BDSPLATFORMSDKSDIR указываем правильный путь до SDK - C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs
    Если всё равно ошибка то в  Environment Variables > Path вместо C:\ProgramData\Oracle\Java\javapath  указываем прямой путь до Java(к примеру C:\Program Files\Java\jdk1.8.0_60\bin)
  20. Like
    Mars M получил реакцию от Rusland в Embarcadero.... Community Edition!   
    Ну мой коммент был на счет того что там всё урезано по самое нихочу, так что об этом
    Я сам не раз сталкивался когда клиенты говорят что я как то не так ценовую политику устанавливаю, а если бы сделал вот так то круто было бы
    И для каждого круто это как ему дешевле и удобней. Так что можно сколько угодно спорить, но то что вышла эта версия очень хорошо.
    Я знаю пару человек которые вот с такими же словами(ну плюс ещё про то что делфи умер) переходили на другие языки, потом у них что то там не сросталось, понимали что "там" оказывается только на словах всё хорошо было, а в реалиях проблем не меньше, в общем кто плотником в итоге стал, кто ещё кем то. Не жалеют конечно, но беготня за травой которая зеленее не всегда на пользу идет.
    Думаю с ружьём возле каждого программиста никто стоять не будет, так что заработай 10..50000 в год никто и не заметит
    Ведь на пиратских зарабатывают, а сейчас хоть сказать можно, типа не доглядел, забылся
  21. Haha
    Mars M получил реакцию от #WAMACO в Embarcadero.... Community Edition!   
    Ну мой коммент был на счет того что там всё урезано по самое нихочу, так что об этом
    Я сам не раз сталкивался когда клиенты говорят что я как то не так ценовую политику устанавливаю, а если бы сделал вот так то круто было бы
    И для каждого круто это как ему дешевле и удобней. Так что можно сколько угодно спорить, но то что вышла эта версия очень хорошо.
    Я знаю пару человек которые вот с такими же словами(ну плюс ещё про то что делфи умер) переходили на другие языки, потом у них что то там не сросталось, понимали что "там" оказывается только на словах всё хорошо было, а в реалиях проблем не меньше, в общем кто плотником в итоге стал, кто ещё кем то. Не жалеют конечно, но беготня за травой которая зеленее не всегда на пользу идет.
    Думаю с ружьём возле каждого программиста никто стоять не будет, так что заработай 10..50000 в год никто и не заметит
    Ведь на пиратских зарабатывают, а сейчас хоть сказать можно, типа не доглядел, забылся
  22. Like
    Mars M получил реакцию от Andrey Efimov в Настройки SDK для Токио   
    В SDK Manager оставляешь всё как есть, идешь в c:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\
    Там запускаешь SDK Manager.exe, обновляешь/устанавливаешь всё что он предложит. После устанавливаешь Android SDK build-tools 22.0.1
    И в принципе всё. Если будет ошибка при компиляции то в Environment Variables > BDSPLATFORMSDKSDIR указываем правильный путь до SDK - C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs
    Если всё равно ошибка то в  Environment Variables > Path вместо C:\ProgramData\Oracle\Java\javapath  указываем прямой путь до Java(к примеру C:\Program Files\Java\jdk1.8.0_60\bin)
  23. Thanks
    Mars M получил реакцию от Ingalime в Настройки SDK для Токио   
    В SDK Manager оставляешь всё как есть, идешь в c:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs\android-sdk-windows\
    Там запускаешь SDK Manager.exe, обновляешь/устанавливаешь всё что он предложит. После устанавливаешь Android SDK build-tools 22.0.1
    И в принципе всё. Если будет ошибка при компиляции то в Environment Variables > BDSPLATFORMSDKSDIR указываем правильный путь до SDK - C:\Users\Public\Documents\Embarcadero\Studio\19.0\PlatformSDKs
    Если всё равно ошибка то в  Environment Variables > Path вместо C:\ProgramData\Oracle\Java\javapath  указываем прямой путь до Java(к примеру C:\Program Files\Java\jdk1.8.0_60\bin)
  24. Like
    Mars M получил реакцию от Rusland в Возможна работа с паролем в Tzipfile?   
    Тема старая, но вот тоже понадобилось работать с запаролеными zip архивами в Windows.
    Наткнулся на это http://www.uweraabe.de/Blog/2017/05/07/tzipfile-with-password-encryption-part-3/
    Там статья из трех частей. Если кратко то в третьей части можно скачать конечный результат модуля, во второй, в комментах есть пример работы.
    Все в сборе приаттачил к сообщению
    Проверил, вроде работает. Из минусов если добавлять в архив папку с файлами(ZipDirectoryContents) то файлы не паролятся, ну это не проблема.
     
    ZipTest.rar
  25. Like
    Mars M отреагировална Ingalime в Телеграмм   
    Замечена тендеция (учитывая моих зарубежных друзей), которой, очень странно, даже гуру этого форума подвержены...
    Все ушли в чат телеграмм - там полный, не ненужный флуд. Ценность форума идет к нулю уже не первый месяц после телеграмма. Вернитесь на форум, а телеграмм, как и любая соц. сеть для флуда - здесь не нужна. Модераторы верните силу этому форуму - убейте телеграмм...
×
×
  • Создать...