IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

Problème de dialogue bluetoothLE Low Energy en Delphi sur Windows et MacOS mais Ok sur Android [Windows]


Sujet :

Composants FMX Delphi

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut Problème de dialogue bluetoothLE Low Energy en Delphi sur Windows et MacOS mais Ok sur Android
    Bonjour

    Je viens de nouveau vous demander de l'aide si vous avez des informations

    Pour commencer je ne connais rien en bluetooth et encore moins la version low énergie

    J’ai voulu faire mon curieux pour changer et du coup faire une communication bluetooth avec une carte électronique de trie

    J’ai donc essayé de me connecter à cette carte par bluetooth donc l’application que j’ai fait marche très bien sur Android (je suis en mod test) par contres cela ne marche pas sur Windows et je me suis dit que peut-être cela vient de la clé USB bluetooth que je utilise pour me connecter donc j’ai voulu prendre le code source et de le compiler pour MacOs après grand discussion avec mon frère pour qu’il accepte de me prêter sont MacBook pro j’ai réussi à faire le test et cela ne marche pas non plus

    donc pour commencer voila le code je rappelle que je suis en mod test donc très mal écrie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
     
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes,
      System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base,
      FMX.StdCtrls, FMX.ListView, FMX.Controls.Presentation, FMX.MultiView,
      FMX.Layouts, FMX.ListBox, Data.Bind.GenData, System.Rtti,
      System.Bindings.Outputs, FMX.Bind.Editors, Data.Bind.EngExt,
      FMX.Bind.DBEngExt, Data.Bind.Components, Data.Bind.ObjectScope,
      FMX.Bind.GenData, FMX.Edit, Math, FMX.Colors, System.Bluetooth,
      System.Bluetooth.Components, System.Permissions;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        ListView1: TListView;
        BluetoothLE1: TBluetoothLE;
        Timer1: TTimer;
        ProgressBar1: TProgressBar;
        Button2: TButton;
        Button3: TButton;
        procedure Button1Click(Sender: TObject);
        procedure ListView1ButtonClick(const Sender: TObject;
          const AItem: TListItem; const AObject: TListItemSimpleControl);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure BluetoothLE1EndDiscoverDevices(const Sender: TObject;
          const ADeviceList: TBluetoothLEDeviceList);
        procedure BluetoothLE1DiscoverLEDevice(const Sender: TObject;
          const ADevice: TBluetoothLEDevice; Rssi: Integer;
          const ScanResponse: TScanResponse);
        procedure FormShow(Sender: TObject);
        procedure BluetoothLE1ServicesDiscovered(const Sender: TObject;
          const AServiceList: TBluetoothGattServiceList);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        Scanning: Boolean;
        ScanningStart: Cardinal;
        FLocationPermission: string;
        procedure RequestPermissionsResult(Sender: TObject;
          const APermissions: TArray<string>;
          const AGrantResults: TArray<TPermissionStatus>);
        procedure DisplayRationale(Sender: TObject;
          const APermissions: TArray<string>; const APostRationaleProc: TProc);
        procedure StartBLEDiscovery;
        procedure StopBLEDiscovery;
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    type
      // Declare a customer record
      Tmybox = record
        Company: string;
        Serial: string;
        Serial_Bin: string;
        Firm: string;
        Hard: string;
        Box_type: string;
        Remplissage: string;
        Batterie: string;
        Etat: string;
      end;
     
    const
      ScanningTime = 10000; // 10s in msecs
     
    var
     
      Form1: TForm1;
      Box: Tmybox;
      buf_bin: string;
      buf: string;
      TDNB: string;
     
      FMyDevice: TBluetoothLEDevice;
      Ftest, Ftest2, Ftest3, Ftest4, Ftest5, Ftest6,
        Ftest7: TBluetoothGattCharacteristic;
      FService: TBluetoothGattService;
      myServiceList: TBluetoothGattServiceList;
      born: Integer;
     
    function HexToBin(HexStr: string): string;
    function BinToInt(AValue: string): Integer;
     
    const
    //HRSERVICE: TBluetoothUUID = '{0000180D-0000-1000-8000-00805F9B34FB}';
      CHARACTERISTIC_ID: TGUID = '{9f1485f3-43ed-11e4-916c-0800200c9a66}';
      // pour ce connecter
     
    implementation
     
    uses
    {$IFDEF ANDROID}
      Androidapi.Helpers,
      Androidapi.JNI.JavaTypes,
      Androidapi.JNI.Os,
    {$ENDIF}
      FMX.DialogService;
    {$R *.fmx}
    {$R *.GGlass.fmx ANDROID}
    // {$R *.Surface.fmx MSWINDOWS}
     
    procedure TForm1.DisplayRationale(Sender: TObject;
      const APermissions: TArray<string>; const APostRationaleProc: TProc);
    begin
      TDialogService.showmessage
        ('We need to be given permission to discover BLE devices',
        procedure(const AResult: TModalResult)
        begin
          APostRationaleProc;
        end)
    end;
     
    procedure TForm1.RequestPermissionsResult(Sender: TObject;
    const APermissions: TArray<string>;
    const AGrantResults: TArray<TPermissionStatus>);
    begin
      // 1 permissions involved: ACCESS_COARSE_LOCATION
      if (length(AGrantResults) = 1) and
        (AGrantResults[0] = TPermissionStatus.Granted) then
        StartBLEDiscovery
      else
        TDialogService.showmessage
          ('Cannot start BLE scan as the permission has not been granted');
    end;
     
    procedure TForm1.StartBLEDiscovery;
    begin
      if not Scanning then
      begin
        // ListBox1.Clear;
        ScanningStart := TThread.GetTickCount;
        BluetoothLE1.DiscoverDevices(ScanningTime);
        ProgressBar1.Value := 0;
        Timer1.Enabled := True;
        Scanning := True;
      end;
    end;
     
    procedure TForm1.StopBLEDiscovery;
    begin
      Timer1.Enabled := False;
      Scanning := False;
      BluetoothLE1.CancelDiscovery;
    end;
     
    function ByteToHex(InByte: byte): string;
    const
      Digits: array [0 .. 15] of char = '0123456789ABCDEF';
    begin
      result := Digits[InByte shr 4] + Digits[InByte and $0F];
    end;
     
    function HexToBin(HexStr: string): string;
    const
      BinArray: array [0 .. 15, 0 .. 1] of string = (('0000', '0'), ('0001', '1'),
        ('0010', '2'), ('0011', '3'), ('0100', '4'), ('0101', '5'), ('0110', '6'),
        ('0111', '7'), ('1000', '8'), ('1001', '9'), ('1010', 'A'), ('1011', 'B'),
        ('1100', 'C'), ('1101', 'D'), ('1110', 'E'), ('1111', 'F'));
      HexAlpha: set of char = ['0' .. '9', 'A' .. 'F'];
    var
      i, j: Integer;
    begin
      result := '';
      HexStr := AnsiUpperCase(HexStr);
      for i := 0 to length(HexStr) do
        if HexStr[i] in HexAlpha then
        begin
          for j := 1 to 16 do
            if HexStr[i] = BinArray[j - 1, 1] then
              result := result + BinArray[j - 1, 0];
        end
        else if HexStr[i] <> '' then
        begin
          result := '';
          showmessage('This is not hexadecimal number');
          Break;
        end;
      if result <> '' then
        while (result[1] = '0') and (length(result) > 1) do
          Delete(result, 1, 1);
    end;
     
    function BinToHex(BinStr: string): string;
    const
      BinArray: array [0 .. 15, 0 .. 1] of string = (('0000', '0'), ('0001', '1'),
        ('0010', '2'), ('0011', '3'), ('0100', '4'), ('0101', '5'), ('0110', '6'),
        ('0111', '7'), ('1000', '8'), ('1001', '9'), ('1010', 'A'), ('1011', 'B'),
        ('1100', 'C'), ('1101', 'D'), ('1110', 'E'), ('1111', 'F'));
    var
      Error: Boolean;
      j: Integer;
      BinPart: string;
    begin
      result := '';
     
      Error := False;
      for j := 1 to length(BinStr) do
        if (BinStr[j]) <> '' then
          if not(BinStr[j] in ['0', '1']) then
          begin
            Error := True;
            showmessage('This is not binary number');
            Break;
          end;
     
      if not Error then
      begin
        if length(BinStr) = 0 then
          BinStr := '0000';
        case length(BinStr) mod 4 of
          1:
            BinStr := '000' + BinStr;
          2:
            BinStr := '00' + BinStr;
          3:
            BinStr := '0' + BinStr;
        end;
     
        while length(BinStr) > 0 do
        begin
          BinPart := Copy(BinStr, length(BinStr) - 3, 4);
          Delete(BinStr, length(BinStr) - 3, 4);
          for j := 1 to 16 do
            if BinPart = BinArray[j - 1, 0] then
              result := BinArray[j - 1, 1] + result;
        end;
      end;
    end;
     
    Function HexToInt(Value: string): Integer;
    begin
     
      result := StrToInt('$' + Value);
    end;
     
    function BinToInt(AValue: string): Integer;
    begin
      result := HexToInt(BinToHex(AValue));
    end;
     
    function Data_serial(str: string): Tmybox;
     
    var
     
      buf_1, buf_0: string;
     
    const
      Table: array [0 .. 35] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8',
        '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
        'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
    begin
     
      Box.Serial_Bin := HexToBin(Copy(str, 5, 12));
      if length(Box.Serial_Bin) < 48 then
        while length(Box.Serial_Bin) < 48 do
          Box.Serial_Bin := '0' + Box.Serial_Bin;
     
      buf_0 := Copy(Box.Serial_Bin, 1, 5);
      buf_1 := Table[BinToInt(Copy(Box.Serial_Bin, 1, 5)) + 9];
      Box.Serial := Table[BinToInt(Copy(Box.Serial_Bin, 1, 5)) + 9] +
        Table[BinToInt(Copy(Box.Serial_Bin, 6, 5)) + 9] + ' ' +
        Table[BinToInt(Copy(Box.Serial_Bin, 11, 4))] +
        Table[BinToInt(Copy(Box.Serial_Bin, 15, 4))] +
        Table[BinToInt(Copy(Box.Serial_Bin, 19, 4))] + ' ' +
        Table[BinToInt(Copy(Box.Serial_Bin, 23, 5)) + 9] +
        Table[BinToInt(Copy(Box.Serial_Bin, 28, 5)) + 9] + ' ' + '20' +
        inttostr(BinToInt(Copy(Box.Serial_Bin, 33, 7))) + '/' +
        inttostr(BinToInt(Copy(Box.Serial_Bin, 40, 5)));
     
      if (StrToInt(Copy(str, 28, 1)) = 1) then
        Box.Box_type := 'Verre'
      else if (StrToInt(Copy(str, 28, 1)) = 2) then
        Box.Box_type := 'Papier'
      else if (StrToInt(Copy(str, 28, 1)) = 3) then
        Box.Box_type := 'Plastique'
      else
        Box.Box_type := 'Erreur';
     
      if (StrToInt(Copy(str, 27, 1)) = 0) then
        Box.Box_type := Box.Box_type + '(Maître)'
      else if (StrToInt(Copy(str, 27, 1)) = 1) then
        Box.Box_type := Box.Box_type + '(Esclave)'
      else
        Box.Box_type := Box.Box_type + '(Erreur)';
     
      if (StrToInt('$' + Copy(str, 33, 2)) = $01) then
        Box.Etat := 'Normal Disponible'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $02) then
        Box.Etat := 'Normal Indisponible'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $11) then
        Box.Etat := 'Dégradé Disponible'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $12) then
        Box.Etat := 'Dégradé Indisponible'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $20) then
        Box.Etat := 'Erreur'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $30) then
        Box.Etat := 'Maintenance'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $40) then
        Box.Etat := 'Programmation'
      else if (StrToInt('$' + Copy(str, 33, 2)) = $50) then
        Box.Etat := 'Sommeil'
      else
        Box.Etat := 'Erreur Inconnue';
     
      Box.Company := Copy(str, 1, 4);
      Box.Firm := inttostr(StrToInt('$' + (Copy(str, 17, 2)))) + '.' +
        inttostr(StrToInt('$' + (Copy(str, 19, 2)))) + '.' +
        inttostr(StrToInt('$' + (Copy(str, 21, 2))));
      Box.Hard := inttostr(StrToInt('$' + (Copy(str, 23, 2)))) + '.' +
        inttostr(StrToInt('$' + (Copy(str, 25, 2))));
     
      Box.Remplissage := inttostr(StrToInt('$' + Copy(str, 29, 2))) + '%';
      Box.Batterie := inttostr(StrToInt('$' + Copy(str, 31, 2))) + '%';
      result := Box;
    end;
     
    procedure TForm1.BluetoothLE1DiscoverLEDevice(const Sender: TObject;
    const ADevice: TBluetoothLEDevice; Rssi: Integer;
    const ScanResponse: TScanResponse);
    var
      PrevDiscoveredDevicesCount: Integer;
      DiscoveredDevicesCount: Integer;
      DiscoveredDeviceIndex: Integer;
      DiscoveredDevice: TBluetoothLEDevice;
      DiscoveredDevice2: TBluetoothLEDevice;
      DiscoveredDeviceName: string;
     
      ListAjout: TListViewItem;
      Value: string;
      myArray: Tbytes; // dynamic array
    begin
      DiscoveredDevicesCount := BluetoothLE1.DiscoveredDevices.Count;
     
      for DiscoveredDeviceIndex := 0 to DiscoveredDevicesCount - 1 do
      begin
        DiscoveredDevice := BluetoothLE1.DiscoveredDevices[DiscoveredDeviceIndex];
        DiscoveredDeviceName := DiscoveredDevice.DeviceName;
        if DiscoveredDeviceName = 'TDNB' then
        begin
          myArray := DiscoveredDevice.AdvertisedData.Items
            [TScanResponseKey.ManufacturerSpecificData];
          Value := ByteToHex(myArray[0]) + ByteToHex(myArray[1]) +
            ByteToHex(myArray[2]) + ByteToHex(myArray[3]) + ByteToHex(myArray[4]) +
            ByteToHex(myArray[5]) + ByteToHex(myArray[6]) + ByteToHex(myArray[7]) +
            ByteToHex(myArray[8]) + ByteToHex(myArray[9]) + ByteToHex(myArray[10]) +
            ByteToHex(myArray[11]) + ByteToHex(myArray[12]) + ByteToHex(myArray[13])
            + ByteToHex(myArray[14]) + ByteToHex(myArray[15]) +
            ByteToHex(myArray[16]);
          if TDNB <> Value then
          begin
            TDNB := Value;
            Box := Data_serial(Value);
            ListAjout := Form1.ListView1.Items.Add;
            ListAjout.Data['Text1'] := Box.Serial;
            ListAjout.Data['Text2'] := 'Type';
            ListAjout.Data['Text3'] := 'Etat';
            ListAjout.Data['Text4'] := 'Compagnie';
            ListAjout.Data['Text5'] := 'Version';
            ListAjout.Data['Text6'] := 'Remplissage';
            ListAjout.Data['Text7'] := 'Batterie';
            ListAjout.Data['Text8'] := Box.Box_type;
            ListAjout.Data['Text9'] := Box.Etat;
            ListAjout.Data['Text10'] := Box.Company;
            ListAjout.Data['Text11'] := 'HW=' + Box.Hard + '/FW=' + Box.Firm;
            ListAjout.Data['Text12'] := Box.Remplissage;
            ListAjout.Data['Text13'] := Box.Batterie;
            ListAjout.Data['TextButton14'] := inttostr(random(100));
            ListAjout.Data['Text15'] := Value;
     
            FMyDevice := BluetoothLE1.DiscoveredDevices[DiscoveredDeviceIndex];
            born := DiscoveredDeviceIndex;
     
          end;
        end;
      end;
    end;
     
    procedure TForm1.BluetoothLE1EndDiscoverDevices(const Sender: TObject;
    const ADeviceList: TBluetoothLEDeviceList);
    begin
      if Scanning then
        ProgressBar1.Value := ProgressBar1.Max;
      Timer1.Enabled := False;
      Scanning := False;
    end;
     
    procedure TForm1.BluetoothLE1ServicesDiscovered(const Sender: TObject;
    const AServiceList: TBluetoothGattServiceList);
    var
      i, C: Integer;
    begin
      if AServiceList.Count > 0 then
      begin
        for i := 0 to AServiceList.Count - 1 do
        begin
          FService := AServiceList[i];
     
          FService.Characteristics;
          // showmessage('1');
          if Ftest3 = nil then
          begin
            Ftest3 := FService.GetCharacteristic(CHARACTERISTIC_ID);
            // showmessage('2');
            if (Ftest3 <> NIL) then
            begin
              // showmessage('3');
              // BluetoothLE1.SubscribeToCharacteristic(FMyDevice, Ftest3);
     
     
              // BluetoothLE1.WriteCharacteristic(FMyDevice,Ftest3);
     
              Form1.Button2.Text := 'good';
            end;
          end;
        end;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    begin
      TDNB := '';
      Form1.ListView1.Items.Clear;
      StopBLEDiscovery;
    //BluetoothLE1.DiscoverDevices(10000);
     
     
     
    //BluetoothLE1.DiscoverDevices(10000, [HRSERVICE]);
      PermissionsService.RequestPermissions([FLocationPermission],
        RequestPermissionsResult, DisplayRationale);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      StopBLEDiscovery;
      FMyDevice.Connect;
     
      TThread.CreateAnonymousThread(
     
        procedure
        begin
     
          if not BluetoothLE1.DiscoveredDevices[born].DiscoverServices then
            TThread.Synchronize(nil,
              procedure
              begin
     
              end);
        end).Start;
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      Ftest3.setvalue(0);
      // FMyDevice.WriteCharacteristic(Ftest3);
      Form1.BluetoothLE1.WriteCharacteristic(FMyDevice, Ftest3);
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    {$IFDEF ANDROID}
      FLocationPermission := JStringToString
        (TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
    {$ENDIF}
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    begin
      Scanning := False;
    end;
     
    procedure TForm1.ListView1ButtonClick(const Sender: TObject;
    const AItem: TListItem; const AObject: TListItemSimpleControl);
    var
      Data: Tbytes;
      Data2: array [0 .. 1] of byte;
      AChar: TBluetoothGattCharacteristic;
    begin
     
      SetLength(Data, 13);
      Data[0] := $1;
      Data[1] := $0;
      Data[2] := $0;
      Data2[0] := 0;
     
    {$IFDEF ANDROID}
      Ftest3.setvalue(Data);
      BluetoothLE1.WriteCharacteristic(FMyDevice, Ftest3);
    {$ENDIF}
    {$IFDEF IOS}
      // IOS specific code here
    {$ENDIF}
    {$IFDEF MACOS}
    Ftest3.setvalue(Data);
      BluetoothLE1.WriteCharacteristic(FMyDevice, Ftest3);
      // OS X specific code here
    {$ENDIF}
    {$IFDEF WIN32}
     
      // AChar := Ftest3.GetService.characteristics[2];
      // AChar.SetValueAsInt64(Int64(0));
      // FMyDevice.WriteCharacteristic(AChar);
     
      Ftest3.setvalue(Data);
     // BluetoothLE1.SubscribeToCharacteristic(FMyDevice, Ftest3);
     
     BluetoothLE1.DiscoveredDevices.Items[0].Connect;
     // BluetoothLE1.OnConnect(sender);
      BluetoothLE1.WriteCharacteristic(FMyDevice, Ftest3);
    {$ENDIF}
    {$IFDEF WIN64}
      Ftest3.setvalue(Data);
      BluetoothLE1.WriteCharacteristic(FMyDevice, Ftest3);
    {$ENDIF}
     
      // FMyDevice.WriteCharacteristic(Ftest3);
     
     
      // form1.ListView1.Items[Aitem.Index].Data['Text15'];
     
      // showmessage(tlistitemtextbutton(AObject).Text);
     
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      LElapsed: Cardinal;
    begin
      LElapsed := TThread.GetTickCount - ScanningStart;
      ProgressBar1.Value := ProgressBar1.Max * (LElapsed.ToSingle / ScanningTime);
    end;
     
    end.
    Voila une capture de l’application

    https://imgur.com/EMHgM1a


    Donc les chose qui se passe sont
    sur Android je clic sur le bouton qui et en haut sa me trouve instantanément la carte électronique et me donne les informations du system
    Ensuite j’appuis sur bouton 2 qui se transforme en Good car il va faire la liste des service si j’ai bien compris et après pour me connecter j’appuie sur le bouton 75 de la liste et la je c que sa a réussi a ce connecter car la carte électronique beep

    Donc jusque-là tout va bien
    Apres mon bute a la base et de faire un programme sur Windows
    Donc sur Windows il y a 2 conditions
    Dans les 2 qua il trouve la carte avec le Bluetooth et affiche dans la liste les informations
    1- Si je n’appareille pas la carte ce qui et normal car cela et du low énergie je vais recevoir quand j’appuis sur le bouton 2 donc pour lire les service

    https://imgur.com/q4JkCY8



    2- Sinon si j’ai fait un lien entre la carte électronique avant il va accepter de lire les services mais quand je vais vouloir écrire le ‘WriteCharacteristic’ il va m’envoyer cela

    https://imgur.com/hUkB3f2


    Et pour MacOs il arrive à trouver la carte il arrive à trouver les services mais pareille il n’arrive pas à écrire la donner pour se connecter par contre sur mac il ne veut pas appareiller la carte ce qui me paraît plus logique d’ayeur sur Android si j’appareille la carte il n’accepte pas la commande d’écriture
    J’ai demandé au propriétaire de la carte de m’envoyer la commande de connexion et il ma envoyer cela j’ai peut-être fait quelque chose qui ne fêlais pas

    https://imgur.com/yCJ9GYZ


    Voila Jesper que j’ai tout dit comme je vous les dis je ne connais pas le Bluetooth donc j’ai fait comme je pouvez pour faire la communication
    Ha oui la clé USB que j’utilise pour le Bluetooth et Asus bt400


    je vous remercie
    cordialement à vous
    Mycast

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Après avoir cherché toute la journée ou je n’ai pas trouvé de réponse j'ai trouvé un petit soft qui viens du store Microsoft

    Et avec lui j'ai réussi à faire une connexion

    Donc le problème ne vient pas de la clé USB mais belle et bien ou de Delphi ou ce qui serai plus probable de moi qui a dû oublier quelque chose

    Pour rappelle je suis sur Windows 10

    Voici la capture


    https://i.imgur.com/eEXtTP8.png


  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Il y a de nombreux tickets et modifications liés au bluetooth qui ont été traités pour la version 11 Alexandria sortie hier.
    (la liste publique est dispo sur https://docwiki.embarcadero.com/RADS...AD_Studio_11.0 )

    M'est avis que ce dysfonctionnement mériterait d'être vérifié après compilation dans cette nouvelle version.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Le sujet étant écrit en phonétique, vos propos sont difficiles à suivre.
    Attention à votre orthographe et aux négations.


    Que retourne Connect() ... à mon avis False, en lisant le code, le TBluetoothLEDevice.Connect invoque TWinBluetoothLEDevice.DoConnect qui ne fait rien que retourner False en version 10 Seattle
    Donc déjà la piste du Connect() semble hors sujet effectivement.
    Lire les sources et débugger avec les DCU aiderait à savoir d'où vient exactement l'exception.


    D'ailleurs si c'est une EBluetoothDeviceException c'est du code générique de la partie abstraction, peut-être l'appel à une fonction non autorisée
    Si c'était un véritable problème LE cela serait une EBluetoothLEDeviceException

    Il faudrait vider tout le code inutile, il y en a beaucoup et se limiter au strict nécessaire, mieux gérer vos variables, c'est assez brouillon.
    les Directives, moins il y en a, mieux c'est sinon à quoi servirait la couche d'abstraction ?
    Le Thread et le Synchronize sont-ils utiles ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pprem Voir le message
    Il y a de nombreux tickets et modifications liés au bluetooth qui ont été traités pour la version 11 Alexandria sortie hier.
    (la liste publique est dispo sur https://docwiki.embarcadero.com/RADS...AD_Studio_11.0 )

    M'est avis que ce dysfonctionnement mériterait d'être vérifié après compilation dans cette nouvelle version.
    merci je vais regarder cela

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Le sujet étant écrit en phonétique, vos propos sont difficiles à suivre.
    Attention à votre orthographe et aux négations.


    Que retourne Connect() ... à mon avis False, en lisant le code, le TBluetoothLEDevice.Connect invoque TWinBluetoothLEDevice.DoConnect qui ne fait rien que retourner False en version 10 Seattle
    Donc déjà la piste du Connect() semble hors sujet effectivement.
    Lire les sources et débugger avec les DCU aiderait à savoir d'où vient exactement l'exception.


    D'ailleurs si c'est une EBluetoothDeviceException c'est du code générique de la partie abstraction, peut-être l'appel à une fonction non autorisée
    Si c'était un véritable problème LE cela serait une EBluetoothLEDeviceException

    Il faudrait vider tout le code inutile, il y en a beaucoup et se limiter au strict nécessaire, mieux gérer vos variables, c'est assez brouillon.
    les Directives, moins il y en a, mieux c'est sinon à quoi servirait la couche d'abstraction ?
    Le Thread et le Synchronize sont-ils utiles ?

    Merci pour les infos j'ai refait un projet ou j'ai enlevé tout la partie liste etc. pour garder celons moi le minimum cela marche toujours sur Android mais toujours pas sur Windows car je n’ai encore rien changer

    Pour le thread il semblerais que cela soi utile car sans j’ai pas les services
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    unit Unit1;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes,
      System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      System.Bluetooth, FMX.StdCtrls, System.Bluetooth.Components,
      FMX.Controls.Presentation, System.Permissions;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        BluetoothLE1: TBluetoothLE;
        ProgressBar1: TProgressBar;
        Label1: TLabel;
        Timer1: TTimer;
        procedure Button3Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure BluetoothLE1ServicesDiscovered(const Sender: TObject;
          const AServiceList: TBluetoothGattServiceList);
        procedure BluetoothLE1DisconnectDevice(const Sender: TObject;
          const ADevice: TBluetoothLEDevice);
        procedure BluetoothLE1DiscoverLEDevice(const Sender: TObject;
          const ADevice: TBluetoothLEDevice; Rssi: Integer;
          const ScanResponse: TScanResponse);
        procedure Button1Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
        Scanning: Boolean;
        ScanningStart: Cardinal;
        FLocationPermission: string;
     
        procedure RequestPermissionsResult(Sender: TObject;
          const APermissions: TArray<string>;
          const AGrantResults: TArray<TPermissionStatus>);
     
        procedure DisplayRationale(Sender: TObject;
          const APermissions: TArray<string>; const APostRationaleProc: TProc);
     
        procedure StartBLEDiscovery;
        procedure StopBLEDiscovery;
     
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      buf_bin: string;
      buf: string;
      TDNB: string;
     
      FMyDevice: TBluetoothLEDevice;
      Ftest3: TBluetoothGattCharacteristic;
      FService: TBluetoothGattService;
      myServiceList: TBluetoothGattServiceList;
      born: Integer;
     
    const
     
      CHARACTERISTIC_ID: TGUID = '{9f1485f3-43ed-11e4-916c-0800200c9a66}';
     
      // pour ce connecter
    const
      ScanningTime = 10000; // 10s in msecs
     
    implementation
     
    uses
    {$IFDEF ANDROID}
      Androidapi.Helpers,
      Androidapi.JNI.JavaTypes,
      Androidapi.JNI.Os,
    {$ENDIF}
      FMX.DialogService;
    {$R *.fmx}
    {$R *.GGlass.fmx ANDROID}
    // {$R *.Surface.fmx MSWINDOWS}
     
     
    procedure TForm1.DisplayRationale(Sender: TObject;
      const APermissions: TArray<string>; const APostRationaleProc: TProc);
    begin
      TDialogService.showmessage
        ('We need to be given permission to discover BLE devices',
        procedure(const AResult: TModalResult)
        begin
          APostRationaleProc;
        end)
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    {$IFDEF ANDROID}
      FLocationPermission := JStringToString
        (TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);
    {$ENDIF}
    end;
     
    procedure TForm1.RequestPermissionsResult(Sender: TObject;
    const APermissions: TArray<string>;
    const AGrantResults: TArray<TPermissionStatus>);
    begin
      // 1 permissions involved: ACCESS_COARSE_LOCATION
      if (length(AGrantResults) = 1) and
        (AGrantResults[0] = TPermissionStatus.Granted) then
        StartBLEDiscovery
      else
        TDialogService.showmessage
          ('Cannot start BLE scan as the permission has not been granted');
    end;
     
    procedure TForm1.StartBLEDiscovery;
    begin
      if not Scanning then
      begin
        ScanningStart := TThread.GetTickCount;
        BluetoothLE1.DiscoverDevices(ScanningTime);
        ProgressBar1.Value := 0;
        Timer1.Enabled := True;
        Scanning := True;
      end;
    end;
     
    procedure TForm1.StopBLEDiscovery;
    begin
      Timer1.Enabled := False;
      Scanning := False;
      BluetoothLE1.CancelDiscovery;
    end;
     
    procedure TForm1.Timer1Timer(Sender: TObject);
     
    var
      LElapsed: Cardinal;
    begin
      LElapsed := TThread.GetTickCount - ScanningStart;
      ProgressBar1.Value := ProgressBar1.Max * (LElapsed.ToSingle / ScanningTime);
    end;
     
    procedure TForm1.BluetoothLE1DisconnectDevice(const Sender: TObject;
    const ADevice: TBluetoothLEDevice);
    begin
      if Scanning then
        ProgressBar1.Value := ProgressBar1.Max;
      Timer1.Enabled := False;
      Scanning := False;
    end;
     
    procedure TForm1.BluetoothLE1DiscoverLEDevice(const Sender: TObject;
    const ADevice: TBluetoothLEDevice; Rssi: Integer;
    const ScanResponse: TScanResponse);
    var
      DiscoveredDevicesCount: Integer;
      DiscoveredDeviceIndex: Integer;
      DiscoveredDevice: TBluetoothLEDevice;
      DiscoveredDeviceName: string;
     
      Value: string;
      myArray: Tbytes; // dynamic array
    begin
      DiscoveredDevicesCount := BluetoothLE1.DiscoveredDevices.Count;
     
      for DiscoveredDeviceIndex := 0 to DiscoveredDevicesCount - 1 do
      begin
        DiscoveredDevice := BluetoothLE1.DiscoveredDevices[DiscoveredDeviceIndex];
        DiscoveredDeviceName := DiscoveredDevice.DeviceName;
        if DiscoveredDeviceName = 'TDNB' then
        begin
        Value := 'Systeme_1';
          myArray := DiscoveredDevice.AdvertisedData.Items
            [TScanResponseKey.ManufacturerSpecificData];
          if TDNB <> Value then
          begin
            TDNB := Value;
     
            FMyDevice := BluetoothLE1.DiscoveredDevices[DiscoveredDeviceIndex];
            born := DiscoveredDeviceIndex;
            Form1.Label1.Text := 'Infos : System trouver';
          end;
        end;
      end;
    end;
     
    procedure TForm1.BluetoothLE1ServicesDiscovered(const Sender: TObject;
    const AServiceList: TBluetoothGattServiceList);
    var
      i: Integer;
    begin
      if AServiceList.Count > 0 then
      begin
        for i := 0 to AServiceList.Count - 1 do
        begin
          FService := AServiceList[i];
          FService.Characteristics;
          if Ftest3 = nil then
          begin
            Ftest3 := FService.GetCharacteristic(CHARACTERISTIC_ID);
            if (Ftest3 <> NIL) then
            begin
              Form1.Label1.Text := 'Infos : service OK';
            end;
          end;
        end;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TDNB := '';
      StopBLEDiscovery;
      PermissionsService.RequestPermissions([FLocationPermission],
        RequestPermissionsResult, DisplayRationale);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      StopBLEDiscovery;
      FMyDevice.Connect;
     
        TThread.CreateAnonymousThread(
     
        procedure
        begin
     
          if not BluetoothLE1.DiscoveredDevices[born].DiscoverServices then
            TThread.Synchronize(nil,
              procedure
              begin
     
              end);
        end).Start;
     
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    begin
      Ftest3.setvalue(0);
      BluetoothLE1.WriteCharacteristic(FMyDevice, Ftest3);
      Form1.Label1.Text := 'Infos : envoi donner';
    end;
     
    end.


  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Avec les DCU de Débogage, vous devriez étudier la méthode TWinBluetoothLEDevice.DoDiscoverServices pour comprendre la nécessité d'un thread ou non
    Idem pour trouver la source de l'exception, rien ne vaut le pas à pas pour déterminer si c'est une erreur provoqué volontairement par le code ou liée à une erreur système.

    A mon avis, il y a encore beaucoup trop de code dans les gestionnaires d'évènement
    Dans OnDiscoverLEDevice il faut exploiter le paramètre ADevice et en aucun cas BluetoothLE1.DiscoveredDevices
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pprem Voir le message
    Il y a de nombreux tickets et modifications liés au bluetooth qui ont été traités pour la version 11 Alexandria sortie hier.
    (la liste publique est dispo sur https://docwiki.embarcadero.com/RADS...AD_Studio_11.0 )

    M'est avis que ce dysfonctionnement mériterait d'être vérifié après compilation dans cette nouvelle version.
    Merci

    La nouvelle version de Delphi marche du moins pour Windows et il ne faut pas coupler pour que cela fonctionne ce qui est plus logique
    Après pour qu’il trouve le system cela et très long entre 30 a 1 minute alors que sur Android cela ce fait en 1 a 2 seconde je vais voir si je peu pas améliorer mon code

    Merci encore pour l’infos

    Il manque plus que je regarde si on peu avoir une version gratuite de Delphi cette version 11 car 30 jour sa va être limite

    Une Community serai le top


    Je vous remercie
    Merci
    Cordialement
    Mycast

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Avec les DCU de Débogage, vous devriez étudier la méthode TWinBluetoothLEDevice.DoDiscoverServices pour comprendre la nécessité d'un thread ou non
    Idem pour trouver la source de l'exception, rien ne vaut le pas à pas pour déterminer si c'est une erreur provoqué volontairement par le code ou liée à une erreur système.
    Merci pour les infos cela venais de Delphi maintenant que cela fonctionne je vais pouvoir me pencher sur le code plus en détail et le simplifier car là j’ai récupéré des bou de code a droite et a gauche pour faire un programme qui marche
    Je ne voulais pas faire un truc propre direct avec Android car compiler sur Android cela et trop long je n’ai pas la patience mais pour Windows les 6 secondes de compilation sa me va je peu travailliez là-dessus et après je convertirai pour Android

  10. #10
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par FFcast Voir le message
    La nouvelle version de Delphi marche du moins pour Windows et il ne faut pas coupler pour que cela fonctionne ce qui est plus logique
    Après pour qu’il trouve le system cela et très long entre 30 a 1 minute alors que sur Android cela ce fait en 1 a 2 seconde je vais voir si je peu pas améliorer mon code
    Ca sent le timer ou timeout qui ne sort de la recherche qu'une fois qu'il est atteint. M'est avis qu'il y a quelque chose à y faire quelque part (mais je ne sais plus trop où).

    Citation Envoyé par FFcast Voir le message
    Il manque plus que je regarde si on peu avoir une version gratuite de Delphi cette version 11 car 30 jour sa va être limite
    Une Community serai le top
    La Community Edition a été basculée sur une 10.4.2 Sydney en juillet. Elle ne sera pas en version 11 avant quelques mois. Il ne faut donc pas compter dessus pour ce projet.

    De plus, j'ai quand même 'impression que ce n'est pas un projet personnel mais un truc professionnel, donc la licence Community Edition sera probablement pas adaptée. Il faudra plutôt basculer sur une Professional.

    Il y a d'autres types de licences, de tarifs, d'offres spéciales, ... Ne pas hésiter à prendre contact avec l'équipe de vente (en l'occurrence Barnsten pour la francophonie) pour expliquer le cas et voir ce qui est le plus adapté avant expiration de la période d'essai de la version d'évaluation.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pprem Voir le message
    Ca sent le timer ou timeout qui ne sort de la recherche qu'une fois qu'il est atteint. M'est avis qu'il y a quelque chose à y faire quelque part (mais je ne sais plus trop où).
    Oui je vais regarder le timer et le code en détaille



    Citation Envoyé par pprem Voir le message
    La Community Edition a été basculée sur une 10.4.2 Sydney en juillet. Elle ne sera pas en version 11 avant quelques mois. Il ne faut donc pas compter dessus pour ce projet.

    De plus, j'ai quand même 'impression que ce n'est pas un projet personnel mais un truc professionnel, donc la licence Community Edition sera probablement pas adaptée. Il faudra plutôt basculer sur une Professional.

    Il y a d'autres types de licences, de tarifs, d'offres spéciales, ... Ne pas hésiter à prendre contact avec l'équipe de vente (en l'occurrence Barnsten pour la francophonie) pour expliquer le cas et voir ce qui est le plus adapté avant expiration de la période d'essai de la version d'évaluation.

    Si je confirme que cela et pour du personnel

    Jai bosser 1 ans avec heu en ten que technicien et les logiciels de maintenant sont vraiment mal foutue pas adapter pas pratique et beaucoup de chose était à faire manuellement

    Avec le covid j’avais arrêté de bosser avec heu sur la maintenance

    Mais là il veule que je revienne mais réutiliser leur logiciel de maintenant cela et vraiment pas pratique et pas adapter pour ce qui y a faire

    Donc je prends de l’avance refaire les applications pour mon usage personnel comme les logiciels que j’avais fait pour faire les rapports qui me fessai économiser 2h par jour ils ne les ont jamais eus si après il veule m’acheter le programme cela et différent mais pour le moment cela et pas convenue comme cela

    Cela et pas pour rien qu’il on pris 2 personnes pour me remplacer et qu’il veule que je revienne car les personnes qui mon remplacer il semblerait arrivé pas à suivre mais j’avais les programmes qui me fessait gagniez un temps fou et maintenant pour gagner plus de temps il faut que je passe à l’application maintenance


    Apres quand j’ai besoin de vendre une application j’ai déjà une licence mais pour des programmes de base car j’ai qu’une version Delphi XE5

    Je m’arrête la je suis entrain de raconter ma vie xD

  12. #12
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Là c'est typiquement un usage professionnel que tu décris : toute conception de logiciels pour soi afin de simplifier le travail ou aider à vendre des prestations n'est plus un usage personnel.

    Mais ça ne change rien au problème de toute façon. Pas de Community Edition en version 11 pour le moment (et à mon avis pas avant la sortie de la version majeure suivante ou dans un an comme ça a été le cas pour le passage de la CE 10.3.3 Rio à la CE 10.4.2 Sydney).

    Après, il y a aussi des packs de composants bluetooth compatibles avec Delphi XE5 sur le marché. Comme ça tu n'aurais pas de soucis de licence et ne serais pas obligé d'acquérir une version récente (même s'il y a eu énormément de choses sympa et utiles depuis la XE5, dont tout le monde n'a pas forcément l'utilité).

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 23
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par pprem Voir le message
    Là c'est typiquement un usage professionnel que tu décris : toute conception de logiciels pour soi afin de simplifier le travail ou aider à vendre des prestations n'est plus un usage personnel.

    Mais ça ne change rien au problème de toute façon. Pas de Community Edition en version 11 pour le moment (et à mon avis pas avant la sortie de la version majeure suivante ou dans un an comme ça a été le cas pour le passage de la CE 10.3.3 Rio à la CE 10.4.2 Sydney).

    Après, il y a aussi des packs de composants bluetooth compatibles avec Delphi XE5 sur le marché. Comme ça tu n'aurais pas de soucis de licence et ne serais pas obligé d'acquérir une version récente (même s'il y a eu énormément de choses sympa et utiles depuis la XE5, dont tout le monde n'a pas forcément l'utilité).
    je vais regarder cela merci pour les infos merci ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème avec mon script de caméra orbital unity sur android
    Par thomasI dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 15/12/2016, 09h54
  2. Problème de conversion de code VB en delphi
    Par NapsterVB dans le forum Delphi
    Réponses: 19
    Dernier message: 12/04/2007, 19h25
  3. Problème d'écriture dans un xml depuis Delphi
    Par MABB dans le forum Delphi .NET
    Réponses: 3
    Dernier message: 26/07/2006, 15h53
  4. problème avec Foreign Key [Interbase 7.5] [Delphi 2005]
    Par xenos dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/09/2005, 11h21
  5. Problème pour dialoguer avec port parallèle
    Par jejerome dans le forum C++
    Réponses: 8
    Dernier message: 16/05/2005, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo