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

Ingalime

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

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

  • Посещение

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

    5

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

  1. Like
  2. Like
    Ingalime отреагировална sinuke в Возможно ли сделать такой интерфейс с ЛистВью?   
    Ну вот набросал примерчик. Он упрощенный, но смысл такой же примерно (код листвью со скриншота выше выложить не могу просто из-за того, что там идут зависимости от модели данных).
    Лично я все рисую кодом - так полный контроль того, что выводится на экран. И собственно так можно выводить практически что угодно. И не нужны никакие монструозные ТМС компоненты

    ListView_Schedule_Sample.zip
  3. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Рисовать без Repaint   
    В фмх канвас является общим для формы, а в вцл для каждого компонента свой.
    рисовать нужно в методе онпайнт компонента или формы
  4. Like
    Ingalime отреагировална krapotkin в List of new features and customer reported issues fixed in RAD Studio 10.2 Tokyo Release 3   
    почему-то самое важное не зашло
    теперь Mobile Pack вошел в Professional
  5. Like
    Ingalime отреагировална Brovin Yaroslav в List of new features and customer reported issues fixed in RAD Studio 10.2 Tokyo Release 3   
    Прочитать всю новость целиком на сайте Embarcadero
  6. Like
    Ingalime отреагировална Akad в Навигация TmapView   
    Вот так я открываю яндекс навигатор:
    var Intent: JIntent; pm: JPackageManager; tempList: JList; begin ..... Intent := TJIntent.Create; Intent.setAction (StringToJString('ru.yandex.yandexnavi.action.BUILD_ROUTE_ON_MAP')); Intent.setPackage(StringToJString('ru.yandex.yandexnavi')); pm := SharedActivity.getPackageManager; tempList := pm.queryIntentActivities(Intent, 0); // Проверяем, установлен ли Яндекс.Навигатор if (tempList = nil) or (tempList.SIZE = 0) then begin // Если нет - будем открывать страничку Навигатора в Google Play Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setData(StrToJURI('market://details?id=ru.yandex.yandexnavi')); end else begin // intent.putExtra(StringToJString('lat_from'), g_CurrentLocation.la); // intent.putExtra(StringToJString('lon_from'), g_CurrentLocation.lo); Intent.putExtra(StringToJString('lat_to'), StringToJString(las)); Intent.putExtra(StringToJString('lon_to'), StringToJString(los)); // intent.putExtra(StringToJString('desc'), StringToJString(LOS)); end; SharedActivity.startActivity(Intent); end; Тут задаётся куда. Так же можно откуда и описание (комментировано)
    Их нету. Есть возможность статично что-то отобразить. Не более.

     
  7. Like
    Ingalime отреагировална Вадим Смоленский в Aero-тема в Windows 7   
    Отвечаю на свой вопрос сам - вдруг кому пригодится. Наличие или отсутствие aero-темы при запуске можно определить следующим образом:
    function IsThisAero: Boolean; type TDwmIsCompositionEnabledFunc = function(out pfEnabled: BOOL): HRESULT; stdcall; var IsEnabled: BOOL; ModuleHandle: HMODULE; DwmIsCompositionEnabledFunc: TDwmIsCompositionEnabledFunc; begin Result := False; if Win32MajorVersion>=6 then // Vista or Windows 7+ begin ModuleHandle := LoadLibrary('dwmapi.dll'); if ModuleHandle <> 0 then try @DwmIsCompositionEnabledFunc := GetProcAddress(ModuleHandle, 'DwmIsCompositionEnabled'); if Assigned(DwmIsCompositionEnabledFunc) then if DwmIsCompositionEnabledFunc(IsEnabled) = S_OK then Result := IsEnabled; finally FreeLibrary(ModuleHandle); end; end; end; Критичным в моем случае оказалось то, что при запуске без aero-темы, но с экранным масштабированием многое масштабируется по-другому. Точнее сказать, одно масштабируется, а другое нет. Соответственно, чтобы компоненты приложения выравнивались, как задумано, приходится в разных ситуациях применять два разных коэффициента: один всегда равен экранному масштабу, а другой - только при запусках с aero; при запусках же без aero обращается в единицу. Всё это выходит довольно запутанно, часто при выборе коэффициента мне приходилось действовать методом тыка. Но в итоге добиился того, что приложение выглядит более-менее одинаково в обоих вариантах запуска.
  8. Like
    Ingalime отреагировална Alex7wrt в Анимация движение button по кругу   
    Задать для тех TButton, которые должны вращаться по окружности значение
    Position.Point:=PointF(Xc+R*cos(A+D[i]), Yc+R*sin(A+D[i])), где Xc, Yc - координаты центра, вокруг которого движется TButton, R - расстояние от этого центра до центральной точки TButton, A - параметр (угол), который линейно меняется (если нужна постоянная скорость) с помощью таймера либо TAnimation.
    Если элементов TButton несколько, то сдвигом A+D задается угловое смещение TButton относительно друг друга. Например, если всего N штук TButton, то Di=2*Pi/N*i.
    Xc, Yc и R легко выражается через координаты и размеры центра и TButton.
    P.S. Задача аналогична круговому вращению планет вокруг Солнца
  9. Thanks
    Ingalime отреагировална Fedor K в Что невозможно сделать на Delphi для Android?   
    Вы наверняка меня не поняли, стоило использовать кавычки). Добавлять SDK можно, но это головная боль  с "напильником" в руках. Если вы считаете, что все классно - не стану переубеждать. На том же Xamarin подключить SDK займет пару минут. Пока не будет создано расширений для IDE и небольшого рефакторинга исходников -> использовать сторонние библиотеки будут вызывать негативные эмоции.
     
    1. Да, используется, но это очередной костыль, который не ахти сказывается на скорости работы. 
    2. Да, с 2016 года прекращен выпуск мобильных процессоров. Поэтому со временем этот пункт можно отметать.
     
    п.с. Давайте соберем список действительно невозможных на сегодняшний день вещей.
  10. Like
    Ingalime отреагировална Andrey Efimov в Служба - двухсторонняя связь   
    Например вот так.
    в программе:
    var LIntent: JIntent; begin LIntent := TJIntent.Create; LIntent.setClassName(TAndroidHelper.Context.getPackageName(), StringToJString('com.embarcadero.services.nameservice')); LIntent.putExtra(StringToJString('NameForValue'), StringToJString('Value')); TAndroidHelper.Activity.StartService(LIntent); в сервисе:
    function TDM.AndroidServiceStartCommand(const Sender: TObject; const Intent: JIntent; Flags, StartId: Integer): Integer; var Value: string; begin Value := JStringToString(Intent.getStringExtra(StringToJString('NameForValue'))); // дальше что-то делаем end;  
  11. Like
    Ingalime отреагировална Евгений Корепов в FPushService.DeviceTokenValue = nil Что делать?   
    Вообще то я приложил к сообщению архив. Если бы удосужились его скачать и открыть, то обнаружили кроме готовой библиотеки для работы с пушами еще и демо-проект. 
  12. Like
    Ingalime отреагировална kami в Передача параметра программе   
    Есть волшебная аббревиатура - IPC. Inter process communication.
    Считайте, что у вас два разных приложения.Абсолютно разных. Которым нужно взаимодействовать друг с другом. Одно - источник, второе - приемник.
    Среди вариантов для Windows:
    1. Через сообщения, например - WM_COPYDATA (емнип, так обзывается). Нужно знать хендл окна, которому отправится сообщение (не уверен, что с WM_COPYDATA пройдет фокус с функцией BroadcastMessage) и нужно чтобы целевое приложение было на том же уровне изоляции (UIPI, кажется). Т.е. если приемник запущен от админа, а источник - как обычное приложение - этим способом их не состыковать.
    2. Через NamedPipes. Способ хорош для организации постоянного обмена между двумя любыми приложениями на одном компьютере (не только, но чаще всего - на одном). Для однократной передачи информации держать слушающий пайп в отдельном потоке, наверное, избыточно. Хотя я бы взял именно этот способ.
    3. TCP/IP и надстройки над ним: http, ftp и другое tp. Чаще всего используются для организации обмена между приложениями на разных компьютерах. Для локального - избыточно, да и проблемы с файрволлом могут быть.
    4. Через файловые потоки или данные в файле подкачки. Одно приложение пишет, второе периодически смотрит "а не появилось ли для меня чего нового". Как-то делал даже двусторонний обмен данными по этому механизму.
    Это навскидку. Выбирайте, потом можно говорить дальше.
  13. Like
    Ingalime отреагировална sinuke в Обновление приложения   
    Ну можно примерно так (не делал проверку на исключения)
    procedure TForm1.FormShow(Sender: TObject); var LRes: TResourceStream; LFileName: string; begin LFileName := TPath.Combine(TPath.GetDocumentsPath, '1.txt'); if not TFile.Exists(LFileName) then begin LRes := TResourceStream.Create(HInstance, 'SOMEFILE', RT_RCDATA); try LRes.SaveToFile(LFileName); finally FreeAndNil(LRes); ShowMessage('Файл скопирован из ресурсов'); end; end else ShowMessage('Файл уже существует'); end; 1.txt - имя вашего файла
    TPath.GetDocumentsPath - возвращает путь как раз к папке \assets\internal
    SOMEFILE - имя ресурса, который добавлен в проект. При этом после добавления файла в ресурсы обязательно нужно зайти в Deployment и убрать галочку с добавленного файла (при добавлении в ресурсы файл автоматически добавляется в деплоймент)
    Вот тестовый проектик. Делал правда в Starter-версии, поэтому Android не доступен. Но принцип ничем не отличается
    ResFile.zip
  14. Like
    Ingalime получил реакцию от МихаилЪ чайковЪ в Что невозможно сделать на Delphi для Android?   
    Если, главный модератор и разработчик, Равиль Зарипов, говорит, что у дельфи  нет будущего и надо уходить с Дельфи. То это диагноз FMX на сегодняшний день. Грустно...
  15. Like
    Ingalime отреагировална Евгений Корепов в FPushService.DeviceTokenValue = nil Что делать?   
    Да, забыл добавть, в константе ConstGCMAppID должен лежать ваш идентификатор отправителя (только циферки), к примеру 904067404541
  16. Like
    Ingalime отреагировална ENERGY в Как нарисовать круглый TImage   
    С помощью маски можно любую форму.TBitmap.CreateFromBitmapAndMask().
    В результате получим изображение с прозрачностью, в данном случае звезда и прозрачный фон. 

    procedure TForm1.Button1Click(Sender: TObject); var ImageRes: TResourceStream; Result: TBitmap; tmpMS : TMemoryStream; begin ImageRes := TResourceStream.Create(HInstance, 'IMAGE', RT_RCDATA); try Image1.Bitmap.CreateFromStream(ImageRes); Image2.Bitmap.LoadFromFile('c:\temp\MaskedBitmap\Images\Mask.png'); Result := TBitmap.Create; Result.CreateFromBitmapAndMask(Image1.Bitmap, Image2.Bitmap); // applying alpha channel to Bitmap - workaround. If you can improve write here how tmpMS := TMemoryStream.Create; Result.SaveToStream(tmpMS); Result.LoadFromStream(tmpMS); tmpMS.Free; Image3.Bitmap.Assign(Result); finally ImageRes.Free; Result.Free; end; end;  
    MaskedBitmap.zip
  17. Thanks
    Ingalime получил реакцию от DMS в Что невозможно сделать на Delphi для Android?   
    Очень интересная тема. Спасибо специалистам за анализ и обсуждение.
  18. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Что невозможно сделать на Delphi для Android?   
    Контролы нельзя класть, т.к. нету z-ордера (андроид), поэтому нативные всегда будут выше
  19. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Что невозможно сделать на Delphi для Android?   
    Это означает что поведение будет близко к нативному)
  20. Like
    Ingalime отреагировална Akad в Что невозможно сделать на Delphi для Android?   
    TMS Web Browser под андроидом по крайней мере закрывается вместе с окном, на котором он расположен. И кучи других проблем отсутствует. Может и контроллы поверх класть можно (не проверял, надобности не было). Но как навигацию использовать реально. У меня курьеры ездили.

     
  21. Like
    Ingalime получил реакцию от Sergionn в Что невозможно сделать на Delphi для Android?   
    Если, главный модератор и разработчик, Равиль Зарипов, говорит, что у дельфи  нет будущего и надо уходить с Дельфи. То это диагноз FMX на сегодняшний день. Грустно...
  22. Like
    Ingalime получил реакцию от FREEFAR в Что невозможно сделать на Delphi для Android?   
    Если, главный модератор и разработчик, Равиль Зарипов, говорит, что у дельфи  нет будущего и надо уходить с Дельфи. То это диагноз FMX на сегодняшний день. Грустно...
  23. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Что невозможно сделать на Delphi для Android?   
    Вот поэтому нужно валить с делфи, если хотите и дальше писать под андроид. Нам нельзя повышать СДК (андроид 6.0+ запрашивает разрешения в рантайм, чего мы не можем делать, хотя есть костыль у Андрея Ефимова)
  24. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Удаление похожих старых версий SDK Build-Tools   
    Если незнаете для чего и как настраивать, оставьте как было при установке студии.
  25. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Окно на переднем плане во время звонка   
    на счёт уведомления:
    Берем файл System.Notification.Android, находим CreateNativeNotification (или как-то так, уже не помню) и правим как вам нужно.
    Я делал через xml разметку, по этой статье. Там все просто. При том что у меня все это было в сервисе
×
×
  • Создать...