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

Kitty

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

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

  • Посещение

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

    16

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

  1. Подскажите, пожалуйста, почему ListBox не воспринимает настройки в ран тайм? Код ниже ничего не делает. Цвет текста не меняется, текст не центрируется. Вижу зеленый цвет шрифта с дефолным размером выровненным по левому краю. Что упущено?

    	 TListBoxGroupHeader *ListBoxGroupHeader;
    	 ListBoxGroupHeader = new TListBoxGroupHeader(ListBox2);
    	 ListBoxGroupHeader->TextSettings->FontColor = TAlphaColor(0xffff0000);
    	 ListBoxGroupHeader->TextSettings->HorzAlign = TTextAlign::Center;
    	 ListBoxGroupHeader->TextSettings->Font->Size = 16;
    	 ListBoxGroupHeader->Text = L"Текст текст текст";
    	 ListBox2->AddObject(ListBoxGroupHeader);

     

  2. Подскажите, пожалуйста, как можно правильно выполнить поиск в ListBox?
    Список без TSearchBox выглядит так:
    Заголовок 1(TListBoxGroupHeader)
    Основной текст
    Детализирующий текст
     Основной текст
    Детализирующий текст
    Заголовок2(TListBoxGroupHeader)
    Основной текст
    Детализирующий текст
    и т.д.

    Детализирующий текст ListBoxItem->ItemData->Detail везде разный. В программе становиться известно одно из значений детализирующего текста, как программно получить текст Заголовка и текст Основного текста которому принадлежит этот детализирующий текст? Мне надо найденные данные перенести в другой ListBox. Спасибо.

     

  3. В одном из приложений андроида увидела как от краев кнопки плавно расходиться окружность - уходит за края формы и затем снова появляется из под кнопки - призывая пользователя нажать кнопку. Решила повторить.

    Чтобы анимировать размер Circle добавила два FloatAnimation один для Scale.X другой для Scale.Y. Loop=true. Тригиры IsVisible=true и IsVisible=false.

    Circle выравнен по центру TRectangle.

    Почему-то анимация не расходиться красиво от центра, а съезжает вправо-вниз. Как сделать чтобы края окружности красиво и плавно расходись и цент окружности не менялся?

    Спасибо.

     

  4. Программно заполняется свойство ListBoxItem->ItemData->Detail и затем используется в программе.

    TListBoxItem *ListBoxItem;
    ListBoxItem = new TListBoxItem(ListBox1);
    ListBoxItem->Height = 45;
    ListBoxItem->Text = ValuesIniSection->KeyNames[j];//основной текст
    ListBoxItem->ItemData->Detail = ValuesIniSection->ValueFromIndex[j];//дополнительный текст должен быть невидимым!
    // (aNone=0, aMore=1, aDetail=2, aCheckmark=3)
    ListBoxItem->ItemData->Accessory = static_cast<TListBoxItemData::TAccessory>(1);
    ListBox1->AddObject(ListBoxItem);

    Однако мне надо чтобы в списке это свойство было невидимым.

    Что мною упущено ибо не получается сделать невидимым? Спасибо.

     

    Untitled-1.jpg

  5. Насколько правильным будет придуманный мною подход с промежуточным сохранением для моб. устройств?

    #include <memory>
    #include <System.IOUtils.hpp>
    #include <System.IniFiles.hpp>
      
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     std::unique_ptr<TMemoryStream> WelcomeINI(new TMemoryStream());
     IdHTTP1->Get(L"http://путь к ini файлу на серрвере", WelcomeINI.get());
     WelcomeINI->Position = 0;
    
       #ifdef __ANDROID__
       String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetTempPath(), L"welcome.ini");
       #elif _Windows
       String path = System::Ioutils::TPath::Combine(System::Ioutils::TPath::GetTempPath(), L"welcome.ini");
       #endif
    
     WelcomeINI->SaveToFile(path);
     if(FileExists(path))
    	 {
    	  ShowMessage(L"Файл с сервера получен");//тест
    	  //заполняем ListView из полученного файла
    	  //std::unique_ptr<TIniFile> FileINI(new TIniFile(path));
          //***
    	 }
    	 else
    		 {
    		  ShowMessage(L"Файл с сервера не получен");
             }
    
    }

     

  6. На хостинге храниться файл INI. Программа при старте должна прочитать этот файл и на основании его содержимого построить список. Как правильно это организовать? Надо сначала скачать этот файл на моб.устройство и затем читать его или как правильно? Может кто-то делал подобное?

    Спасибо.

  7. Все таки этот код не защищает полностью от английского окна...  Пользователь может совершит не адекватное действие и тогда английское исключение.

    Действие: в работающем приложении с включенным блютуз, зайти в настройки телефона и выключить блютуз, после чего вернуться в приложение.

  8. Избавиться от английского окна, вроде удалось с помощью таймеров, но это предварительная оценка. Пока английского окна не вижу. Вижу информацию понятную пользователю для его дальнейших действий без перезапуска приложения. насколько правильно, не знаю...:

    void __fastcall TForm1::TimerStartTimer(TObject *Sender)
    {
      //через 2 секунды запускаем Beacon1 если Bluetooth включен
      TimerStart->Enabled = false; //и сразу отключаем таймер
      Beacon1->Enabled = true;
    }
    
    //---------------------------------------------------------------------------
    
    //проверка включен ли Bluetooth 
    bool __fastcall TForm1::ManagerConnected(void)
    {
    	if(FBluetoothManagerLE->ConnectionState == TBluetoothConnectionState::Connected)
    	{
    	 return true;
    	}
    	else
    	  {
    		return false;
    	  }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormShow(TObject *Sender)
    {
      try
    	{
    	  FBluetoothManagerLE = TBluetoothLEManager::Current;
    	  if(ManagerConnected())
    	   {
    	   //есть Bluetooth
    	   TimerStart->Enabled = true;//программа идет по нужному сценарию т.к. Bluetooth включен
    	   }
    	   else
    		{
    		 //нет Bluetooth
    		 ShowMessage(L"Включите Bluetooth.");
    		 TimerCheckBluetooth->Enabled = true; //проверяем вкл. Bluetooth каждые 10 секунд
    		}
    	}
    	 catch (Exception &ex)
    	   {
    		ShowMessage(L"Ошибка: " + ex.Message);
    	   }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::TimerCheckBluetoothTimer(TObject *Sender)
    {
      if(ManagerConnected())
      {
       //если Bluetooth был включен пользователем уже при включенной программе отключаем таймер проверки Bluetooth
       TimerCheckBluetooth->Enabled = false;
       TimerStart->Enabled = true; //и запускаем программу по нужному сценарию т.к. Bluetooth включен
      }
    }

     

  9. А еще такой вопрос:

    Берем стандартный пример и компилируем при выключенном блютуз на устройство ios:

    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\CPP\Multi-Device Samples\Device Sensors and Services\Bluetooth\BLEScanner

    В приложении получаем окно, после нажатия кнопки:

    Error
    Bluetooth device not found: discconnected of turned off.

    Как сделать это сообщение на русском или заменить полностью своим?

     

  10. Похоже, что так работает, правда не известно ли для всех телефонов будет стабильно:

     if(FBluetoothManagerLE->ConnectionState == TBluetoothConnectionState::Connected)
      {
       ShowMessage(L"Connected");
      }
      else
       {
    	ShowMessage(L"Disconnected");
       }

     

  11. Без компонента тоже OFF...

    private:	// User declarations
        TBluetoothLEManager * FBluetoothManagerLE;
    
    //***
    void __fastcall TForm1::FormActivate(TObject *Sender)
    {
     FBluetoothManagerLE = TBluetoothLEManager::Current;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if(FBluetoothManagerLE->CurrentAdapter->State == TBluetoothAdapterState::Off)
      {
    	ShowMessage(L"OFF");
      }
      else
    	  {
    	   ShowMessage(L"ON");
    	  }
    
    }

     

  12. Спасибо. Посмотрела, что для CurrentAdapter можно также использовать компонент TBluetoothLE.

    Подскажите, где ошибка? Блютуз на телефоне iPhone 5 включен, а при нажатии на кнопку вижу сообщение OFF:

    void __fastcall TForm1::FormActivate(TObject *Sender)
    {
     BluetoothLE1->Enabled = true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      if(BluetoothLE1->CurrentAdapter->State == TBluetoothAdapterState::Off)
      {
    	ShowMessage(L"OFF");
      }
      else
    	  {
    	   ShowMessage(L"ON");
    	  }
    
    }

     

  13. Подскажите, пожалуйста, как на iOS телефоне проверить при старте программы или включен Bluetooth? И если нет, предложить включить Bluetooth пользователю.

    Спасибо.

     

  14. Проблема решена:

    <key>NSPhotoLibraryUsageDescription </key>
    <string>To choose photo</string>
    <key>NSCameraUsageDescription </key>
    <string>Get photo</string>

    Обнаружен лишний пробел перед закрывающей </key>. Странно, но это все ломало. Убрать пробел:

    <key>NSPhotoLibraryUsageDescription</key>
    <string>To choose photo</string>
    <key>NSCameraUsageDescription</key>
    <string>Get photo</string>

     

     

     

  15. C++ Builder 10.1 Up.1 (iOS 10 sdk)
    Теперь уже точно, можно сказать, что не работает:
    1. Открываем стандартный пример в режиме дебаг iOS 64 bit:
    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\CPP\Mobile Snippets\AccessCameraApp
    2. В настройках проекта добавляем ключ NSCameraUsageDescription и ставим галочку С++ Compiler->Advanced:
    Cenerate iOS universal binary file (armv7 + arm64)=true
    3. Запускаем на iPhone5/5s. При нажатии кнопки получаем raised exception class 6

    1. Открываем стандартный пример в режиме дебаг iOS 64 bit:
    C:\Users\Public\Documents\Embarcadero\Studio\18.0\Samples\CPP\Mobile Snippets\CameraRoll
    2. В настройках проекта добавляем ключ NSPhotoLibraryUsageDescription  и ставим галочку C++ Compiler->Advanced:
    Cenerate iOS universal binary file (armv7 + arm64)=true
    3. Запускаем на iPhone5/5s. При нажатии кнопки получаем raised exception class 6

    У кого есть опыт оформите, пожалуйста, в баг-трекер. Досадно, что базовый функционал не работает. Будем ждать нового релиза.

  16. Благо вспомнила, что в 64 бит работает отладка. В дебаге работает обращение к галерее, а вот на событии получения фото:

    void __fastcall TForm1::TakePhotoFromCameraAction1DidFinishTaking(TBitmap *Image)

    ---------------------------
    Debugger Exception Notification
    ---------------------------
    Project raised exception class 6.
     

     

     

  17. Дополнительно выяснилось, что если деплоить в режиме дебаг 64 bit, то все работает. Если деплоить в режиме релиз, то приложение падает при обращении к фото/галереи.

    Ключи в обоих конфигурациях одинаковые...

     

  18. Последовательность действий (на стенде EL Capitan):

    1. Деплоим на телефон 32 битную версию в релизе.

    2. При обращении к галерее/фото видим окно с просьбой разрешить обращение к галереи. Соглашаемся. Все работает.

    3. Деплоим поверх версию в 64 бита тоже в релизе. При обращении к галерее никаких запросов уже нет и все также четко работает.

    4. Полностью удаляем приложение с устройства.

    5. Деплоим начисто 64 битную версию. При обращении к галереи приложение сразу падает.

    Видимо откомпилированный 64 битный код не может вызвать окно запроса с разрешением использовать галерею/фото.

    Что еще можно попробовать т.к. для публикации в app store требуется именно 64 битная версия приложения?

     

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