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

Ingalime

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

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

  • Посещение

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

    5

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

  1. Like
    Ingalime отреагировална krapotkin в Разница между Push и Сервисом   
    пуш работает на уровне системы и не требует никаких сервисов
  2. Like
    Ingalime отреагировална Евгений Корепов в Item has been already purchased   
    Вот тут прочтите https://developer.android.com/google/play/billing/api.html#consume . Вам нужен потребляемый продукт.
    К примеру пользователь купил продукт, пусть будут самоцветы
     InAppPurchase.PurchaseProduct(PProductId);
    после этого вы записываете что у пользователя есть 100 самоцветов внутри (или где то еще) своего приложения.
    Теперь сообщаете билингу гугля что пользователь потребил продукт (ведь самоцветы у него уже его) :
    InAppPurchase.ConsumeProduct(PProductId);
    Все, билинг гугля готов вам продать этот товар (100 спмоцветов) еще раз.
    P.S. За применение АПИ Робокасса и подобного, согласно правилам, в лучшем случае вы получите заблокированное приложение, в худшем случае вы лишитесь аккаунта разработчика.
  3. Like
    Ingalime отреагировална RoschinSpb в Рисует за пределами канвы   
    На всякий случай, напомню, если контрол или канву повернуть, то все обрезки перестают действовать на мобильных устройствах.
     
  4. Like
    Ingalime отреагировална krapotkin в ListView скрывает повторяющийся текст заголовков   
    вот кусок из рабочего кода.
    если протрассировать по FindObject, то можно найти все элементы, которые создаются автоматом при создании итема 
    и заполнить тут, в коде
  5. Like
    Ingalime отреагировална Brovin Yaroslav в Holiday Delphi To-Dos   
    After another year of record CodeRage participation, I’ve been talking to other developers about what they do to promote Delphi. It was immediately obvious that they are “way too busy writing code!” This is a huge improvement, as only a few years back the standard response was “well, Delphi is no longer cool.” However, we still have a challenge. We need to make it easier for our customers to champion us within their organizations. We want people to be proud to say that they “do Delphi.”
     
    Here are a few Delphi holiday To-Dos if you are looking for a way to spread the merriment...
     
    Check out 10.2.2 with the new dark theme and a whole lot more. It will give you some good hints on where we are going with UX and it is just the beginning. Also, the Enterprise and Architect editions of RAD Studio now gets a RAD Server site license for FREE! A huge benefit! Don’t hesitate to provide feedback - we love it!
     
    Share Delphi @ 22 Magazine with your colleagues and managers to highlight the latest developments with Delphi and our ecosystem… there has been a lot of activity that has been missed. And yes there was some healthy debate on one forum around the number of countries in existence (we counted a huge number in one of our Delphi Boot Camps), but aside from classifications, the point is that we are seeing a resurgence and we like it!
     
    Build a Simple Mobile App with FMX. There is no better way to wow your customers, peers or supervisors than to see Delphi in action. There are plenty of samples and more coming your way. Write once and compile for Android and iOS, not to mention Windows and mac OS X.
     
    Check out the new Enterprise connectors. So simple to display your feed from Twitter and/or Facebook and show how fast you can build an app around it. More complex ideas may want to leverage the free InterBase for embedded mobile use. There are plenty of “disconnected” use cases that are difficult to do with other technologies.
     
    Watch a CodeRage replay on Embarcadero Academy.  Go catch a replay for a session you missed from CodeRage XII. They are all available on Embarcadero Academy. Share your favorite session with your friends. While you are there sign up for a course from the expert trainers on Embarcadero Academy. Also, make sure that if anyone doubts that there are good materials to learn Delphi, they know that this is no longer the case.
     
    Learn about the Ext JS framework. Sencha is new to our developer tools family, but already making a huge impact. There is a lot of tooling in existence to connect Delphi with Ext JS development. They share a lot in their completeness and focus on huge productivity improvements. There is a learning curve, but if you are looking for fast development across platforms with really nice UX, this is the way to go. Delphi and the associated VCL & FMX frameworks share a lot in common with Ext JS in the way they maintain compatibility for the long-run and provide unmatched performance. This sample app provides a great example that speaks both to FMX and Ext JS.
     
    Browse the GetIt Package Manager. Install a new style, sample project, library, or IDE Plugin. GetIt continues to expand: over 250 at last count. Look for new ways to solve the problems you face and make yourself even more productive.
     
    Blog about your favorite Delphi features, components or libraries and share it on social media. Delphi has an amazing 3rd party ecosystem. Check out the top 10 Delphi projects on GitHub or this huge collection of resources.
     
    What’s on your holiday to-do list? Do you have any Delphi goals for the new year?
    Просмотр полной статьи
  6. Like
    Ingalime отреагировална Brovin Yaroslav в Рисует за пределами канвы   
    Добавлять ClipRect при отрисовки в регионе.
    { clipping } procedure IntersectClipRect(const ARect: TRectF); virtual; abstract; procedure ExcludeClipRect(const ARect: TRectF); virtual; abstract;  
  7. Like
    Ingalime отреагировална Brovin Yaroslav в Есть ли аналог TCreateParams ?   
    Нет, аналога нет. Так как кода должен одинаково работать на всех платформах, а CreateParams сугубо виндовая вещь.
  8. Like
    Ingalime отреагировална Brovin Yaroslav в Item has been already purchased   
    Не очень понимаю, что не так.
    Если товар уже был один раз куплен, то считается, что он есть у клиента. Поэтому при попытке повторно купить то, что уже было куплено порождает данное сообщение.
  9. Like
    Ingalime отреагировална kami в Разница в вызовах Synchronize   
    Разница есть. И она не только в вызове Synchronize, но и Queue.
    Указание потока в качестве источника метода синхронизации позволяет вам впоследствии сделать TThread.RemoveQueuedEvents(myThread) перед его удалением.
    Вызов RemoveQueuedEvents необходим, если в синхронизируемых методах может идти обращение к полям и методам уничтожаемого потока. Потому что с удалением потока то, что подлежало синхронизации, никуда не пропадет, а раз поток уже не существует - у вас вылезет AV на ровном месте. Или же ваш код испортит чью-то память, что еще труднее отловить.
  10. Like
    Ingalime отреагировална Maximus в Разница в вызовах Synchronize   
    http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Classes.TThread.Synchronize
    Судя по документации, если передать первым параметром поток, то в дальнейшем в основном потоке можно будет определить какой из дополнительных потоков вызвал метод. Если это не требуется, то можно ничего не передавать.
  11. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в Почему нет родных Android-эффектов у FMX приложения?   
    это называется Bounce эффект доступен в TAniCalc, но просто так до него не добраться.
    Можно использовать ModernListView, там легко это делается.
    P.S. поиск по форуме ModernLV, ModernListView
  12. Like
    Ingalime отреагировална FREEFAR в Delphi и Android 8   
    Да.
  13. Like
    Ingalime отреагировална x11 в DevExpress для FMX   
    Разработчики DevExpress разрабатывают пробные компоненты для Firemonkey
    отсюда
    http://www.sql.ru/forum/1279315-1/na-delphi-dlya-linux-v-etot-raz-s-interfeysom

  14. Thanks
    Ingalime отреагировална krapotkin в Цвет кнопки   
    он и так не во всех темах есть...
    а стандартный олдскул - 4 цвета в соответствии с состоянием кнопок делать 5 сек
  15. Thanks
    Ingalime отреагировална krapotkin в Цвет кнопки   
    положить в нее ректангл
    а самый простой - это просто использовать ректангл вместо кнопки
  16. Like
    Ingalime отреагировална Brovin Yaroslav в RAD Android is Our Cool App Winner for October   
    I hope everyone had a nice Thanksgiving, and survived the Black Friday/Cyber Monday marketing deluge. I was so busy catching up with family and eating too much that I’m just now announcing Embarcadero’s October Cool App contest winner is RAD Android, an app that makes it easy for people to develop mobile programs.
    RAD Android, created by talented developer Abdalkader, is a tiny programming language for the Android operating system that allows anyone to write simple programs for Android devices from an Android device. These apps leverage wireless capabilities such as Bluetooth, SMS and Wi-Fi so people can create a wide variety of useful smartphone tools. They can also communicate with the Arduino open source electronics platform to enable makers and tinkerers of all levels to develop an array of imaginative tools and projects such as digital scientific instruments or home tools like an automatic guitar tuner.
    Using Delphi to create an application development solution, even a tiny one, is a significant undertaking. RAD Android is an amazing example of how native development can unlock the power of the Android platform, given a dedicated and talented developer with the right skills and tools for the job.

     
    This video shows RAD Android in action:
    [YoutubeButton url='https://www.youtube.com/watch?v=9s8L3IMu9pY']     Or visit the Google Play store and install this free app for yourself!   Interested in submitting for the Embarcadero’s Cool App contest? It’s open to any business or consumer application built with RAD Studio, Delphi or C++Builder. Embarcadero awards Cool App contest winners a $500 Amazon gift card and winning submissions are also highlighted on the company’s YouTube channel. For more information on the contest and a link to the submission form, click here.  
    Просмотр полной статьи
  17. Like
    Ingalime отреагировална ENERGY в Подскажите необходимое железо для разработки под iOS   
    Я пишу на Delphi под iOS без мака.
    Что понадобится:
    1. Процессор Intel, не AMD. Т.к. MacOS работает под Intel.
    2. VMware + образ с установленной MAcOS.
    3. iPhone 5s или выше. Т.к. начиная с iPhone 5s процессор стал x64. Сейчас публиковать нужно обязательно x64. iPhone 5 версия - x32.   Телефон можно купить б\у.
    Идешь на рутрекер и скачиваешь Vmware образ с уже установленным MacOs Sierra. Также читай инструкции, - нужно пропатчить VMware - т.к. по дефолту возможность работы с OSX там отключена.
    Дальше присоединяшь телефон к компу, и Vmware определяет этот телефон. Дальше все по инструкции EMBT. 
    Да кстати, желательно не обновлять телефон до версии iOS 11 - к примеру у меня на Berlin были проблемы с этим SDK - поэтому я сейчас компилю проект на 10 SDK (при этом телефон остался на 11).
    Итого все компилиться, и работает Debug - кстати он гораздо быстрее  чем Android отладка.
    Да не забудьте купить аккаунт разработчика Apple - 100$ в год. Без него будет куча проблем с настройкой. Есть временный бесплатный сертификат на 5 дней (работает в течении 5 дней, затем нужно делать ребилд) - для этого можно запустить Xcode и создать и запустить пустой проект, но лучше сразу купить платный - будет меньше проблем.
     
     
  18. Like
    Ingalime отреагировална Равиль Зарипов (ZuBy) в TTextSettings неразвёртвовается   
    посмотри тут
    https://github.com/rzaripov1990/ZMaterialComponents/blob/master/Library/FMX.ZMaterialEdit.pas
  19. Like
    Ingalime отреагировална Brovin Yaroslav в Добавление изображения в системную галерею изображений   
    Чтобы добавить любое изображение в системную галерею изображений Андроида нужно:
    Получить универсальный URI к вашей картинке GetImageUri. Для этого сохраняем изображение (если изображение находится в памяти устройства, а не в файловой системе) в кэш приложения. Формируем намерение JIntent, что хотим добавить изображение. Задаем URI к картинке и делаем широковещательный запрос на все приложения, которые могут обработать наш запрос. // Сохранение изображения в кэш приложения и извлечение Url к этому файлу function GetImageUri(ABitmap: TBitmap): Jnet_Uri; var ImageFile: JFile; ImageUri: Jnet_Uri; FileNameTemp: JString; FileNameExt: JString; begin FileNameTemp := StringToJString('temp'); FileNameExt := StringToJString('.jpg'); try ImageFile := TJFile.JavaClass.createTempFile(FileNameTemp, FileNameExt); ImageUri := TJnet_Uri.JavaClass.fromFile(ImageFile); ABitmap.SaveToFile(JStringToString(ImageFile.getAbsolutePath)); finally Result := ImageUri; end; end; procedure AddPhotoToGallery(const APhoto: TBitmap); var Intent: JIntent; begin Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_MEDIA_SCANNER_SCAN_FILE); Intent.setData(GetImageUri(APhoto)); SharedActivity.sendBroadcast(Intent); end;
  20. Like
    Ingalime отреагировална sinuke в Меню из TListBox   
    ListBox1.ItemIndex := -1;  
  21. Like
    Ingalime отреагировална Alex7wrt в Локальная рация, Android, пример   
    Сделал простой пример приложения рации в локальной сети под Android. Реализация через UDP. 
    Буду рад, если кому окажется полезным.
    Для начала/окончания сеанса связи нужно нажать на окружность

    Для проверки нужно 2 телефона
    unit Unit5; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase, IdUDPClient, IdGlobal, IdSocketHandle, Androidapi.JNI.Media, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, AndroidApi.JNI, AndroidApi.Helpers, FMX.Objects, System.Math; type TForm1 = class(TForm) Circle: TCircle; procedure ServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); procedure FormCreate(Sender: TObject); procedure CircleTap(Sender: TObject; const Point: TPointF); end; TSendThread = class(TThread) protected procedure Execute; override; end; var Form1: TForm1; SendThread: TSendThread; Server: TIdUDPServer; audioRecord: JaudioRecord; audiotrack: JAudioTrack; recording: boolean; buffer_Size, port,ch_in, ch_out, format, freq, source: integer; implementation {$R *.fmx} procedure TSendThread.Execute; var buffer: TJavaArray<Byte>; begin buffer := TJavaArray<Byte>.create(buffer_size); while recording do begin audioRecord.read(buffer,0,buffer_size); Server.Broadcast(TIDBytes(TJavaArrayToTBytes(buffer)),port); end; buffer.Free; end; procedure TForm1.CircleTap(Sender: TObject; const Point: TPointF); begin recording:= not recording; if recording then begin Circle.Fill.Color:=TAlphaColors.Red; Server.OnUDPRead:=nil; audiorecord.startRecording; SendThread:=TSendThread.Create; end else begin Circle.Fill.Color:=TAlphaColors.Gray; audiorecord.stop; Server.OnUDPRead:=ServerUDPRead; end; end; procedure TForm1.FormCreate(Sender: TObject); begin buffer_size:=2048; freq:=8000; port:=5555; Server:=TIdUdpServer.Create(Form1); with Server do begin BufferSize:=buffer_size; DefaultPort:=port; BroadCastEnabled:=true; Active:=true; OnUDPRead:=ServerUDPRead; end; Circle.Width:=min(Screen.Width,Screen.Height)*0.7; Circle.Height:=Circle.Width; ch_in:=TJAudioFormat.JavaClass.CHANNEL_IN_MONO; ch_out:=TJAudioFormat.JavaClass.CHANNEL_OUT_MONO; format:=TJAudioFormat.JavaClass.ENCODING_PCM_16BIT; source:=TJMediaRecorder_AudioSource.JavaClass.MIC; audioRecord := TJAudioRecord.JavaClass.init(source, freq, ch_in, format, buffer_size); audiotrack:=TJAudioTrack.JavaClass.init(3, freq, ch_out, format, buffer_size,1); end; procedure TForm1.ServerUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle); begin audiotrack.write(TBytesToTJavaArray(TBytes(AData)),0,Length(AData)); audiotrack.play; end; end.  
    radio.zip
  22. Like
    Ingalime отреагировална enatechno в Чтение текста   
  23. Like
    Ingalime отреагировална Fedor K в IdTCPClient-IdTCPServer управление соединением   
    Посмотрел ваш пример, все зависания и вылеты с ошибками связаны с обращением к пустым объектам, попыткой обработать все в одном обработчике. Исправить клиент дело не благодарное, поэтому сделал пример по работе с TCP сокетом с возможностью автоподключения (тык). Проверил на нескольких устройствах, полет нормальный.
    Основные замечания:
    Не используйте FormActivate событие, тем более на мобильной платформе. Его обработка замораживает приложение. В примере посмотрите вариант обхода. TIniFile нет смысла использовать каждый раз для считывания настроек. 1 раз считали при старте приложения и больше к файлу не обращаемся. Хранить настройки в компонентах (edSettingHost.Text и т.п.). Создание свойства отнимет максимум минуту, а выгоду даст существенную. TCP сокет соединения следуют принимать как асинхронные, а не как запрос-ответ. Это предусматривает получение команды сервером, какое-то выполнение и лишь потом отправка на клиент. Поэтому попробуйте отказаться от использования GetFromServer. Сервер только запускал для проверки клиента, пару раз ловил outofmemory и access violation, закрыться тоже не захотел по-хорошему. Поэтому желательно его тоже довести до ума.
  24. Like
    Ingalime отреагировална krapotkin в Запуск приложения из текущего   
    procedure RunProgram(cmdStr:string; Wait:Boolean; ShowWindow:Word); var si:TStartupInfo; pi:TProcessInformation; s:string; begin FillChar(si, SizeOf(si), 0); si.cb := SizeOf(si); si.dwFlags:=STARTF_USESHOWWINDOW; si.wShowWindow := ShowWindow; s:=cmdStr; UniqueString(s); getlasterror; if not CreateProcess(nil, PChar(S), NIL, NIL, False, 0, NIL, NIL, si, pi) then showMessageFmt('Ошибка %d. %s',[getlasterror,SysErrorMessage(getlasterror)]); if wait then WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); end;  
  25. Like
    Ingalime отреагировална POV в IdTCPClient-IdTCPServer управление соединением   
    И всё же таймер должен идти лесом. Отчего не сделать поток?
    procedure TMyThread.Execute; begin   while not Terminated do begin     try       if (not IdTCPClient1.Connected) then begin         IdTCPClient1.Connect;       end;     except       Sleep(500);       continue;     end; // а тут если коннект есть уже выгребаем что и как надо ... А запросы серверу из главного потока. Функции запроса можно также в классе потока реализовать для нахождения этого тисипишного функционала в одном месте
      TMyThread = class(TThread)   private   protected     procedure Execute; override;   public     IdTCPClient1: TIdTCPClient;     function SendPacket(ip: String): Boolean;  // это вызываем из главного потока если надо на сервер что-то послать     constructor Create(host: String; port: Integer; toconnect: Integer; toread: Integer);     destructor Destory;   end;  
×
×
  • Создать...