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

Brovin Yaroslav

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

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

  • Посещение

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

    390

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

  1. Like
    Brovin Yaroslav получил реакцию от Andrey Efimov в Приведение типа - as   
    Если посмотреть, что вызывается под капотом для случая с интерфейсами, то можно увидеть:
    1. Для вызова Interface1(Instance), вызывает системный метод _IntfCopy, который по сути не проверяет типы, а просто увеличивает счетчик типов. Такое приведение типов не проверяет типы, а просто копирует указатель а реализацию.
    procedure _IntfCopy(var Dest: IInterface; const Source: IInterface); {$IFDEF PUREPASCAL} var P: Pointer; begin P := Pointer(Dest); if Source <> nil then Source._AddRef; Pointer(Dest) := Pointer(Source); if P <> nil then IInterface(P)._Release; end; {$ELSE} 2. При использовании оператора as будет вызван _IntfCast, который выполняет честное приведение типов через QueryInterface. Поэтому в этом случае вы получите на выходе честный указатель на таблицу интерфейса, если интерфейс поддерживается объектом.
    procedure _IntfCast(var Dest: IInterface; const Source: IInterface; const IID: TGUID); {$IF defined(PUREPASCAL) or defined(PIC)} // PIC: EBX must be correct before calling QueryInterface var Temp: Pointer; begin if Source = nil then Dest := nil else begin Temp := nil; if Source.QueryInterface(IID, IInterface(Temp)) <> 0 then ErrorAt(byte(reIntfCastError), ReturnAddress) else begin if Assigned(Dest) then Dest._Release; Pointer(Dest) := Temp; end; end; end;  
  2. Like
    Brovin Yaroslav получил реакцию от Равиль Зарипов (ZuBy) в Приведение типа - as   
    Если посмотреть, что вызывается под капотом для случая с интерфейсами, то можно увидеть:
    1. Для вызова Interface1(Instance), вызывает системный метод _IntfCopy, который по сути не проверяет типы, а просто увеличивает счетчик типов. Такое приведение типов не проверяет типы, а просто копирует указатель а реализацию.
    procedure _IntfCopy(var Dest: IInterface; const Source: IInterface); {$IFDEF PUREPASCAL} var P: Pointer; begin P := Pointer(Dest); if Source <> nil then Source._AddRef; Pointer(Dest) := Pointer(Source); if P <> nil then IInterface(P)._Release; end; {$ELSE} 2. При использовании оператора as будет вызван _IntfCast, который выполняет честное приведение типов через QueryInterface. Поэтому в этом случае вы получите на выходе честный указатель на таблицу интерфейса, если интерфейс поддерживается объектом.
    procedure _IntfCast(var Dest: IInterface; const Source: IInterface; const IID: TGUID); {$IF defined(PUREPASCAL) or defined(PIC)} // PIC: EBX must be correct before calling QueryInterface var Temp: Pointer; begin if Source = nil then Dest := nil else begin Temp := nil; if Source.QueryInterface(IID, IInterface(Temp)) <> 0 then ErrorAt(byte(reIntfCastError), ReturnAddress) else begin if Assigned(Dest) then Dest._Release; Pointer(Dest) := Temp; end; end; end;  
  3. Like
    Brovin Yaroslav отреагировална kami в VersionCode   
    (с) не помню чье:
     
    var FProgramVersion: string; function GetProgramVersion: string; var {$IFDEF ANDROID} PackageManager: JPackageManager; PackageInfo: JPackageInfo; {$ENDIF} {$IFDEF IOS} s: MarshaledAString; {$ENDIF} {$IFDEF MSWINDOWS} Exe: string; Size, Handle: DWORD; Buffer: TBytes; FixedPtr: PVSFixedFileInfo; {$ENDIF} begin if FProgramVersion <> '' then begin Result := FProgramVersion; exit; end; {$IFDEF ANDROID} PackageManager := TAndroidHelper.Context.getPackageManager; PackageInfo := PackageManager.getPackageInfo(TAndroidHelper.Context.getPackageName, 0); Result := JStringToString(PackageInfo.versionName); {$ENDIF} {$IFDEF IOS} s := TNSString.Wrap(CFBundleGetValueForInfoDictionaryKey(CFBundleGetMainBundle, kCFBundleVersionKey)).UTF8String; Result := string(s); {$ENDIF} {$IFDEF MSWINDOWS} Exe := ParamStr(0); Size := GetFileVersionInfoSize(PChar(Exe), Handle); if Size = 0 then begin Result := 'Unknown'; exit; end; SetLength(Buffer, Size); if not GetFileVersionInfo(PChar(Exe), Handle, Size, Buffer) then begin Result := 'Unknown'; exit; end; if not VerQueryValue(Buffer, '\', Pointer(FixedPtr), Size) then begin Result := 'Unknown'; exit; end; Result := Format('%d.%d.%d.%d', [LongRec(FixedPtr.dwFileVersionMS).Hi, // major LongRec(FixedPtr.dwFileVersionMS).Lo, // minor LongRec(FixedPtr.dwFileVersionLS).Hi, // release LongRec(FixedPtr.dwFileVersionLS).Lo]); // build {$ENDIF} FProgramVersion := Result; end;  
  4. Like
    Brovin Yaroslav отреагировална x11 в Служба + перехват номера   
    На основе нескольких тем форума сделал службу перехвата звонков и номера телефона.
    http://fire-monkey.ru/topic/3878-статьякак-создать-простой-android-broadcast-receiver-how-to-implement-simplest-android-broadcast-receiver-in-delphi/
    http://fire-monkey.ru/topic/2386-перехват-события-звонка/
    http://fire-monkey.ru/topic/2972-использование-нативных-localbroadcastmanager-и-broadcastreceiver/
    Покритикуйте пожалуйста. Уверен, что не всё правильно.
    Но что до ума не удалось довести, так это то, как правильно останавливать службу и закрывать приложение.
    Проект (для Токио) приложил теме.
    Заранее благодарен.
     
    BR2.rar
  5. Like
    Brovin Yaroslav получил реакцию от x11 в Перехват события звонка   
    Посмотрите уже готовый сервис IFMXPhoneDialerService, он умеет слушать сеть: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Mobile_Tutorial:_Using_the_Phone_Dialer_on_Mobile_Devices_(iOS_and_Android)
  6. Like
    Brovin Yaroslav отреагировална dnekrasov в Создание контролов клонированием стиля   
    По-моему вообще некорректно. Внешне-то будет выглядеть как надо, а вот логики работы не будет вообще. Ведь стиль - это только описание того, как контрол должен выглядеть, а не как работать.
    Кстати, копию стиля легче получить так
    MainControl := FindStyleResource('ScreenFogStyle', True);  
  7. Like
    Brovin Yaroslav отреагировална Andy в Маршалинг/ДеМаршалинг в System.JSON   
    Можно и без сеттеров и геттеров и тоже будет работать:
    TTelegaUser = Class FID: Integer; FFirst_Name: String; FLast_Name: String; FUsername: String; End;  
  8. Like
    Brovin Yaroslav отреагировална Виталий Иванов в Маршалинг/ДеМаршалинг в System.JSON   
    Для Syste,.JSON необходимо использовать атрибуты по типу которые расположены в REST.Json.Types
    [JSONNameAttribute('НАЗВАНИЕ')] -Так ваша переменная назвается в JSON 
    [JSONMarshalledAttribute(False)] - Так блокируется выгрузка (нащет загрузки не уверен) тоесть при TJsonObject(oJSON).ToString переменной с таким атрибутом не будет
    TItems = class
      private
        [JSONNameAttribute('ERROR')]
        FERROR: String;
        [JSONNameAttribute('RESULT')]
        FRESULT: String;
        [JSONMarshalledAttribute(False)]
        FOwner : TItems;
      public
        property ERROR  : String read FERROR  write FERROR;
        property RESULT : String read FRESULT write FRESULT;
        property Owner  : TItems read FOwner  write FOwner;
      end;
      
     -------------Результат TJsonObject().ToString---------------------
     {"ERROR": "", "RESULT": ""}
     
     ==================================================================
     
     TItems = class
      private
        FERROR: String;
        FRESULT: String;
        FOwner : TItems;
      public
        property ERROR  : String read FERROR  write FERROR;
        property RESULT : String read FRESULT write FRESULT;
        property Owner  : TItems read FOwner  write FOwner;
      end;
      
     -------------Результат TJsonObject().ToString---------------------
     {"eRROR": "", "rESULT": "", "owner": ""} 
    Если честно то не знаю почему так все используют XSuperObject, встроенного инструмента "System.JSON, REST.Json, REST.Json.Types" с головой хватает на всё 
  9. Like
    Brovin Yaroslav получил реакцию от ice donkey в ListView - фиксированный заголовок   
    Раньше точно делали прилипание хедера в ЛистВью. К сожалению сейчас точно не могу сказать ничего на этот счет. Но точно было сделано. Но, как вариант, если речь идет об ios, то в TListView есть поддержка нативной реализации. И там реализованы выталкивающие хедеры
    http://docwiki.embarcadero.com/Libraries/Tokyo/en/FMX.ListView.TListViewBase.NativeOptions
  10. Like
    Brovin Yaroslav отреагировална krapotkin в [THttpClient] Как работать с Cookie в HTTPClient?   
    кстати
     
  11. Like
    Brovin Yaroslav отреагировална krapotkin в [THttpClient] Как работать с Cookie в HTTPClient?   
    http://docwiki.embarcadero.com/Libraries/Tokyo/en/System.Net.HttpClient.TCookieManager_Methods
    тут только один метод что-то делает с куками, так что думаю, он и подойдет
  12. Like
    Brovin Yaroslav отреагировална krapotkin в [THTTPClient] Как скачать файл с System.Net.HttpClient?   
    var resp:IHttpResponse;
    resp := h.get(...)
    там в resp все что нужно
  13. Like
    Brovin Yaroslav отреагировална krapotkin в [THTTPClient] Как скачать файл с System.Net.HttpClient?   
    а что подсказать-то? где код для ревью?
    h:=THttpClient.Create;
    resultStream:=TFileStream.Create(....);
    h.get(URL, resultStream);
    h.free;
    resultStream.free;
  14. Like
    Brovin Yaroslav отреагировална sinuke в Не получается запустить эмулятор   
    и еще. на x86 образах (а они реально работают шустро) fmx-приложения не запускаются
    все равно придется создавать виртуальное устройство на arm-образе
  15. Like
    Brovin Yaroslav отреагировална Alex7wrt в Не получается запустить эмулятор   
    Чтобы не было красного крестика, нужно не только создать эмулятор в AVD менеджере, но и запустить его там же. В итоге на экране увидите окно, в котором запускается интерфейс Android. Когда он запустится, и появится рабочий стол Android, можно запускать установку приложения на эмулятор.
    Только учтите, что на относительно слабых системах эмулятор может запускаться довольно долго. Ну и Вообще для проверки работоспособности (работает/ не работает) легче воспользоваться установкой на реальный девайс. 
  16. Like
    Brovin Yaroslav отреагировална dnekrasov в Искажения текста на Canvas под Windows XP   
    Попробуйте в файле проекта добавить GlobalUseGDIPlusClearType := False
  17. Like
    Brovin Yaroslav отреагировална Вадим Смоленский в Искажения текста на Canvas под Windows XP   
    Помогло! Даже под XP теперь всё красиво.
    Собственно, проблему я сам на себя навлек, когда по чьему-то совету вставил в файл проекта  GlobalUseGDIPlusClearType := True для повышения быстродействия. Причем, нельзя сказать, чтобы быстродействие после этого ощутимо повысилось. Наверняка этот параметр принимает False по умолчанию, но пусть на всякий случай присвоение останется.
    Спасибо!
  18. Like
    Brovin Yaroslav отреагировална Олег Киреев в Приложение 3D примера работы некоторых механизмов v.1.0. Для OS Win.   
    Приложение для наглядного обучения работы некоторых механизмов автомобиля и автобуса.
    Работает в OS Windows. Есть возможность записи процесса в формате
    AVI. Можно изменять прозрачность и посмотреть что внутри.
    СпасиБО EMBARCADERO!
    Автор: Олег Киреев - ведущий инженер-конструктор.
                 kireevoleg@gmail.by  тел. +375 29 676 13 84. 
                 Республика Беларусь г.Минск.
    3D Работа механизмов.rar




  19. Like
    Brovin Yaroslav отреагировална x11 в XML   
    я понял, нужно начинать отсюда
    http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_TXMLDocument
  20. Like
    Brovin Yaroslav отреагировална x11 в XML   
    здесь есть примеры
    http://docwiki.embarcadero.com/CodeExamples/Berlin/en/Code_Examples_by_Functionality#Xml.XMLDoc
  21. Like
    Brovin Yaroslav отреагировална Виталий Иванов в Полноэкранный режим редактора   
    Извините совсем забыл, так же у меня строит вот такое дополнение DDevExtensions к IDE в нем как раз и настраиваться такое поведение, так же есть и super-zoom - который оставляет только поле редакторов как на сткриншоте ниже. 

  22. Like
    Brovin Yaroslav отреагировална krapotkin в fgActivityDialog   
    В любом случае, вам придется вносить изменения в программу, т.к. 10.2 имеет новый подход к потокам в приложении.
    Вы можете либо изменить свой код, либо код fgActivityDialog.
    В вашем случае можно попробовать так: 
    fgActivityDialog1.Message: = 'Проверка подключения к Интернету.';
       fgActivityDialog1.Show;
    TTask.Run(procedure
    var result :string;
    begin
         try
           CM.DSRestConnection1.Host: = 'my.server.com'; // Пример
           CM.DSRestConnection1.TestConnection ();
           Result: = 'S';
         except
           Result: = 'N';
         End;
       tthread.synchronize(NIL, procedure begin F_Result := result; fgActivityDialog1.hide; end);
    end);
    F_Result  - это поле формы
  23. Like
    Brovin Yaroslav отреагировална Евгений Корепов в fgActivityDialog   
    В Токио изменена логика работы приложения на Андроид - пользовательский интерфейс выполняется в основном потоке приложения, возможно проблема из за этого. Вот похожая тема 
     
  24. Thanks
    Brovin Yaroslav получил реакцию от x11 в OXml - библиотека для работы с XML   
    Она встроена в существующий TXMLDocument.
  25. Like
    Brovin Yaroslav отреагировална x11 в FMXComponents   
    Может, кому пригодится, здесь набор open-sourced  компонент для FMX
    https://github.com/zhaoyipeng/FMXComponents
     
×
×
  • Создать...