Mars M
-
Постов
63 -
Зарегистрирован
-
Посещение
-
Победитель дней
4
Активность репутации
-
Mars M отреагировална slav_z в FMX: Скроллинг и нажатия
Все разработчики при работе с FMX рано или поздно сталкиваются с одной и той же проблемой: необходимо исключить "случайное" срабатывание нажатий элементов внутри скроллбокса во время его скроллинга. Идут годы, а решения так и нет. Давайте попробуем это исправить. Поехали!
Запускаем IDE, создаем новый проект, кидаем на форму TVertScrollBox и на него чего-нибудь побольше... запускаем на мобильном устройстве, пытаемся скроллировать,
получаем проблемы в виде срабатывания разных событий типа OnClick элементов.
Решение состоит в том, чтобы сделать элементы "невидимыми" для событий связанных с действиями пользователя с экраном во время скроллинга.
Делаем следующее:
Все. Переносим код в базовую форму, делаем его более гибким, убираем все те костыли, которые мы уже успели сделать ранее...
Удачи!
https://github.com/slav-libx/scroll-click.git
-
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)
-
-
Mars M отреагировална Vitaldj в Мобильная разработка на Delphi - программа для врачей по оценке взаимодействий лекарств.
Коллеги, я опубликовал на сайте FGX свое приложение. Можете «щупать». ?
https://forum.fgx-native.com/topic/76-медицинская-программа-для-оценки-взаимодействия-препаратов/
-
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) А на этот с виду несложный вопрос я так и не нашел ответа..
-
Mars M получил реакцию от qz5 в FillText непонятно отрисовывает.
Решил проблему так.
Canvas.FillText(aInfoRect, StrInfo, False, 1, [], TTextAlign.Leading, TTextAlign.Center);
-
Mars M получил реакцию от Ingalime в FillText непонятно отрисовывает.
Решил проблему так.
Canvas.FillText(aInfoRect, StrInfo, False, 1, [], TTextAlign.Leading, TTextAlign.Center);
-
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.
-
Mars M отреагировална Vladimir PRO в Узнать размер видеопамяти
Обновлённая ссылка на DEMO:
http://gofile.me/2Zesj/fbsharing-C0f3wb1o
Последняя версия в папке:
OpenCL_Demo2018 Barrier and Local_Memory REDUCT Delphi Tokyo 10.2.2 !! LAST !!
-
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;
-
-
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; Мультиплатформенный вариант без открытия файла (размер берется из файловой системы).
-
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 }; и т.д.
-
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)
-
Mars M отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги
В конце концов получилось исправить.
Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно.
Пользуйтесь на здоровье!
FMX.GifUtils.zip
-
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", но я так и не понял, для чего он. Документации нет.
-
Mars M отреагировална dnekrasov в Таймер в сервисе
В архиве - простенький проект. Протестирован на Win и OSX.
TimerThreadDemo.zip
-
Mars M отреагировална x11 в Embarcadero.... Community Edition!
Настройка Delphi Community Edition для разработки под Android
https://www.youtube.com/watch?v=_DXtU_8QdVE
-
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)
-
Mars M получил реакцию от Rusland в Embarcadero.... Community Edition!
Ну мой коммент был на счет того что там всё урезано по самое нихочу, так что об этом
Я сам не раз сталкивался когда клиенты говорят что я как то не так ценовую политику устанавливаю, а если бы сделал вот так то круто было бы
И для каждого круто это как ему дешевле и удобней. Так что можно сколько угодно спорить, но то что вышла эта версия очень хорошо.
Я знаю пару человек которые вот с такими же словами(ну плюс ещё про то что делфи умер) переходили на другие языки, потом у них что то там не сросталось, понимали что "там" оказывается только на словах всё хорошо было, а в реалиях проблем не меньше, в общем кто плотником в итоге стал, кто ещё кем то. Не жалеют конечно, но беготня за травой которая зеленее не всегда на пользу идет.
Думаю с ружьём возле каждого программиста никто стоять не будет, так что заработай 10..50000 в год никто и не заметит
Ведь на пиратских зарабатывают, а сейчас хоть сказать можно, типа не доглядел, забылся
-
Mars M получил реакцию от #WAMACO в Embarcadero.... Community Edition!
Ну мой коммент был на счет того что там всё урезано по самое нихочу, так что об этом
Я сам не раз сталкивался когда клиенты говорят что я как то не так ценовую политику устанавливаю, а если бы сделал вот так то круто было бы
И для каждого круто это как ему дешевле и удобней. Так что можно сколько угодно спорить, но то что вышла эта версия очень хорошо.
Я знаю пару человек которые вот с такими же словами(ну плюс ещё про то что делфи умер) переходили на другие языки, потом у них что то там не сросталось, понимали что "там" оказывается только на словах всё хорошо было, а в реалиях проблем не меньше, в общем кто плотником в итоге стал, кто ещё кем то. Не жалеют конечно, но беготня за травой которая зеленее не всегда на пользу идет.
Думаю с ружьём возле каждого программиста никто стоять не будет, так что заработай 10..50000 в год никто и не заметит
Ведь на пиратских зарабатывают, а сейчас хоть сказать можно, типа не доглядел, забылся
-
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)
-
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)
-
Mars M получил реакцию от Rusland в Возможна работа с паролем в Tzipfile?
Тема старая, но вот тоже понадобилось работать с запаролеными zip архивами в Windows.
Наткнулся на это http://www.uweraabe.de/Blog/2017/05/07/tzipfile-with-password-encryption-part-3/
Там статья из трех частей. Если кратко то в третьей части можно скачать конечный результат модуля, во второй, в комментах есть пример работы.
Все в сборе приаттачил к сообщению
Проверил, вроде работает. Из минусов если добавлять в архив папку с файлами(ZipDirectoryContents) то файлы не паролятся, ну это не проблема.
ZipTest.rar
-
Mars M отреагировална Ingalime в Телеграмм
Замечена тендеция (учитывая моих зарубежных друзей), которой, очень странно, даже гуру этого форума подвержены...
Все ушли в чат телеграмм - там полный, не ненужный флуд. Ценность форума идет к нулю уже не первый месяц после телеграмма. Вернитесь на форум, а телеграмм, как и любая соц. сеть для флуда - здесь не нужна. Модераторы верните силу этому форуму - убейте телеграмм...