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

AlexShaman

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

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

  • Посещение

Сообщения, опубликованные AlexShaman

  1. 4 часа назад, Major сказал:

    или лучше:

    
    for K := Layout1.ChildrenCount - 1 downto 0 do
    if Layout1.Children[K].ClassNameIs('TCircle') then
      begin
      (Layout1.Children[K] as TCircle).DisposeOf;
      (Layout1.Children[K] as TCircle) := nil;
    end;

    или так:

    
    for K := Layout1.ChildrenCount - 1 downto 0 do
    begin
      if Layout1.Children[K].ClassNameIs('TCircle') then
      begin
        (Layout1.Children[K] as TCircle).Parent := nil;
        (Layout1.Children[K] as TCircle).Free;
        (Layout1.Children[K] as TCircle) := nil;
      end;
    end;

     

        Layout1.DeleteChildren;
        Layout1.Repaint;

  2. 6 часов назад, AlexG сказал:

    Ну первое что в голову приходит - а какой формат вы грузите? Догадываюсь что "bmp", но я про его формат (бит/цвет, сжатие и т.д.).

    Создаю файл в Paint (для теста), сохраняю в bmp 32bit 1680x373

    tmpIcon.PixelFormat := vcl.Graphics.TPixelFormat.pf32bit;

    tmpIcon.Width := 1680;

    tmpIcon.Height:= 373;

    Какие еще надо установить значения до

    tmpIcon.LoadFromStream(tmpStream); ?

  3. Теперь не могу сохранить фото, т.е. оно вроде бы сохраняется, файл в папке появляется, но при открытии через стандарный(и не стандартный) Viewer ничего не открывается... "элемент не найден"..

    Если из программы попытаться открыть-вылетает

     

    procedure TfMain.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap);
    var sPath:string;
      Image2: TBitmap;
      SaveParams: TBitmapCodecSaveParams;
    begin
        Image2 := TBitmap.Create;
        sPath := TPath.Combine(TPath.GetSharedCameraPath, '1.jpg');
        TThread.Synchronize(nil,
        procedure
        begin
            Image2.Assign(Image);
            SaveParams.Quality := 100;
            Image2.SaveToFile(sPath, @SaveParams);
            Image2.Free;
        end
        );
        //AddPhoto(1,sPath, lDialogsActive);
        //AddImage(1,sPath, lDialogsActive);
    end; 

     

  4. procedure TfMain.PhotoClick(Sender: TObject);
    var sPath,FLastPhotoName:string;
      {$IF DEFINED(ANDROID)}
      PhotoIntent: JIntent;
      photoUri: Jnet_Uri;
      JFileName: JFile;
      {$ENDIF}
    begin
      {$IF DEFINED(ANDROID)}
      FLastPhotoName := '';
      FLastPhotoFullName := '';
    
      FMessageSubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);
      PhotoIntent := TJIntent.JavaClass.init(TJMediaStore.JavaClass.ACTION_IMAGE_CAPTURE);
      if (PhotoIntent.resolveActivity(TAndroidHelper.Context.getPackageManager()) <> nil) then
      begin
        FLastPhotoName := THashMD5.GetHashString('JPEG PHOTO FILE ' + DateTimeToStr(Now)) + '.jpg';
        FLastPhotoFullName := TPath.Combine(TPath.GetSharedDocumentsPath, FLastPhotoName);
        JFileName := TJFile.JavaClass.init(StringToJString(FLastPhotoFullName));
        photoUri := TJnet_Uri.JavaClass.fromFile(JFileName);
        PhotoIntent.putExtra(TJMediaStore.JavaClass.EXTRA_OUTPUT,
            TJParcelable.Wrap((photoUri as ILocalObject).GetObjectID));
    
        if PhotoIntent.resolveActivity(TAndroidHelper.Activity.getPackageManager) <> nil then
          TAndroidHelper.Activity.startActivityForResult(PhotoIntent, REQUEST_IMAGE_CAPTURE);
    
      end;
      {$ENDIF}

     

    Приложение камеры открывается, фото делается, но при закрытии приложение вылетает

    В логах ошибки

    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.embarcadero.test/com.embarcadero.firemonkey.FMXNativeActivity}: java.lang.NullPointerException

     

  5. Нашел готовое решение, переделал немного (Berlin).

    Используя это решение можно получать символы от вирт клавиатуры.

    Регистрация клавиатуры SetMyVirtualKeyboard(const AControl: TFmxObject), где AControl - компонент обрабатывающий события OnKeyUp

    procedure SetMyVirtualKeyboard(const AControl: TFmxObject);
    begin
      {$IFDEF ANDROID}
      if FNativeVKService <> nil then Exit;
      if not Assigned(FMyVirtualKeyboardAndroid) then
      begin
          FMyVirtualKeyboardAndroid := TVirtualKeyboardAndroidEx.Create;
          FMyVirtualKeyboardAndroid.OnKeyUp := TForm(AControl).OnKeyUp;
      end;
      FNativeVKService := IFMXVirtualKeyboardService(TPlatformServices.Current.GetPlatformService(IFMXVirtualKeyboardService));
      if FNativeVKService <> nil then
      begin
        TPlatformServices.Current.RemovePlatformService(IFMXVirtualKeyboardService);
      end;
      TPlatformServices.Current.AddPlatformService(IFMXVirtualKeyboardService, FMyVirtualKeyboardAndroid);
      {$ENDIF}
    end;

    Вызов клавиатуры стандартно

        TPlatformServices.Current.SupportsPlatformService(
              IFMXVirtualKeyboardService,
              IInterface(aVirtualKeyboardService));
        if (aVirtualKeyboardService <> nil) then
            aVirtualKeyboardService.ShowVirtualKeyboard(fMain);

    Скрытие, тоже стандартно

        if (key=13) then
        begin //если нажата клавиша enter
            if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(aVirtualKeyboardService)) then
                aVirtualKeyboardService.HideVirtualKeyboard;
        end;

     

     

     

    MyFMX.VirtualKeyboard.Android.rar

  6. У меня виртуальная клавиатура передает в программу только Enter(13) и Backspace(08)

    Открываю так

    TPlatformServices.Current.SupportsPlatformService(
              IFMXVirtualKeyboardService,
              IInterface(aVirtualKeyboardService));
        if (aVirtualKeyboardService <> nil) then
            aVirtualKeyboardService.ShowVirtualKeyboard(fMain);

    Обработчик нажатий кнопок

    procedure TfMain.FormKeyDown(Sender: TObject; var Key: Word; var KeyChar: Char;
      Shift: TShiftState);
    var i:integer;
        s:string;
       aVirtualKeyboardService: IFMXVirtualKeyboardService;
    begin
        //tCursor.Visible := false;
        if Key=27 then
        begin
            sInputBox := '';
            iCurrentPos := 1;
        end;
        if Key=37 then
        begin
            if iCurrentPos > 0 then
                iCurrentPos := iCurrentPos-1;
        end;
    end;

    Почему не срабатывает события при вводе текста?

    Berlin+ android , под win работает как надо.

  7. Мне нужно чтоб UDPServer и UDPClient работали одновременно на одном порту и IP в одном приложении.

    Реализую технологию UDP Hole Punching для peer-to-peer соединения (Peer-to-Peer Communication Across Network Address Translators)

    Код уже написан и оттестирован под Win32, все работает как надо, но на Android почему-то не хочет.

    Если клиент и сервер на одном порту, то сервер ничего не получает, ReuseSocket= true


     

     uClient := TIdUDPClient.Create( nil );
        uClient.ReuseSocket := TIdReuseSocket.rsTrue;
        uClient.OnConnected := ClientConnected;
    
        uClient.Host := '192.168.0.100';
        uClient.Port := 5551;
        uClient.BoundIP := '';
        uClient.BoundPort := 5551;
        uClient.Active := true;
        uClient.Connect;
    
    procedure TPeerToPeerClient.ClientConnected(Sender: TObject);
    begin
        bConToMainServer := true;
        sPrivateMyIP := uClient.Binding.IP;
        iPrivateMyPort  := uClient.Binding.Port;
        StartServer();
    end;
    
    Код сервера
    
        uServer := TIdUDPServer.Create( nil );
        uServer.ReuseSocket := TIdReuseSocket.rsTrue;
        uServer.OnUDPRead := ServerRead;   
    
        uServer.Active := false;
        uServer.Bindings.Clear;
        uServer.Bindings.Add;
        uServer.Bindings.Items[0].IP := sPrivateMyIP;
        uServer.Bindings.Items[0].Port := iPrivateMyPort;
        uServer.DefaultPort := iPrivateMyPort;
        uServer.IPVersion := Id_IPv4;
        uServer.ReuseSocket := TIdReuseSocket.rsTrue;
        uServer.ThreadedEvent := false;
        uServer.BroadcastEnabled := false;
        uServer.Active := true;
    
    procedure TPeerToPeerClient.ServerRead(AThread: TIdUDPListenerThread;
      const AData: TIdBytes; ABinding: TIdSocketHandle);
    var sCommand,sCl,sMessageText:string;
        i:integer;
        sync: TMySync;
    begin
        sCommand := '';
        try
          i := 0;
          while (AData <> 0) do
          begin
            sCommand := sCommand + chr(AData);
            i := i + 1;
          end;
        finally
            ShowMessage(sCommand);
        end;
    
    end;

     

  8. База mssql 2008 r2

    Если кинуть на форму компонент tUniTable (или tUniQuery ) и настроить их на таблицу в которой хоть одно поле integer или float

    Ошибка bus error.

    Только под Андроид.

    В Delphi xe 8 работает без проблем.

    У кого-то есть такая же проблема ?

  9. Такая же ошибка и у меня.

    Вот тут есть решение, вроде бы, http://stackoverflow.com/questions/25698585/bluetooth-connection-failed-java-io-ioexception-read-failed-socket-might-clos

    Помогите переделать код на Delphi

    ry {
    
                    bluetoothSocket.connect();
                    success = true;
                    break;
                } catch (IOException e) {
                    //try the fallback
                    try {
                        Class<?> clazz = tmp.getRemoteDevice().getClass();
                        Class<?>[] paramTypes = new Class<?>[] {Integer.TYPE};
                        Method m = clazz.getMethod("createRfcommSocket", paramTypes);
                        Object[] params = new Object[] {Integer.valueOf(1)};
                        bluetoothSocket  = (BluetoothSocket) m.invoke(tmp.getRemoteDevice(), params);
                        Thread.sleep(500);
                        bluetoothSocket.connect();
                        success = true;
                        break;
  10. Lenovo k900 atom android 4.2.1

    С начала приложение не запускалось, "Application does nit support..."

    Убрал lib-native.so для x86 - сообщение об ошибке ушло, но при запуске зависает на заставке.

    Можно ли как-то запускать приложения на этом телефоне? 

    Как узнать если ли в этом телефоне поддержка эмулятора intel houdini ?

     

  11. Есть приложение (xe8, android) в котором я распечатываю чеки через блютуз принтер (JP-5802LYA).

    Отправка данных на принтер идет через SocketConnection, используя ESC-команды принтера. Все работает как надо.

    Проблема в том, что код получается "Заточенный" под конкретно эту модель принтера. А программа обрастает пользователями, у которые хотят использовать другие принтеры.

    Есть ли какие-то компоненты, типа FastReport, которые могут с этим справится, или надо писать код под все модели принтеров?

     

  12. Поддерживает ли MapView в Delphi 10 работу в windows среде?

    У компонента в списке поддерживаемых платформ указано, что поддерживает. 

    Чем отличается работа с MapView в Android и Windows?

  13. Delphi xe8.  Если в программе возникает какая-то ошибка, то приложение сразу закрывается без отображения сообщения об ошибке.

    Вылетает только на Android 6, на других версия работает как надо. Из-за этого долго приходится выяснять где проблема.

×
×
  • Создать...