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

xenon54

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

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

  • Посещение

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

    14

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

  1. Like
    xenon54 получил реакцию от Ingalime в Как получить IMEI?   
    IOS не позволяет получить IMEI устройства.
  2. Like
    xenon54 получил реакцию от ra.eremeev в Сохранение Tbitmap в формате jpeg   
    uses FMX.Surfaces; //--------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var sp : TBitmapCodecSaveParams; bs : TBitmapSurface; B : TBitmap; begin B := TBitmap.Create; // исходная картинка B.LoadFromFile('...'); sp.Quality := 70; bs := TBitmapSurface.Create; bs.Assign(; TBitmapCodecManager.SaveToFile('FileName', bs, @sp); bs.Free; B.Free; end;
  3. Like
    xenon54 получил реакцию от ENERGY в AdHoc   
    Суть в том, что Ad Hoc приложение и не должно заливаться через application loader. Ad hoc служит для распространение программы минуя app store. Вот статья об этом. Если ты делаешь приложение для AppStore и на данном этапе тебе нужно показать приложение заказчику, то можешь скомпилить для AppStore, и залить через application loader. После этого воспользоваться TestFlight для установки на его устройство. При этом приложению не нужно проходить модерацию и публикацию в магазине. Вот еще.
  4. Like
    xenon54 получил реакцию от Pax Beach в [Android] Как узнать мой IP адрес?   
    uses IdCustomTransparentProxy, IdSocks, IdIPWatch, IdStack, IdTCPConnection, IdTCPClient, IdHTTP; function TForm1.localip : string; var AAddresses: TStrings; begin AAddresses := TStringList.Create; try TIdStack.IncUsage; try GStack.AddLocalAddressesToList(AAddresses); finally TIdStack.DecUsage; end; if AAddresses.Count > 0 then begin if TOSVersion.Platform = pfiOS then Result := AAddresses.Strings[AAddresses.Count-1]; //AAddresses if TOSVersion.Platform = pfWindows then Result := AAddresses.Strings[0]; end; finally AAddresses.Free; end; end; ​В "AAddresses" вы получите все локальные IP. Это будет и IP от wifi и ip от LTE\GPRS и т.д.
  5. Like
    xenon54 получил реакцию от Евгений Корепов в Сортировка TListViewItems   
    Узнал про существование хелперов из твоего поста. Погуглил, оказалась клевая штука, плохо что не знал раньше про них
    В итоге написал следующее:
    TObjectHelper = class helper for TListViewItems public type TItemsList = TList<TListViewItem>; public procedure MyChanged; function MyActiveitems : TItemslist; end; .... implementation procedure TForm1.Button2Click(Sender: TObject); begin ListView1.Items.MyActiveitems.Sort( TComparer<TListViewItem>.Construct( function(const Left, Right: TListViewItem): Integer begin Result := CompareText(Left.text, Right.Text); end)); ListView1.Items.MyChanged; end; { TObjectHelper } function TObjectHelper.MyActiveitems: TItemslist; begin result := self.FActiveItems; end; procedure TObjectHelper.MyChanged; begin self.changed; end; Все замечательно работает
    Спасибо.
  6. Like
    xenon54 получил реакцию от CodeToad в Проблема с обновлением картинки в Item'e   
    Ну, в винде у меня и ваш первоначальный вариант не работал, тоже нужно было скролить чтобы появилась картинка.
  7. Like
    xenon54 получил реакцию от Rusland в TMemo скролится вниз не до конца и отрезает буквы.   
    В общем если кто-то будет искать, то вот такой позорный костыль капельку улучшает ситуацию:
    if ((NewViewportPosition.Y+MemoInheritor.Height)- round(MemoInheritor.GetContentBounds.Height)) = 2 then MemoInheritor.ViewportPosition := TPointF.Create(MemoInheritor.ViewportPosition.X, MemoInheritor.ViewportPosition.Y+2); Этот код в событии "OnViewportPositionChange", MemoInheritor - наследник TMemo.
  8. Like
    xenon54 получил реакцию от Rusland в [FGX] Предложения о разработке компонентов   
    На сколько я знаю, фоновые процессы для андройда и IOS это принципиально разные вещи и реализация их. Я конечно хотел бы чтобы их реализовали, но как это будет выглядеть слабо себе представляю.
    Насчет "свистелок" тут я думаю все просто, Embarcadero решило задавить количеством, а не качеством. Думаю "свистелкам" скоро придет конец, ибо придумывать новые уже непросто.
     
    "В любой непонятной ситуации пиши DisposeOf" - шутка конечно, но теперь я понял что не стоит надеяться на автоматическое разрушение связей внутри объекта, только лишь удалив все внешние ссылки и воспользовавшись методом Free, я его теперь вообще почти не юзаю. 
    Я не вкурсе откуда такой негатив, но я так понял что в основном он льется от тех кто пишет под андроид. Вскоре я закончу писать свое приложение для IOS'а и приступлю к его же написанию для андройда, быть может там у меня и начнет подгарать, но пока все неплохо.
     
    По теме:
    Я тоже отдал бы свой голос за реализацию фоновых режимов для обеих платформ, только так чтобы было как в сказке "из коробки" достал и пользуйся.
  9. Like
    xenon54 получил реакцию от Ra72 в Активная область Item   
    Hittest сделал false?
  10. Like
    xenon54 получил реакцию от zairkz в [XE8][Win][Android] AES-256 Шифрование и LockBox   
    Честно говоря, никогда не разбирался с AES'ом. Я раньше юзал ГОСТ 28147-89. Сам его реализовал на делфях со вставками асемблера, ибо без него скорость шифрования и расшифрования была катастрафически мала(со вставками скорость выросла на 2 или 3 порядка, точно не помню). Результат всегда получался одинаковый при шифровании одного и того же содержимого и одного и того же ключа. Что там в этом AES'е х... фиг его знает.
  11. Like
    xenon54 получил реакцию от zairkz в [TidHTTP] Не срабатывает Timeout   
    Помнится я целый день на гугл потратил в поисках этого...
    А насчет того что быстрей срабатывает чем установлен таймаут, что-то тут не то, я ради интереса засекал сегодня, отрабатывает четко по таймауту.
  12. Like
    xenon54 получил реакцию от Rusland в Push сообщения IOS - как получить токен ?   
    XE8 без апдейтов.
    На какой строке AV?
     
    Provisioning profile должен включать APN.
    uses: System.PushNotification, FMX.PushNotification.iOS
  13. Like
    xenon54 получил реакцию от Brovin Yaroslav в Сохранение Tbitmap в формате jpeg   
    uses FMX.Surfaces; //--------------------------------------- procedure TForm1.Button1Click(Sender: TObject); var sp : TBitmapCodecSaveParams; bs : TBitmapSurface; B : TBitmap; begin B := TBitmap.Create; // исходная картинка B.LoadFromFile('...'); sp.Quality := 70; bs := TBitmapSurface.Create; bs.Assign(; TBitmapCodecManager.SaveToFile('FileName', bs, @sp); bs.Free; B.Free; end;
  14. Like
    xenon54 получил реакцию от Rusland в Выделяется итем, хотя клик идет не по нему   
    Сам спросил, сам ответил...
    В FMX.ListView в функции определения индекса итема по абсолютной координате клика на ListView почему-то заложено такое поведение ( возвращает индекс последнего элемента если клик пришелся на область, вертикальная координата которой больше чем начало последнего итема). Вот так исправляется:
    function TCustomListView.FindItemAbsoluteAt(ViewAt: Integer): Integer; var Left, Right, Pivot, Value: Integer; begin UpdateItemLookups; if Items.Count < 1 then Exit(-1); if ViewAt < 1 then Exit(0); { if ViewAt >= FHeightSums[FHeightSums.Count - 1] then Exit(FHeightSums.Count - 1); } if ViewAt > FHeightSums[FHeightSums.Count - 1] + GetItemHeight( GetItemCount - 1 ) then Exit(- 1);
  15. Like
    xenon54 получил реакцию от Brovin Yaroslav в Выделяется итем, хотя клик идет не по нему   
    Сам спросил, сам ответил...
    В FMX.ListView в функции определения индекса итема по абсолютной координате клика на ListView почему-то заложено такое поведение ( возвращает индекс последнего элемента если клик пришелся на область, вертикальная координата которой больше чем начало последнего итема). Вот так исправляется:
    function TCustomListView.FindItemAbsoluteAt(ViewAt: Integer): Integer; var Left, Right, Pivot, Value: Integer; begin UpdateItemLookups; if Items.Count < 1 then Exit(-1); if ViewAt < 1 then Exit(0); { if ViewAt >= FHeightSums[FHeightSums.Count - 1] then Exit(FHeightSums.Count - 1); } if ViewAt > FHeightSums[FHeightSums.Count - 1] + GetItemHeight( GetItemCount - 1 ) then Exit(- 1);
  16. Like
    xenon54 отреагировална Kitty в Кому нужны программисты Fire Monkey?   
    >Дай бог, допилят до конца,
    А что делать атеистам если он не даст? Размытый родмат, отсутствие полной встроенной справочной системы, перепродажи с не понятными перспективами - мало вселяет уверенности в дальнейшем правильном развитии продукта. У нормального продукта при нажатии F1 надо получать ответ, а не пустоту как в C++ Builder и не выпращивать из-за этого книгу у автора этого форума!
  17. Like
    xenon54 получил реакцию от Евгений Корепов в Смена родительского компонента для аниматора   
    procedure TForm2.MoveRect(Rect: TRectangle); begin TAnimator.AnimateIntWait(Rect, 'Position.Y', 0); TAnimator.AnimateInt(Rect, 'Position.Y', 152); end; Так вас не устроит?
  18. Like
    xenon54 отреагировална Brovin Yaroslav в Семисегментный индикатор   
    Добрый день, Юрий,
     
    Красота. Хороший компонент. Возможно вам пригодятся пара замечаний по портированию с VCL на FMX, которые помогу вам сделать ваш компонент еще лучше.
    Когда вы выполняете отрисовку в перекрытом методе TControl.Paint, не надо вызывать BeginScene и EndScene. Так как этими методами руководит сцена, обычно это форма.
    procedure TSeparator.Draw(px1, py1, px2, py2: Single; pColor: TAlphaColor; Opac: Single); var MyRect: TRectF; begin MyRect := TRectF.Create(px1, py1, px2, py2); with Canvas do begin [b] BeginScene; // <!--- Не нужно[/b] Fill.Kind := TBrushKind.Solid; Fill.Color := pColor; FillRect(MyRect, 0, 0, AllCorners, Opac); [b]EndScene; [/b][b]<!--- Не нужно[/b] end; Canvas end; Дополнительно:
    1. Инициализацию точек для полигона можно сделать сразу на прямую. 
    Было:
    // Установить точки, определяющие многоугольник p1 := TPointF.Create(px1, py1); p2 := TPointF.Create(px2, py2); p3 := TPointF.Create(px3, py3); p4 := TPointF.Create(px4, py4); p5 := TPointF.Create(px5, py5); p6 := TPointF.Create(px6, py6); // Создать полигон SetLength(MyPolygon, 6); MyPolygon[0] := p1; MyPolygon[1] := p2; MyPolygon[2] := p3; MyPolygon[3] := p4; MyPolygon[4] := p5; MyPolygon[5] := p6;  Стало:
    MyPolygon := [TPointF.Create(px1, py1), TPointF.Create(px2, py2), TPointF.Create(px3, py3), TPointF.Create(px4, py4), TPointF.Create(px5, py5), TPointF.Create(px6, py6)]; При этом для динамических массивов перед присваивание не нужно  вызывать функцию SetLength. Экономия места и 6 переменных.
     
    2. Сравнение вещественных чисел должно осуществляться при помощи функции System.Math.SameValue. Это касается всех мест в этом юните. В противном случае у вас могут быть фантомные ложные срабатывания условий, которые найти будет сложно.
    Было:
    procedure TSevSeg.SetCellSpace(const Value: Single); begin if Value = CellSpace then exit; FCellSpace := Value; end; Стало:
    procedure TSevSeg.SetCellSpace(const Value: Single); begin if SameValue(Value, CellSpace) then exit; FCellSpace := Value; end;
  19. Like
    xenon54 получил реакцию от Rusland в Работа сервиса при закрытом приложении   
    Ну тут все просто. Remote Push Notification.
    Вот, хороший видос на эту тему для ведра тынц
    И сервис никакой не нужен.
    Для ведра это называется  "Google Cloud Messaging"
  20. Like
    xenon54 отреагировална Brovin Yaroslav в Обновление информации программы с сайта   
    Мне кажется, проще воспользоваться REST API и получать данные без UI. А дальше уж самому решать, что с ними делать.
    https://wordpress.org/plugins/json-rest-api/
     
    Я понимаю, что парсить страницу - это универсальное решение, но оно работает ровно до первого изменения шаблона дизайна страницы :-)
  21. Like
    xenon54 отреагировална Brovin Yaroslav в [Отклонение] Утечка памяти в компоненте TNotificationCenter   
    Я уже завел этот баг во внутреннем треккере.
  22. Like
    xenon54 получил реакцию от Andrey Efimov в Запустить приложение из сервиса или показать форму   
    Я бы дропнул нахрен сразу такое приложение, которое уничтожает батарейку своим сервисом который каждую секунду бесконечно шлет гет запросы.
  23. Like
    xenon54 отреагировална Andrey Efimov в Приложение для создания файла ресурсов (RC, RES)   
    Появилась необходимость добавить большое количество картинок, но делать это стандартными средствами не очень удобно (почитать можно тут: Где хранить большое количество картинок?).
     
    Собственно, написал маленькую программку для создания файла RC и создания bat – файла, который позволяет генерировать RES файл.
     
    В свободное время буду допиливать.
     
    Как использовать:
    Указываете путь до папки с файлами, которые необходимо добавить в ресурсы. Указываете имя выходного файла, без расширения. Расширение (.rc) уже забито в коде. Выбираете тип ресурсов. Ставите необходимые галочки. Жмёте "Создать" Итоговые файлы будут лежать рядом с exe-файлом приложения.
     
    Обращаться к ресурсам можно по оригинальным именам или автоматически сгенерованным.
    Пример (оригинальные имена):
    Имя файла "FruitsVegetables_1.png". В готовом файле будет так: FruitsVegetables_1 ТИП ПУТЬ\FruitsVegetables_1.png Надеюсь, кому-нибудь пригодится.
     
    Версия 1.4:

     
      Скачать с Google Drive (версия 1.4). Новую версию можно скачать ниже, в последнем сообщении.
  24. Like
    xenon54 получил реакцию от zairkz в Push сообщения IOS - как получить токен ?   
    XE8 без апдейтов.
    На какой строке AV?
     
    Provisioning profile должен включать APN.
    uses: System.PushNotification, FMX.PushNotification.iOS
  25. Like
    xenon54 получил реакцию от Kitty в Push сообщения IOS - как получить токен ?   
    XE8 без апдейтов.
    На какой строке AV?
     
    Provisioning profile должен включать APN.
    uses: System.PushNotification, FMX.PushNotification.iOS
×
×
  • Создать...