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

haword

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

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

  • Посещение

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

    19

Сообщения, опубликованные haword

  1. В 10.02.2022 в 11:06, krapotkin сказал:

    это где они такое говорят???

    работать ессн будет только та версия которая НУЖНА. Но ставить ее гораздо проще именно через SDK Manager чем запиханную в путь из 10 вложенных папок 10м по счету инсталлером делфи

    здесь 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.

     

  2. 5 часов назад, krapotkin сказал:

    По мне, лучший вариант - скачать Android Studio и там в настройках уже найти SDK manager и установить SDK/NDK в папки, которые лежат на вменяемой глубине.

    Delphi натравить на эти папки в настройках.

    Я делаю так со времен  Seattle и пока не подводила стратегия.

    embarcadero говорят что не надо так делать, только то sdk что идет с дистрибутивом будет 100% работать. 

  3. В 02.02.2022 в 13:37, Dynamo сказал:

    Господа, у кого есть успешный опыт перехода с Delphi на Android Studio? Поделитесь, плиз, опытом, советами, туториалами, идеями.
     

    просто все забываешь что знал про делфи и начинаешь кодить на 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 если хочешь надежности и стабильности. 

  4. как то все через заднее место )

    если я правильно понял то должно быть так - по таймеру запускается поток, в нем идет вычисление и синхронизация для обновления информации. 

    если делать как у вас то в каждом цикле надо сообщать потоку что пора бы обновить данные. так как поток может хз когда вызваться и счетчик может уже далеко улететь. при этом если вы используете одновременно одну переменную ее надо делать потокобезопасной и блокировать. 

  5. 18 часов назад, OnePeople сказал:

    Так и написанное в студии не будет работать если изменилось API androida. К каждой новой версии все равно надо подготавливать свое приложение хоть в студии, хоть в Делфи, хоть где то ещё.

    так они не обязывают вводить api какое то время пока не обкатают новшества. а потом в play появляется это обязанность определенного api. а в делфи тянут до последнего с этим пока запрета не будет опубликовывать такие приложения. 

  6. В 06.01.2022 в 18:52, OnePeople сказал:

    Да можно под Андроид нормально писать, callback'ов не хватает единственное, а дальше все хорошо работает. Если как правильно тут написали не трогают кроссплатформенность, этим и не пахнет, для каждой платформы все равно приходиться много кода разного писать( Моё мнение!

    только проблема в том что при выходе новой версии андроид по написанное на делфи начинает падать и надо ждать новую версию делфи чтобы исправить это. андроид студия бесплатна и выходит часто, так что подготовится всегда можно успеть. 

  7. В 03.01.2022 в 22:46, Grihan сказал:

    Костыль и еще какой
    потому что основная идея "один код для разных устройств" - идет лесом (не работает)

    и получается, что при наличии костылей то там то тут становится нецелесообразным использовать FMX для написания приложений под мобилы

    Для Win32/64 - use VCL

    Для Android - use Android Studio

    Для Mac - use XCode

    ну не так все плохо )

    Для Win32/64, Mac, Linux - FMX

    Для Android - Android Studio

    я думаю так наиболее оптимально. 

     

  8. В 30.12.2021 в 15:25, krapotkin сказал:

    а вот что с кроссплатформой делать - не знаю

    то же самое просто ставить развилки в зависимости от ос )

    по винде можно попробовать этот вариант из интернета 

    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;

    а вообще может просто лист не правильно в принтер вставляешь?)

  9. В 27.12.2021 в 08:33, Sashar333 сказал:

    Не то что косо, происходит смещение, как-бы за границу видимости на листе.

    тогда не понял ничего. почему бы вам не сделать смещение в пикселах для печати? типа настройки страницы и там в точках отступ и его при печати использовать? тогда под каждый принтер можно будет подстроиться. 

    у меня другая проблема была, у меня при печати текста было ощущение что весь текст на несколько градусов повернут что ли, и у буквы К вертикальная грань  сверху съезжала на 1 пиксель где то относительно низа. Но это было только при печати в pdf на macos.

  10. В 24.12.2021 в 13:04, Sashar333 сказал:

    С bitmap'ом тоже так же печатает.

    картинка ровная в image1 а на принтере косо? а так тоже криво? 

    Printer.Canvas.DrawBitmap(Image1.Bitmap, RectF(0,0, Image1.Bitmap.Width, Image1.Bitmap.Height) , RectF(0,0, Printer.PageWidth, Printer.PageHeight), 1);

     

     

  11. есть такой косяк у fmx. нельзя получить ширину этих полей у листа а соответственно печать немного кособочит. если есть возможность найдите (купите) fastreport fmx там они свои модули для печати написали и можно разобраться как работает. 

    как костыль, более-менее получается правильно когда сначала рисуешь на TBitmap потом копируешь картинку на канву принтера. НО! при этом появляется другой косяк, в fmx картинка не может быть больше 8000х8000 а у принтеров может быть разрешение и побольше. 

     

  12. 3 часа назад, Alisson R Oliveira сказал:

    Good afternoon, sorry for the translation.

    so actually i would like to capture the sql script executed in the database.

    I have several queries that have insert, delete and update instructions that are parameters. These parameters are fed and executed and I need to generate a log to save these script with the values instead of the parameters.
    I hope I explained better. Thanks

     

    Добрый день, извините за перевод.

    поэтому на самом деле я хотел бы захватить sql-скрипт, выполняемый в базе данных.

    У меня есть несколько запросов с инструкциями по вставке, удалению и обновлению, которые являются параметрами. Эти параметры загружаются и выполняются, и мне нужно создать журнал, чтобы сохранить этот сценарий со значениями вместо параметров.
    Надеюсь, я лучше объяснил. Спасибо

    Добрый день.

    Чем не понравилось мое решение? Надо просто пробежаться по всем параметрам 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.

  13. Все из-за неправильной системы обработки нажатий. В других системах срабатывает нажатие когда было сделано нажатие и без движения было отпущено, тогда сработает событие. В огнеобезьяне срабатывает сразу же после нажатия через какое то время, что не правильно. 

  14. Не знаю правильно понял или нет то что хотел спросить, так как переведено ужасно ) Я обычно когда пользуюсь переводчиком перевожу сначала на английский, потом полученный перевод назад на русский, если ничего не понятно то переделываю так чтобы после перевода на русский было понятнее. Ну да ладно. 

    Если нужен 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;
     

    может есть более красивое решение, не знаю. 

  15. В 27.11.2021 в 14:55, Sascha сказал:

    это очень спорное утверждение от дилетанта

    ну в чем же дело, переводите свои проекты на него и молитесь чтобы гугл в очередной раз не закрыл один из своих проектов )

  16. В 25.11.2021 в 22:58, OnePeople сказал:

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

    да но когда сталкиваешься с тем что на другом телефоне начинает все глючить. потом оказывается в гугле сделали обязательной версию sdk которая не поддерживается в делфи и надо ставить новую версию, а в новой версии свои баги, и проблемы падают как ком на голову, думаешь уже что проще было начинать писать изначально на том что больше подходит.

    конечно, калькулятор написать для себя и друзей, если раньше уже имел дело с делфи - проще некуда. но что то посерьезнее, что будешь лить в гугл, ну его нафиг, для себя я так решил.

    есть проект на делфи в плэймаркете, уже давно бы перевел на java но тормозит одно - в стандартном sqlite нет шифрования а в варианте от embarcadero есть. вернее было. оказывается в новых версиях что то там поменяли и уже и здесь может не быть шифрования или надо докупать драйвер для новой sqlite se что ли. но как дойдут руки переведу сразу. 

    да и для того если кто хочет программировать профессионально, firemonkey на рынке труда практически никому не нужен, зато kotlin java нарасхват. 

    В 25.11.2021 в 22:37, Sascha сказал:

     или на флаттере, забыли добавить.

    это подобие firemonkey, сегодня есть, через лет 5 уже забыли о нем. 

  17. В 23.10.2021 в 08:37, tichon77 сказал:

    И вы не показали как это делать

    потому что это знает большинство кто работает с огнеобезьяной. на ютубе есть уроки для этого. 

    перенеси стили из Windows 7 на Default чтобы везде были такие кнопки. 

    Но ты не понял что тебе тут говорят. А говорят простые вещи - надо учиться делать интерфейсы не аляпистыми и разноцветными, думая что это крутость показывает, а такими чтобы людям было удобно и привычно пользоваться. Для этого надо уметь не только кнопки разукрашивать в цвета светофора, а делать интерфейсы по правилам. https://material.io/design

×
×
  • Создать...