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

Загрузка PNG в Image из Deployment


zekelive

Вопрос

Добрый день, друзья. Нужна Ваша помощь. Пытаюсь загрузить изображение в формате PNG из Deployment в Image в событии формы FormShow. Но ничего не получается, ошибки не вылетает, но при этом весь код который идет после строчек загрузки картинки не выполняется; т.е. на вид есть какая-то проблема с загрузкой, но какая не пойму. Темы с подобными сообщения читал, тему с Ярославом про загрузку из Deployment тоже прочитал, но реализовать на практике не получается. Все выглядит так:

Загрузка картинок:

  Image4.Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'buttonsearch.png'));
  Image5.Bitmap.LoadFromFile(TPath.GetDocumentsPath + PathDelim + 'buttonsearch.png');
  Image7.MultiResBitmap.LoadItemFromStream(TFileStream.Create(TPath.Combine(TPath.GetDocumentsPath,'buttonsearch.png'),fmOpenRead), 1);

Пользовался 3-мя найденными способами из интернета, не один не выполняется.

Кто уже работал с этим, подскажите, что делать?

2016-09-05_11-39-13.png

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Как обычно, только напишешь на форум и ответ приходит сам к тебе в руки. Получилось загрузить всеми 3-мя вариантами картинку но только в событии Button уже в загрузившейся форме. Но остается открытым вопрос, как загрузить необходимый материал перед показом формы?

Ссылка на комментарий
  • 0

Не совсем так, в FormShow не работает. работает при нажатии на кнопку. когда форма уже загрузилась. предполагаю что получить доступ к файлам в deployment можно только после полной загрузки формы. событие формы oncreate не пробовал. но думаю что будет аналогично с шоу

Ссылка на комментарий
  • 0
Только что, AlexG сказал:

Попробуйте загрузку ваших картинок оформить в:


TThread.Synchronize(TThread.CurrentThread, procedure
begin
// тут загрузка ваших картинок
end);

 

пробовал в потоке. вызываю его в событии onshow. реакция на это такая же, как бы я это делал в onshow. Хотела еще добавить что картинки должны загрузиться И после этого выполниться анимация показа этих картинок. Интересно,  именно эта анимации может как раз и вызывать проблемы?

 

Ссылка на комментарий
  • 0
1 час назад, zekelive сказал:

пробовал в потоке. вызываю его в событии onshow. реакция на это такая же, как бы я это делал в onshow. Хотела еще добавить что картинки должны загрузиться И после этого выполниться анимация показа этих картинок. Интересно,  именно эта анимации может как раз и вызывать проблемы?

 

Дебаггер не используете что ли? Тупо брикпоинт на OnShow и по шагам идти до ошибки - F7,F8,F9 в помощь

Ссылка на комментарий
  • 0
2 минуты назад, krapotkin сказал:

OFF: угу. на андроиде походишь. сегодня в очередной раз ходил-ходил, не выходил...

а в чем проблема с пошаговой отладкой под андроид?

PHP на удаленном юниксе в NetBeans по шагам отладка настраивается, а тут в винде устройство висит на шнуре и нельзя? 

в XE7 еще были проблемы, в XE10 дебаггер православный

Ссылка на комментарий
  • 0

Брейкпойнт в потоке. Нажать F8. В зависимости от температуры на марсе программа либо сделает шаг, либо продолжит выполнение как по F9. Чаще второе.

Брейкпойнт доступен только если при запуске программы в IDE был активен ИМЕННО этот файл. Иначе - сорри. disabled.

Сtrl+F7 по глобальной переменной. Нет такой переменной в этом контексте.Можно попробовать указать полное имя, включая юнит, и обязательно Case Sensitive!!! Иногда помогает

Сtrl+F7 по полю объекта. Нет такого поля!

Ctrl+F7 по строке. Извольте смотреть только первые 200 символов...

Ctrl+F7 по переменной-объекту? Лехко! $0cfd983297! Исчерпывающая информация.

a[car1].id['s'] - ВЫ ЧТО - ВООБЩЕ РЕХНУЛИСЬ ТАМ? как бы интересуется отладчик ))))

Православие на нерусских языках - orthodox. Понятно почему...

Ссылка на комментарий
  • 0

может в Delphi так, в CBuider брейкпоинт работает на любом открытом файле

применительно к этой теме - какие потоки в FormShow?

только ленивый не найдет на какой строке у него все падает

Ссылка на комментарий
  • 0
28 минут назад, Камышев Александр сказал:

может в Delphi так, в CBuider брейкпоинт работает на любом открытом файле

применительно к этой теме - какие потоки в FormShow?

только ленивый не найдет на какой строке у него все падает

Если Вы ознаеомились с первыми 2 постами то могли увидеть, что где именно проблема - известно. конкретно загрузка картинок не может быть выполнена на этапе form show. но может быть выполнена уже после отображения формы на экране по нажатию допустим на кнопку. вопрос собственно в том, как сделать загрузку картинок перед показом формы? чтобы в этом был хоть какой-то смысл)

Ссылка на комментарий
  • 0

В конкретном случае - речь идет о Android.

Тут, в некотором смысле, проще - воспользуйтесь замечательными компонентами FGX от автора данного форума. У компонента TfgApplicationEvents есть все события, которые Вам необходимы. А именно - событие ДО отображения формы (и куча других).

Ну если Вам не хватает отладчика - тупо натыкайте в нужных местах "тостов" (Toast), и смотрите - что будет "последним" событием...

З.Ы. А зависание программы происходит однозначно из-за того, что Вы пытаетесь что-то изменить в интерфейсе, до момента пока форма еще не стала активной. Решить можно не только синхронизацией, но и каким-нибудь Splash.

Изменено пользователем AlexG
Ссылка на комментарий
  • 0
2 минуты назад, AlexG сказал:

В конкретном случае - речь идет о Android.

Тут, в некотором смысле, проще - воспользуйтесь замечательными компонентами FGX от автора данного форума. У компонента TfgApplicationEvents есть все события, которые Вам необходимы. А именно - событие ДО отображения формы (и куча других).

Ну если Вам не хватает отладчика - тупо натыкайте в нужных местах "тостов" (Toast), и смотрите - что будет "последним" событием...

Отличная идея. Спасибо, его как раз вечером и опробую)

Ссылка на комментарий
  • 0
9 часов назад, zekelive сказал:

Не совсем так, в FormShow не работает. работает при нажатии на кнопку. когда форма уже загрузилась. предполагаю что получить доступ к файлам в deployment можно только после полной загрузки формы. событие формы oncreate не пробовал. но думаю что будет аналогично с шоу

Загрузка картинки успешно работает в событии OnShow (использовал Ваш пример загрузки). Покажите пожалуйста весь код вашего обработчика OnShow. На Андроиде вся работа с Bitmap должна проходить в основном потоке либо через синхронизации с основным.

Ссылка на комментарий
  • 0
1 минуту назад, Fedor K сказал:

Загрузка картинки успешно работает в событии OnShow (использовал Ваш пример загрузки). Покажите пожалуйста весь код вашего обработчика OnShow. На Андроиде вся работа с Bitmap должна проходить в основном потоке либо через синхронизации с основным.

Удивительно, до компьютера еще не добрался. Это интересно. Чуть позже скину обязательно.

Ссылка на комментарий
  • 0
TThread.Synchronize(TThread.CurrentThread, procedure
begin
Image4.Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'buttonsearch.png'));
end);

Таким вот образом получилось в событии OnShow формы загрузить картинки. Спасибо AlexG за совет.

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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