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

haword

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

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

  • Посещение

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

    19

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

  1. требовалось когда то - печать на принтер через блютуз накладных агентами по продажам. приезжали в точку, отдавали товар, печатали ТТН и уезжали в другую точку.
  2. haword

    RAD 11 и Android

    здесь https://docwiki.embarcadero.com/RADStudio/Alexandria/en/FireMonkey_Platform_Prerequisites написано - Warning: RAD Studio supports these Android development tools. Do not use other versions or update them independently of RAD Studio.
  3. больше не поддерживается это. ищите как это делаться в новой версии.
  4. haword

    RAD 11 и Android

    embarcadero говорят что не надо так делать, только то sdk что идет с дистрибутивом будет 100% работать.
  5. новый андроид, новая sdk, новая делфи или с++ билдер )
  6. просто все забываешь что знал про делфи и начинаешь кодить на java или kotlin ) в принципе там своих заморочек полно. все заново изучать. в интернете полно учебников как по шагам это сделать. но за то потом результат будет налицо. гриды летают. работа с потоками не тормозит прокручивающийся грид. минус - на ios уже конечно не запустишь свое ПО. я пробовал и Android Studio и Xamarin. мой вердикт такой - быстро, на коленке, пару кнопок и список чего либо без заморочек с кэшированием картинок и так далее - fmx пойдет, или там калькулятор налабать. если хочешь чтобы приложение летало, списки прокручивались плавно, без тормозов, при это не было проблем что не запускается на новом андроиде - то Android Studio. Если хочется заморочиться и в результате получить ПО работающее быстрее чем FMX но тормознее чем на Android Studio но за то с возможностью запуска на iOS MacOS то Xamarin. Если сравнивать Xamarin с FMX то тут так, Xamarin более отзывчивее, поддержка лучше, реагируют на новые SDK быстрее, но нельзя просто так рисовать на Canvas как в FMX потому что его там нет. Например если захотите подкрасить ячейку в списке в отдельный цвет то придется пройти целый квест чтобы это сделать меняя стили. На FMX перекрыл прорисовку ячейки и рисуй сам что хочешь. Поэтому в итоге для себя решил что Win Mac Lin - FMX, для мобильных ОС либо Xamarin но там придется прыгать с бубном делая так чтобы приложение работало везде одинаково, либо Android Studio и XCode если хочешь надежности и стабильности.
  7. как то все через заднее место ) если я правильно понял то должно быть так - по таймеру запускается поток, в нем идет вычисление и синхронизация для обновления информации. если делать как у вас то в каждом цикле надо сообщать потоку что пора бы обновить данные. так как поток может хз когда вызваться и счетчик может уже далеко улететь. при этом если вы используете одновременно одну переменную ее надо делать потокобезопасной и блокировать.
  8. так они не обязывают вводить api какое то время пока не обкатают новшества. а потом в play появляется это обязанность определенного api. а в делфи тянут до последнего с этим пока запрета не будет опубликовывать такие приложения.
  9. только проблема в том что при выходе новой версии андроид по написанное на делфи начинает падать и надо ждать новую версию делфи чтобы исправить это. андроид студия бесплатна и выходит часто, так что подготовится всегда можно успеть.
  10. ну не так все плохо ) Для Win32/64, Mac, Linux - FMX Для Android - Android Studio я думаю так наиболее оптимально.
  11. то же самое просто ставить развилки в зависимости от ос ) по винде можно попробовать этот вариант из интернета type TMargins = record Left, Top, Right, Bottom: Double end; procedure GetPrinterMargins(var Margins: TMargins); var PixelsPerInch: TPoint; PhysPageSize: TPoint; OffsetStart: TPoint; PageRes: TPoint; begin PixelsPerInch.y := GetDeviceCaps(Printer.Handle, LOGPIXELSY); PixelsPerInch.x := GetDeviceCaps(Printer.Handle, LOGPIXELSX); Escape(Printer.Handle, GETPHYSPAGESIZE, 0, nil, @PhysPageSize); Escape(Printer.Handle, GETPRINTINGOFFSET, 0, nil, @OffsetStart); PageRes.y := GetDeviceCaps(Printer.Handle, VERTRES); PageRes.x := GetDeviceCaps(Printer.Handle, HORZRES); // Top Margin Margins.Top := OffsetStart.y / PixelsPerInch.y; // Left Margin Margins.Left := OffsetStart.x / PixelsPerInch.x; // Bottom Margin Margins.Bottom := ((PhysPageSize.y - PageRes.y) / PixelsPerInch.y) - (OffsetStart.y / PixelsPerInch.y); // Right Margin Margins.Right := ((PhysPageSize.x - PageRes.x) / PixelsPerInch.x) - (OffsetStart.x / PixelsPerInch.x); end; function InchToCm(Pixel: Single): Single; // Convert inch to Centimeter begin Result := Pixel * 2.54 end; procedure TForm1.Button2Click(Sender: TObject); var Margins: TMargins; begin GetPrinterMargins(Margins); ShowMessage(Format('Margins: (Left: %1.3f, Top: %1.3f, Right: %1.3f, Bottom: %1.3f)', [InchToCm(Margins.Left), InchToCm(Margins.Top), InchToCm(Margins.Right), InchToCm(Margins.Bottom)])); end; а вообще может просто лист не правильно в принтер вставляешь?)
  12. тогда не понял ничего. почему бы вам не сделать смещение в пикселах для печати? типа настройки страницы и там в точках отступ и его при печати использовать? тогда под каждый принтер можно будет подстроиться. у меня другая проблема была, у меня при печати текста было ощущение что весь текст на несколько градусов повернут что ли, и у буквы К вертикальная грань сверху съезжала на 1 пиксель где то относительно низа. Но это было только при печати в pdf на macos.
  13. картинка ровная в image1 а на принтере косо? а так тоже криво? Printer.Canvas.DrawBitmap(Image1.Bitmap, RectF(0,0, Image1.Bitmap.Width, Image1.Bitmap.Height) , RectF(0,0, Printer.PageWidth, Printer.PageHeight), 1);
  14. есть такой косяк у fmx. нельзя получить ширину этих полей у листа а соответственно печать немного кособочит. если есть возможность найдите (купите) fastreport fmx там они свои модули для печати написали и можно разобраться как работает. как костыль, более-менее получается правильно когда сначала рисуешь на TBitmap потом копируешь картинку на канву принтера. НО! при этом появляется другой косяк, в fmx картинка не может быть больше 8000х8000 а у принтеров может быть разрешение и побольше.
  15. Добрый день. Чем не понравилось мое решение? Надо просто пробежаться по всем параметрам TFDQuery и в зависимости от типа поля получить значение и сохранить его или поместить в сам запрос. Но помещая его в сам запрос нужно будет конвертировать вручную по типу, особенно даты. Why didn't you like my answer? You just need to loop through all TFDQuery parameters in a loop and, depending on the type of the field, get the value, save it, or put it into the query itself. But placing it in the query itself will need to be converted manually by type, especially the date.
  16. Все из-за неправильной системы обработки нажатий. В других системах срабатывает нажатие когда было сделано нажатие и без движения было отпущено, тогда сработает событие. В огнеобезьяне срабатывает сразу же после нажатия через какое то время, что не правильно.
  17. Не знаю правильно понял или нет то что хотел спросить, так как переведено ужасно ) Я обычно когда пользуюсь переводчиком перевожу сначала на английский, потом полученный перевод назад на русский, если ничего не понятно то переделываю так чтобы после перевода на русский было понятнее. Ну да ладно. Если нужен sql запрос с параметрами то надо организовать цикл по параметрам, и сохранять данные в строку. for i := 0 to qpg.FieldCount - 1 do begin paramstring:= paramstring + ' name: ' + qpg.Fields[i].FieldName; case qpg.Fields[i].DataType of ftInteger: begin paramstring:= paramstring + ' val int: ' + InTToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsInteger); end; ftFloat: begin paramstring:= paramstring + ' val flt: ' + FloatToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsFloat); end; ftCurrency: begin paramstring:= paramstring + ' val cur: ' + FloatToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsCurrency); end; ftSmallint: begin paramstring:= paramstring + ' val smallint: ' + IntToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsInteger); end; ftGuid: begin paramstring:= paramstring + ' val guid: ' + qms.ParamByName(qpg.Fields[i].FieldName).AsString; end; ftString, ftMemo, ftWideMemo, ftWideString: begin paramstring:= paramstring + ' val str: ' + qms.ParamByName(qpg.Fields[i].FieldName).AsString; end; ftDate: begin paramstring:= paramstring + ' val date: ' + DatetoStr(DateOf(qpg.FieldByName(qpg.Fields[i].FieldName).AsDateTime)); end; ftDateTime: begin paramstring:= paramstring + ' val datetime: ' + DateTimeToStr(qpg.FieldByName(qpg.Fields[i].FieldName).AsDateTime); end; ftTime: begin paramstring:= paramstring + ' val time: ' + TimeToStr(TimeOF(qpg.FieldByName(qpg.Fields[i].FieldName).AsDateTime)); end; ftTimeStamp: begin paramstring:= paramstring + ' val timestamp: ' + DateTimeToStr(qms.ParamByName(qpg.Fields[i].FieldName).AsDateTime); end; end; end; может есть более красивое решение, не знаю.
  18. ну в чем же дело, переводите свои проекты на него и молитесь чтобы гугл в очередной раз не закрыл один из своих проектов )
  19. ну что же, хорошо что получилось плохо что есть такие вот глюки. кстати а какая версия студии?
  20. да но когда сталкиваешься с тем что на другом телефоне начинает все глючить. потом оказывается в гугле сделали обязательной версию sdk которая не поддерживается в делфи и надо ставить новую версию, а в новой версии свои баги, и проблемы падают как ком на голову, думаешь уже что проще было начинать писать изначально на том что больше подходит. конечно, калькулятор написать для себя и друзей, если раньше уже имел дело с делфи - проще некуда. но что то посерьезнее, что будешь лить в гугл, ну его нафиг, для себя я так решил. есть проект на делфи в плэймаркете, уже давно бы перевел на java но тормозит одно - в стандартном sqlite нет шифрования а в варианте от embarcadero есть. вернее было. оказывается в новых версиях что то там поменяли и уже и здесь может не быть шифрования или надо докупать драйвер для новой sqlite se что ли. но как дойдут руки переведу сразу. да и для того если кто хочет программировать профессионально, firemonkey на рынке труда практически никому не нужен, зато kotlin java нарасхват. это подобие firemonkey, сегодня есть, через лет 5 уже забыли о нем.
  21. Добрый совет - лучше напиши на котлине или джаве, меньше потом проблем будет.
  22. у canvas есть свой способ отрисовки текста, его пробовали? да, она так же вызовет textlayout но все же.
  23. scale на windows 1 на android в зависимости от разрешения экрана. попробуйте рисовать не на image а на panel например или другой контрол.
  24. потому что это знает большинство кто работает с огнеобезьяной. на ютубе есть уроки для этого. перенеси стили из Windows 7 на Default чтобы везде были такие кнопки. Но ты не понял что тебе тут говорят. А говорят простые вещи - надо учиться делать интерфейсы не аляпистыми и разноцветными, думая что это крутость показывает, а такими чтобы людям было удобно и привычно пользоваться. Для этого надо уметь не только кнопки разукрашивать в цвета светофора, а делать интерфейсы по правилам. https://material.io/design
×
×
  • Создать...