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

Brovin Yaroslav

Администраторы
  • Постов

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

  • Посещение

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

    390

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

  1. Like
    Brovin Yaroslav отреагировална Major в Реестр в Андроиде и Delphi   
    ENRGY,
    а как вам такой способ (не мой)?
     
    uses Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText; var SP: JSharedPreferences; SPE: JSharedPreferences_Editor; procedure TMain.FormShow(Sender: TObject); begin SP := TAndroidHelper.Activity.getSharedPreferences(StringToJString('ZTApp'), 0); IP.Text := JStringToString(SP.getString(StringToJString('IP'), StringToJString('127.0.0.1'))); end; procedure TMain.SaveClick(Sender: TObject); begin SPE := SP.edit; SPE.putString(StringToJString('IP'), StringToJString(IP.Text)); SPE.commit; end;  
  2. Like
    Brovin Yaroslav получил реакцию от Alex7wrt в Не могу вывести локальное уведомление   
    https://developer.android.com/training/notify-user/channels
    Создание через  TNotificationCenter
  3. Like
    Brovin Yaroslav отреагировална Yarpda в Не могу вывести локальное уведомление   
    Ну это я видел. Хотелось бы все-таки рабочий пример на FireMonkey (мы же на специализированном форуме FM)...
    Пытался на основе официального примера по наитию так:
    Var Notification: TNotification; Channel :TChannel; begin { verify if the service is actually supported } Notification := NotificationC.CreateNotification; try Channel := NotificationC.CreateChannel('MyCh','Описание'); Channel.Importance := TImportance.Default; Notification.Name := 'MyNotification'; Notification.AlertBody := 'Delphi for Mobile is here!'; Notification.ChannelId := 'MyCh'; Notification.FireDate := Now; { Send notification in Notification Center } NotificationC.PresentNotification(Notification); { also this method is equivalent if platform supports scheduling } //NotificationC.ScheduleNotification(Notification); finally Notification.DisposeOf; end; В таком случае ничего не выводится. Подозреваю что что-то не хватает. Но что именно...
    P.S. как вообще можно делать подобные вещи не оставляя каких-либо описаний или рабочих примеров в новом функционале?
  4. Like
    Brovin Yaroslav получил реакцию от Anatoliy в Announcing the New Embarcadero Developer Community   
    Community is a huge part of what makes our products so useful. Many of us have been around since the CompuServe forums days. Today our community is spread out across many different locations, and in many different languages. We have huge Delphi communities on Google+ and Facebook, not to mention everyone on Stack Overflow answering questions, plus many C++Builder communities too.
    Our community site here is the central hub where we connect with you, publish blog posts, provide updates, etc. This current iteration of the community site has had a number of problems, so we've decided to retire it and move to a new community. In part of this move we are consolidating our Developer community onto IDERA's community. This doesn't mean we will mix database tools and developer tools. There are two different communities at the community.idera.com site. If you jump straight to community.idera.com/developer-tools/ you fill find yourself in our new developer tools community.
    Much of the content on this community site has been migrated to the new community. Effective today this community is read-only, and redirects will be in place soon, so head over to the new community and we will see you online!
     
     
    Просмотр полной статьи
  5. Like
    Brovin Yaroslav отреагировална IVGSoft в Обработка анимированных GIF по рецепту китайского коллеги   
    В конце концов получилось исправить.
    Для interlaced гифок проблема была вообще пустяковая. Одна строчка не в том месте. А вот для optimized все оказалось несколько сложней, но в итоге теперь все гифки отображаются правильно.
    Пользуйтесь на здоровье!
    FMX.GifUtils.zip
  6. Like
    Brovin Yaroslav получил реакцию от Anatoliy в Не могу вывести локальное уведомление   
    В 10.3 расширено апи уведомлений для возможности указывать канал уведомлений для андроида. Это должно решить вашу проблему.
  7. Like
    Brovin Yaroslav получил реакцию от pill в [Статья] Новый подход разработки компонентов FireMonkey “Контрол – Модель – Презентация”. Часть 2. TEdit с автозавершением   
    Ссылка: http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-2-tedit-with-autocomplete-ru/ Автор: Ярослав Бровин 2 часть статьи о новом подходе разработки визуальных компонентов в FireMonkey. Содерит практическую часть по созданию своего представления. В качестве примера, добавляется функция автозавершения ввода для стандатного компонента TEdit.
  8. Like
    Brovin Yaroslav отреагировална dnekrasov в Перехват сообщений в Windows   
    Попробовал... Не понял что такое LookUp.Handle - заменил на просто Handle и вызываю только если Msg.WParam = IMN_SETCANDIDATEPOS. Всё работает без ошибок. Вот мой код
    procedure TMainForm.WMIMENotify(var Msg: TMessage); var Imc: HIMC; ImeCandidateFormProperties: TCandidateForm; begin if Msg.WParam = IMN_SETCANDIDATEPOS then begin Imc:=ImmGetContext(FMXHandleToHWND(Handle)); ImmGetCandidateWindow(Imc,0,@ImeCandidateFormProperties); ImeCandidateFormProperties.dwStyle:=CFS_CANDIDATEPOS; ImeCandidateFormProperties.ptCurrentPos.X := 100; ImeCandidateFormProperties.ptCurrentPos.Y := 100; ImmSetCandidateWindow(Imc,@ImeCandidateFormProperties); ImmReleaseContext(FMXHandleToHWND(Handle),Imc); end; end;  
  9. Like
    Brovin Yaroslav отреагировална dnekrasov в Перехват сообщений в Windows   
    Делаем как обычно, если надо переопределить какое-то событие окна
    interface uses {$IFDEF MSWINDOWS} Winapi.Windows, Winapi.Messages, FMX.Platform.Win, {$ENDIF} System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; type TMainForm = class(TForm) private procedure CreateHandle; override; {$IFDEF MSWINDOWS} procedure WMIMENotify(var Msg: TMessage); message WM_IME_NOTIFY; {$ENDIF} public end; var MainForm: TMainForm; implementation {$R *.fmx} {$IFDEF MSWINDOWS} var OldWndProc: Pointer = nil; function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; var Mess : TMessage; begin case Msg of WM_IME_NOTIFY: begin Mess.Msg := Msg; Mess.WParam := wParam; Mess.lParam := lParam; Mess.Result := 0; MainForm.Dispatch(Mess); Result := Mess.Result; end; else Result := CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; end; {$ENDIF} { TMainForm } procedure TMainForm.CreateHandle; begin inherited CreateHandle; {$IFDEF MSWINDOWS} OldWndProc:= Pointer(SetWindowLong(WindowHandleToPlatform(Handle).Wnd, GWL_WNDPROC, Integer(@NewWndProc))); {$ENDIF} end; {$IFDEF MSWINDOWS} procedure TMainForm.WMIMENotify(var Msg: TMessage); begin {что-то делаем} end; {$ENDIF}  
  10. Like
    Brovin Yaroslav получил реакцию от slav_z в Включение своих файлов в приложение   
    Добрый вечер,
     
    Тут есть два способа:
    Работа с Deployment менеджером. Он довольно подробно описан на Embarcadero Doc Wiki: http://docwiki.embarcadero.com/RADStudio/XE5/en/Deployment_Manager Работа через менеджер ресурсов и их получение через ResourceStream. Этот способ описал MyDelphiPw в сообщении выше тут. 1. Deployment Manager
    Специальная настройка проекта, которая позволяет указать, какие файлы нужно включить в состав пакета (Андроид) или бандла (iOS). Суть его работы простая, вы указываете какие файлы с вашего компьютера нужно перенести на устройство (в какое место). А далее работаете с ними из приложения так, как при обычной работе с файлами под Windows.
     
    На мобильных платформах нужно учесть специфику возможных местоположений файла. Пакет/Бандл (приложение) не допускает изменения внутренних файлов, потому что подписывается сертификатом. Поэтому теоретически при изменении файлов приложения, вы нарушаете целостность подписи. Именно по этому файлы внутри пакета/бандла доступны только на ЧТЕНИЕ.
     
    Однако, мобильные платформы предлагают широкий круг специальных мест для хранения (временные папки, песочницы, документы, карточка памяти и тд) изменяемых файлов (например файл локальной базы данных, или настройки в ini файле и тд).
     
    Описание всех вариантов местоположений с описанием путей есть в записе TPath (RTL): http://docwiki.embarcadero.com/RADStudio/XE5/en/Standard_RTL_Path_Functions_across_the_Supported_Target_Platforms. 

    Общие действия для использования менеджера развертывания такие:
    1. Открываем менеджер развертывания: Системное Меню -> Project -> Deployment.

    2. Выбираем в верхнем выпадающем меню платформу и конфигурацию сборки.

    3. Нажимаем кнопку добавить файл и выбираем нужный файл.
     
    4. Указываем местоположение файла, куда он должен поместиться после развертывания приложения на устройстве. Тут есть особенность, если файл нужен только на чтение, то пути менять не надо. Если возможна ситуация, когда файл может быт изменен, то файл нужно поместить под iOS в Startup\Documents\ (регистр важен)

    Под Андроид в assets\internal (регистр важен) - для внутреннего доступа из пакета приложения или assets - для внешнего доступа

    5. Получаем пути к расположению файлов:
    Под iOS:
    TPath.Combine(TPath.GetDocumentsPath, 'filename') Под Андроид:
    TPath.Combine(TPath.GetDocumentsPath, 'filename') { Внутренний доступ} TPath.Combine(TPath.GetSharedDocumentsPath, 'filename') { Внешний доступ } Полезные ссылки
    Подробное руководство по добавлению файлов для iOS: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_iOS_App#Loading_and_Deploying_Files Подробное руководство по добавлению файлов для Android: http://docwiki.embarcadero.com/RADStudio/XE5/en/Creating_an_Android_App#Loading_and_Deploying_Files
  11. Like
    Brovin Yaroslav получил реакцию от L0ndl3m в Фоновое выполнение операции без "замораживания" отрисовки   
    Вся отрисовка выполняется в главном потоке приложения. Поэтому, если вы пытаетесь выполнить скачивание файла в основном потоке, то вся отрисовка приостановится до момента окончания вашей операции. Поэтому правило хорошего тона - это вынесение долгих операций (загрузка, ответ авторизации и тд) в отдельный поток. 
     
    Примерный код приведен ниже:
    1. Создаем отдельный поток, в котором вы будите скачивать файл (я поставил для эмуляции скачивания просто паузу на 5 секунд):
    type TMyTask = class (TThread) protected FOnTaskStarted: TThreadMethod; FOnTaskFinished: TThreadMethod; procedure DoStarted; procedure DoFinished; procedure Execute; override; public property OnTaskStarted: TThreadMethod read FOnTaskStarted write FOnTaskStarted; property OnTaskFinished: TThreadMethod read FOnTaskFinished write FOnTaskFinished; end; Реализация:
    { TMyTask } procedure TMyTask.DoFinished; begin if Assigned(OnTaskFinished) then OnTaskFinished; end; procedure TMyTask.DoStarted; begin if Assigned(OnTaskStarted) then OnTaskStarted; end; procedure TMyTask.Execute; begin Synchronize(DoStarted); try Sleep(5000); // Эмуляция выполнения 5 Секундной задачи finally Synchronize(DoFinished); end; end; Само использование такого потока будет следующим (в моем примере после выполнения операции, появится сообщение):
    TForm3 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private FMyTask: TMyTask; public procedure DoTaskStarted; // Callback, вызываемый в начале старта операции procedure DoTaskFinished; // Callback, вызываемый в конце выполнения операции. Аналог OnTerminate procedure StartMyTask; // Запуск задачи end; procedure TForm3.Button1Click(Sender: TObject); begin StartMyTask; end; procedure TForm3.DoTaskStarted; begin end; procedure TForm3.DoTaskFinished; begin ShowMessage('Выполнение задачи окончено'); end; procedure TForm3.StartMyTask; begin if FMyTask <> nil then begin FMyTasl.OnTaskStarted := nil; FMyTasl.OnTaskFinished := nil; FMyTask.Free; end; FMyTask := TMyTask.Create(True); FMyTask.OnTaskStarted := DoTaskStarted; FMyTask.OnTaskFinished := DoTaskFinished; FMyTask.Start; end; При таком подходе главный поток не будет блокироваться и будет корректно отрисовываться и работать.
  12. Like
    Brovin Yaroslav получил реакцию от Anatoliy в What's New and Updated in GetIt for November 2018   
    The GetIt Package Manager is your source for RAD Studio, Delphi, and C++Builder add-ins and packages built right into your favorite IDE. Here's a look at what was new and updated during the month of October 2018 along with the most popular downloads. Find a new favorite for November today!

    Want your Package, Library, Trial, or Open Source Project in GetIt? Just fill out this form.
    New and Updated
    The following components are new to GetIt this month, or were recently updated to a newer version.
      Delphi Console - Delphi Console is a Delphi implementation of the well-known C# class: System.Console. With this in hand you can easily use all the functions of the console window. For example: Console.WriteLine.
    [GitHub]
      Eigen - C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.
    [More info]
      Trial - FMX Skeez - An animated list view component for Delphi FireMonkey. The package includes derived components: filesystem browser, picture list viewer and audio file list viewer.
    [More info]
      Trial - ImageEn - A native image library for Delphi and C++ Builder. It includes a complete suite of components to handle all aspects of image and editing, analysis and display. 
    [More info]
      Trial - nrComm Lib - Helps with wide range of device communication tasks and industrial issues. It contains ready solutions for RS232, modbus, GSM, HID and etc.
    [More info]
      Trial - Clever Internet Suite - A Delphi and C++Builder library for Internet communication protocols. It provides support for HTTP, FTP, SMTP, POP, IMAP, SFTP (SSH), DKIM, OAUTH, SOAP, WebDAV, complete client and server solutions for supported protocols, digital signatures and encryption.
    [More info]
    GetIt Top and Trending
    Here are the top 10 most popular downloads from October, and any from the top 30 that are increasing in popularity.
    1
        JEDI Code Library: The JEDI Code Library (JCL) consists of a set of thoroughly tested and fully documented utility functions and non-visual classes which can be instantly reused in your Delphi and C++ Builder projects. 2
        JEDI Visual Component Library: JVCL is a library of over 600 Delphi visual and non-visual Delphi/C++Builder components. 3
        Icons8: Single icon pack with 64,800 free icons. Each icon is in 5 flat styles. 4
        CnWizards: CnPack IDE Wizards (CnWizards) is an extremely popular, well established and comprehensive free open source plug-in toolset for Delphi/C++ Builder/RAD Studio to help improve development efficiency by proving a large number of useful add-ons and wizards to enhance the Delphi/C++ Builder/RAD Studio IDE. 5
        Aqua Light Slate 2 VCL Style: Free to use VCL Style 6
        CodeSite Express: Live Local and Remote Application Logging 7
        Abbrevia: Abbrevia is a compression toolkit for Delphi and C++Builder.
    Supported on platforms: Windows, Android, macOS, and iOS. 8
        AsyncPro for VCL: Async Professional is a comprehensive communications toolkit for Embarcadero Delphi and C++Builder. Supported on platforms: Win32, Win64 9?
        FortesReport Community Edition: The FortesReport is a powerful report generator available as a package of components for Delphi. In FortesReport, the reports are composed of bands that have specific functions in the print stream. You define groupings, sub-levels and totals simply by hierarchical relationship between bands. Moreover, the FortesReport has a rich palette of components for text, charts, formulas, bar codes, filters and layout. 10
        Glossy 2 VCL Style: Free to use VCL Style 15?
        EhLib: EhLib is a Delphi and C++Builder library of visual and non-visual components. Most advanced component is DBGridEh, component to operate tabular data in DataSet. Library includes more than 30 components in total. 20?
        SysTools for VCL: Utility routines and classes for Delphi and C++Builder. It includes bar codes, sorting, money routines, logging, high precision math...Supported on platforms: Windows 28?
        Clever Internet Suite: Clever Internet Suite is a Delphi and C++Builder library for Internet communication protocols. It provides support for HTTP, FTP, SMTP, POP, IMAP, SFTP (SSH), DKIM, OAUTH, SOAP, WebDAV, complete client and server solutions for supported protocols, digital signatures and encryption. 30?
        TFrameStand: TFrameStand is a component to ease use of FMX frames in your application. Take advantage of TFrameStand functionalities to build stunning visual transitions and improve the visual continuity of your UI. Supported on platforms: Win32, Win64, Android, OS X. Open source by Andrea Magni. Просмотр полной статьи
  13. Like
    Brovin Yaroslav получил реакцию от Anatoliy в Не прокручивается scrollbox при протягивании на listbox   
    Добрый день,
     
    Что по вашему должно скролиться, когда у вас в скрооллируемом контроле лежит другой скроллируемый контрол, когда вы ведете пальцем по внутреннему контролу?
  14. Like
    Brovin Yaroslav получил реакцию от Tot999 в Как правильно рисовать на канве?   
    Отключить нет. Форма сама определяет при помощи контролов, какие области формы нужно перерисовать. Поэтому, если нужно добиться такого эффекта, то лучше использовать опять же временный буфер. И в нем делать наложение своей картинки на старую.
  15. Like
    Brovin Yaroslav получил реакцию от Anatoliy в заполнение окна формы 2-3 или колонки в зависимости от ориентации экрана   
    Добрый день,
     
    Используйте TGridLayout. У него вы только указываете размер элемента (ItemWidth, ItemHeight). Далее этот компонент автоматчиески все дочерние контролы выстраивает в сетку с размером ячейки ItemWidth x ItemHeight
  16. Thanks
    Brovin Yaroslav получил реакцию от Мирзали Пирмагомедов в Как я могу скрыть / показать клавиатуру под "Android"?   
    Русский
    За управление виртуальной клавиатурой в FireMonkey отвечает сервис IFMXVirtualKeyboardService (Embarcadero Doc Wiki). Который позволяет отображать и скрывать клавиатуру.
    Для скрытия клавиатуры достаточно выполнить следующий код:
    uses FMX.Platform, FMX.VirtualKeyboard; procedure TForm5.ButtonHideKeybordClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; Чтобы показать клавиатуру для контрола:
    procedure TForm5.ButtonShowKeyboardClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Запрашиваем сервис виртуальной клавиатуры if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(Edit1); end;

    English 
    FireMonkey has special service for managing Virtual Keyboard. It is IFMXVirtualKeyboardService (Embarcadero Doc Wiki). It allows show and hide keyboard.
    For showing virtual keyboard use next code: uses FMX.Platform, FMX.VirtualKeyboard; procedure TForm5.ButtonHideKeybordClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Request service of visrtual keyboard if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.HideVirtualKeyboard; end; For showing virtual keyboard for control:
    procedure TForm5.ButtonShowKeyboardClick(Sender: TObject); var KeyboardService: IFMXVirtualKeyboardService; begin // Request service of visrtual keyboard if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then KeyboardService.ShowVirtualKeyboard(Edit1); end;
  17. Like
    Brovin Yaroslav отреагировална Zyablik3000 в Компонент - наследник TPresentedScrollBox   
    Всем спасибо) Решение нашел сам.
    Прочитав http://yaroslavbrovin.ru/new-approach-of-development-of-firemonkey-control-control-model-presentation-part-1-ru/  и другие материалы с этой странички (к слову: жутко полезная информация) перекрыл в своем компоненте функцию
    function DefinePresentationName: string; override;
    function TScrBox.DefinePresentationName: string; begin Result:='PresentedScrollBox-style'; end; Дело оказалось в том, что не загружалась презентация для моего компонента (а модель создавалась), точнее пыталась загрузиться презентация 'ScrBox-style', прокси для которой не зарегистрирован. Ведь имя презентации формировалось как 'Имя класса' + '-style'
    Но этого оказалось недостаточно. Еще понадобилось задать свойство StyleLookup:='scrollboxstyle'; т.к. скроллбары и прочие контролы берутся из стиля TStyledCustomScrollBox'а, который описан в FMX.ScrollBox.Style.
    Надеюсь кому-то поможет, и этот кто-то не будет как я тратить на решение этой задачи три дня жизни.
     
    Test.7z
  18. Like
    Brovin Yaroslav получил реакцию от Евгений Корепов в Есть ли какая-нибудь возможность вставить тире в package файла AndroidManifest.xml   
    Нет. Название Java пакета не поддерживает "-" в названии. Только латинские буквы в нижнем и верхнем регистрах, числа и '_'.
    https://developer.android.com/guide/topics/manifest/manifest-element?hl=ru#package
     
  19. Like
    Brovin Yaroslav получил реакцию от Superator в Есть ли какая-нибудь возможность вставить тире в package файла AndroidManifest.xml   
    Нет. Название Java пакета не поддерживает "-" в названии. Только латинские буквы в нижнем и верхнем регистрах, числа и '_'.
    https://developer.android.com/guide/topics/manifest/manifest-element?hl=ru#package
     
  20. Like
    Brovin Yaroslav отреагировална kami в Передача параметра программе   
    Самые очевидные ошибки и недочеты:
    1. Почему FindWindowA? Зачем явное указание Ansi-версии этой функции?
    2. cbData - это размер данных в байтах. 1 символ <> 1 байт.
    3. SendMessage - это функция. И она возвращает результат. Его необходимо анализировать.
    4. StrLCopy... вы уверены, что ParamStr(1) влезет в 100 символов?
    Ощущение, что этот код вы скопировали из какого-то VCL примера времен Delphi5
  21. Like
    Brovin Yaroslav отреагировална kami в Передача параметра программе   
    Есть волшебная аббревиатура - IPC. Inter process communication.
    Считайте, что у вас два разных приложения.Абсолютно разных. Которым нужно взаимодействовать друг с другом. Одно - источник, второе - приемник.
    Среди вариантов для Windows:
    1. Через сообщения, например - WM_COPYDATA (емнип, так обзывается). Нужно знать хендл окна, которому отправится сообщение (не уверен, что с WM_COPYDATA пройдет фокус с функцией BroadcastMessage) и нужно чтобы целевое приложение было на том же уровне изоляции (UIPI, кажется). Т.е. если приемник запущен от админа, а источник - как обычное приложение - этим способом их не состыковать.
    2. Через NamedPipes. Способ хорош для организации постоянного обмена между двумя любыми приложениями на одном компьютере (не только, но чаще всего - на одном). Для однократной передачи информации держать слушающий пайп в отдельном потоке, наверное, избыточно. Хотя я бы взял именно этот способ.
    3. TCP/IP и надстройки над ним: http, ftp и другое tp. Чаще всего используются для организации обмена между приложениями на разных компьютерах. Для локального - избыточно, да и проблемы с файрволлом могут быть.
    4. Через файловые потоки или данные в файле подкачки. Одно приложение пишет, второе периодически смотрит "а не появилось ли для меня чего нового". Как-то делал даже двусторонний обмен данными по этому механизму.
    Это навскидку. Выбирайте, потом можно говорить дальше.
  22. Like
    Brovin Yaroslav получил реакцию от Anatoliy в Есть ли какая-нибудь возможность вставить тире в package файла AndroidManifest.xml   
    Нет. Название Java пакета не поддерживает "-" в названии. Только латинские буквы в нижнем и верхнем регистрах, числа и '_'.
    https://developer.android.com/guide/topics/manifest/manifest-element?hl=ru#package
     
  23. Like
    Brovin Yaroslav получил реакцию от Alex7wrt в Есть ли какая-нибудь возможность вставить тире в package файла AndroidManifest.xml   
    Нет. Название Java пакета не поддерживает "-" в названии. Только латинские буквы в нижнем и верхнем регистрах, числа и '_'.
    https://developer.android.com/guide/topics/manifest/manifest-element?hl=ru#package
     
  24. Like
    Brovin Yaroslav получил реакцию от Anatoliy в [Android] Не получается увеличить высоту TProgressBar   
    В новой версии студии RAD Studio Berline, дизайнер стилей TStyleBook теперь показывает эти два свойства для каждого стилевого компонента.
    Таким образом открыв стиль в TStyleBook, вы можете сбросить значения этих свойств для снятия ограничений. Или же поменять их на свои.
  25. Like
    Brovin Yaroslav получил реакцию от Anatoliy в [Mobile] Почему в мобильных приложениях высота TGroupBox не меняется?   
    Добрый день,
     
    Смотрите ответ в теме только на примере TProgressBar, это руководство подходит для всех аналогичных ситуаций: [Android] Не получается увеличить высоту TProgressBar
×
×
  • Создать...