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

Kitty

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

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

  • Посещение

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

    16

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

  1. Спасибо.

    Цитата

    Ну и можно для краткости (если там просто TImage) не писать все через StyleObject, а покороче, через StylesData['_имя_.bitmap']

    В 10 уроке курсов Ярослава показана похожая ситуация, но для текста. Но я пока не разобралась как инициализировать StylesData для битмапа который в памяти...
    Как я поняла надо заменить строку:
    ListBoxItem->ItemData->Bitmap->LoadFromStream(WelcomeINI.get());
    на нечто похожее на это:
    ListBoxItem->StylesData["ItemData.Bitmap"] = TValue::From<TMemoryStream>(WelcomeINI.get());
    но это не правильная конструкция.
    Покажите, пожалуйста, на паскале как заполнить StylesData картинкой из TMemoryStream, а я затем переделаю для билдера.
    Спасибо.

  2. Здравствуйте. Картинки грузятся с хостинга в потоке. Что не правильно в коде ниже? Картинки появляются только если прокрутить список вверх вниз т.е. после скролирования. Т.е. все грузиться правильно, но картинки появляются только если прокрутить список вверх-вниз после загрузки. Тест в WIN64. Спасибо.

    #include <memory>
      
    int ThreadsRunning = 0;
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    
    	TListBoxItem *ListBoxItem;
    	TListBoxGroupHeader *ListBoxGroupHeader;
    
    	AniIndicator1->Enabled = true;
    
    	ListBox1->BeginUpdate();
    	try
    	{
    		//test for 5 images:
    		for (int i = 1; i <= 5; i++)
    		{
    			ListBoxGroupHeader = new TListBoxGroupHeader(ListBox1);
    			ListBoxGroupHeader->Text = L"Custom header";
    			ListBox1->AddObject(ListBoxGroupHeader);
    
    			ListBoxItem = new TListBoxItem(ListBox1);
    			ListBoxItem->StyleLookup = L"listboxitemleftdetail";
    			ListBoxItem->Height = 44; //image heigth
    			ListBoxItem->TextSettings->Trimming = TTextTrimming::None;
    			ListBoxItem->TextSettings->WordWrap = true;
    			ListBoxItem->Text = L"Custom text";
                ListBox1->AddObject(ListBoxItem);
              
    			String URLLink = L"http://welcome.um.la/myimg/" + IntToStr(i) + ".png";
    			TThread *thread = TThread::CreateAnonymousThread(
    			[URLLink, ListBoxItem, this]()
    			  {
    				  std::unique_ptr<TMemoryStream> WelcomeINI(new TMemoryStream);
    				  std::unique_ptr<TIdHTTP> HTTP(new TIdHTTP);
    
                      try
    				  {
    					  HTTP->Get(URLLink, WelcomeINI.get());
    				  }
    				  catch(...)
                      {
    					  WelcomeINI->LoadFromFile("44x44.png"); //image by default
    				  }
    
    				  WelcomeINI->Position = 0;
    				  ListBoxItem->ItemData->Bitmap->LoadFromStream(WelcomeINI.get());
    			  }
    			);
    			thread->OnTerminate = &ThreadTerminated;
    			thread->Start();
    
    		    ++ThreadsRunning;
    		}
        }
        __finally
    	{
    		ListBox1->EndUpdate();
    	}
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ThreadTerminated(TObject *Sender)
    {
        if (--ThreadsRunning <= 0)
    		AniIndicator1->Enabled = false;
    }

     

  3. Похоже тут срез того, что происходит с Дельфи... Несколько разработчиков не могут собраться. Все заняты - кто нефтью торгует, кто ищет жизнь на Марсе... Ребята соберитесь наконец и результат встречи расскажите другим. Это будет классно! Спасибо.

  4. Ясно. В андроид стиле вроде как detail находиться внизу слева как и положено. Это наверное только для Windows detail стоит в странной позиции справа?

    Стиль с detail мне нужен. Я там храню ссылки на сайт и делаю сам detail не видимым:

    ListBoxItem->StylesData["detail.visible"] = TValue::From<bool>(false);

    и при нажатии на кнопку переход по ссылке.

    Значит окончательный вывод такой - чтобы получить итемы с нормальным текстом и картинками нужного размера, надо делать свой стиль. Правильно?

     

  5. 12 часов назад, RoschinSpb сказал:

    Обратите внимание, что если вы хотите поменять текстовые настройки, надо также установить свойство StyledSettings. Оно указывает какие текстовые настройки берутся из стиля, а какие из свойства. 

    Спасибо, вижу полный текст. Но выглядит очень криво. Много пустого места справа, а могло бы свободно поместиться одно-два слова.

    ListBoxItem = new TListBoxItem(ListBox1);
    	  ListBoxItem->StyleLookup = L"listboxitemleftdetail";
    	  ListBoxItem->Height = 72; //image heigth
    	  ListBoxItem->TextSettings->Trimming = TTextTrimming::None;
    	  ListBoxItem->TextSettings->WordWrap = true;
    	  ListBoxItem->Text = L"Магазин на втором этаже";
    	  ListBoxItem->StyledSettings = ListBoxItem->StyledSettings >> TStyledSetting::Other;
          ListBoxItem->ItemData->Accessory = static_cast<TListBoxItemData::TAccessory>(1);
    	  ListBoxItem->ItemData->Bitmap->LoadFromStream(WelcomeINI.get());
    	  ListBox1->AddObject(ListBoxItem);

     

    list.jpg

  6. К сожалению не помогло. А стиль я никакой не меняла просто положила ListBox на форму. Тестирую в Windows.

    //***
    ListBoxItem->TextSettings->Trimming = TTextTrimming::None;
    ListBoxItem->TextSettings->WordWrap = true;
    ListBoxItem->Text = L"Магазин на втором этаже";

     

    И еще почему не взирая на то, что высота всех картинок 72 и высота выставлена:

    ListBoxItem->Height = 72;

    тем не менее картинки отображаются 44х44, а не 72х72. :(

     

  7. А какой настройки не хватает, чтобы увидеть текст полностью в итеме?

    ListBox1->BeginUpdate();
          TListBoxItem *ListBoxItem;
    	  TListBoxGroupHeader *ListBoxGroupHeader;
    	  ListBoxGroupHeader = new TListBoxGroupHeader(ListBox1);
    	  ListBoxGroupHeader->Text = L"Заголовок";
    	  ListBox1->AddObject(ListBoxGroupHeader);
    
    	  ListBoxItem = new TListBoxItem(ListBox1);
    	  ListBoxItem->StyleLookup = L"listboxitemleftdetail";
    	  ListBoxItem->Height = 72; //высота картинки
          ListBoxItem->TextSettings->WordWrap = true;
    	  ListBoxItem->Text = L"Магазина на втором этаже";
    	  ListBoxItem->ItemData->Bitmap->LoadFromStream(WelcomeINI.get());
    	  ListBox1->AddObject(ListBoxItem);
    	  ListBox1->EndUpdate();

     

    text.jpg

  8. Прежде чем приступить к полному заполнению листбокса пытаюсь вообще получить картинку в одном итеме. Что не правильно в этом коде? Я не вижу картинку в листбоксе:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      std::unique_ptr<TMemoryStream> WelcomeINI(new TMemoryStream());
      try
       {
    	IdHTTP1->Get(L"http://welcome.um.la/myimg/11.png", WelcomeINI.get());
    	WelcomeINI->Position = 0;
       }
       catch(...)
    		{
    		 WelcomeINI->LoadFromFile("72x72.png"); //картинка по дефолту
             WelcomeINI->Position = 0;
    		}
    
    
    	  ListBox1->BeginUpdate();
          TListBoxItem *ListBoxItem;
    	  TListBoxGroupHeader *ListBoxGroupHeader;
    	  ListBoxGroupHeader = new TListBoxGroupHeader(ListBox1);
    	  ListBoxGroupHeader->Text = L"ONE";
    	  ListBox1->AddObject(ListBoxGroupHeader);
    
    	  ListBoxItem = new TListBoxItem(ListBox1);
    	  ListBoxItem->StyleLookup = L"listboxitemdetaillabel";
          ListBoxItem->Height = 72; //высота картинки
    	  ListBoxItem->Text = L"Test1";
    	  ListBoxItem->ItemData->Bitmap->LoadFromStream(WelcomeINI.get());
    	  ListBox1->AddObject(ListBoxItem);
    	  ListBox1->EndUpdate();
    }

     

  9. Подскажите, как правильно реализовать:
    На хостинге хранятся картинки. Имена картинок можно задать произвольные, чтобы было удобно их перебирать в цикле.
    Как правильно добавить картинки в ListBox с удаленного хостинга?
    Надо использовать в цикле TIdHTTP скачивать картинку во временный файл и потом:
    Item.ItemData.Bitmap.LoadFromFile('011.jpg')
    ?

  10. bool __fastcall TForm1::HandleAppEvent(TApplicationEvent AAppEvent, TObject *AContext)
    {
    	if (AAppEvent == TApplicationEvent::EnteredBackground)
    	{
    	 MainActivity()->finish();
    	}
    	return true;
    }

    Эксперимент показал, что если приложение на переднем плане и если ничего не делать, а дождаться чтобы экран телефона сам погас и затем включить экран, то приложения на переднем плане уже нет. Значит затемнение экрана это тоже EnteredBackground. Правильно?

  11. Интересная тема. Вот почему то Close не работает стабильно. Приложение уходит в фон и после этого его можно почему-то запустить только со второго раза. А вот _exit(0); похоже работает как надо.

    Все ли правильно тут, похоже, что работает, но надежно ли так? Спасибо.

    public:		// User declarations
    	  bool __fastcall HandleAppEvent(TApplicationEvent AAppEvent, TObject *AContext);
    
    //***CPP***
    
    #include <stdlib.h>
      
    bool __fastcall TForm1::HandleAppEvent(TApplicationEvent AAppEvent, TObject *AContext)
    {
    	if (AAppEvent == TApplicationEvent::EnteredBackground)
    	{
    	 //Close(); после ухода в фон и попытки стартовать снова иногда надо две попытки
    	 //Application->Terminate(); после ухода в фон и попытки стартовать снова иногда надо две попытки
    	  _exit(0); //похоже работает как надо
    	}
    	return true;
    }
    
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    
       _di_IFMXApplicationEventService Intf;
    	if (TPlatformServices::Current->SupportsPlatformService(__uuidof(IFMXApplicationEventService)) )
    	{
    		Intf = TPlatformServices::Current->GetPlatformService(__uuidof(IFMXApplicationEventService));
    		Intf->SetApplicationEventHandler(HandleAppEvent);
    	}
    }

     

  12. Мне не до конца понятно.

    1.Приехал автобус.

    2. Человек вышел из автобуса, запустил фирменное приложение Плеса и пошел гулять. Это все.

    3. В процессе прогулки он получал бы интересную информацию от взаимодействия с маячками.

    Как гуру это бы реализовали окончательно?

     

  13. Тут как бы выбора и нет.

    Всего 20 маячков по городу (20 экскурсий и все) и при входе в зону маячка надо получить свой аудио файл. Вот и все.

    Ваше окончательное решение запилить все в apk и сделать фирменное приложение для города все внутри?

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