Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 44
1

Как создать цикл для обновления картинки в TImage?

06.01.2019, 17:30. Показов 1968. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

Создал форму,на неё поставил TImage,на неё процедура:

Delphi
1
2
3
4
procedure TForm2.Image1Click(Sender: TObject);
begin
  Image1.Picture.LoadFromFile('18.png');
end;
При компиляции,после появления формы надо нажать на окне картинки,тогда она появляется.Потом если картинка меняется в файле,опять нажимаю,и картинка меняется.

Как сделать,чтобы цикл постоянно проверял появилась ли новая картинка и обновил её сам?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2019, 17:30
Ответы с готовыми решениями:

Как очистить нарисованное поверх картинки в TImage?
С помощью Image я могу рисовать, как мне сделать очистку нарисованного (есть один нюанс, там есть...

Как копировать часть Png картинки в Timage
Вобщем беда как всегда с прозрачностью при копировании выводятся на ура TPngImage *p = new...

Как создать DataAdapter для возможности сохранения (обновления) данных
Делаю так, отдельной процедурой гружу таблицы в Dataset: Private Sub LoadTable(ByVal...

Функция для обновления картинки
Нужна функция, обновляющая картинку (reload). Кто знает как это сделать?

11
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,135
Записей в блоге: 3
06.01.2019, 21:13 2
Цитата Сообщение от NikitaGek Посмотреть сообщение
появилась ли новая картинка
а что значит новая?
если у нее меняется название это одно, а если только само изображение это другое

по какому условию программа должна понять что картинка новая?
0
62 / 48 / 20
Регистрация: 01.09.2017
Сообщений: 381
06.01.2019, 21:33 3
qwertehok, Хех, вот так начинающий ставит вопрос, не хило да?
0
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 44
07.01.2019, 07:02  [ТС] 4
qwertehok,картинка с тем же названием 18.png будет новая.
Если этот код запутить и нажать на окно картинки,появится картинка.Потом заменить ту на другую,с таким же названием,и нажать на неё,она изменится.

Надо,чтобы без нажатия.

Или для начала можно без цикла,чтоб просто появлялась,без нажатия на неё.
0
Модератор
9270 / 6048 / 2380
Регистрация: 21.01.2014
Сообщений: 25,828
Записей в блоге: 3
07.01.2019, 07:17 5
NikitaGek, таймер - Ваше все... С периодичностью 1 раз в секунду (к примеру) проверяйте наличие файла 18.png и, если он не удален, загружаете его в Image... Это самый простейший вариант... Правда тут возникает такой нюанс, что можете получить вылет в момент, когда картинка в файловой системе будет заменяться, а программа попытается именно в этот момент этот файл загрузить...
0
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 44
07.01.2019, 10:45  [ТС] 6
D1973,как проверять, Sleep(1000)?при первом запуске даже картинку не видно,пока не нажмёшь.
0
Модератор
9270 / 6048 / 2380
Регистрация: 21.01.2014
Сообщений: 25,828
Записей в блоге: 3
07.01.2019, 10:53 7
Лучший ответ Сообщение было отмечено NikitaGek как решение

Решение

Цитата Сообщение от NikitaGek Посмотреть сообщение
как проверять, Sleep(1000)?
При чем тут какой-то Sleep. Я же по русски сказал - таймер, компонент TTimer... Кидаете его на форму, делаете двойной клик и пишете одну единственную строчку кода
Delphi
1
2
3
4
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 if FileExists('c:\tmp\18.bmp') then Image1.Picture.LoadFromFile('c:\tmp\18.bmp');
end;
все что требовалось...
1
62 / 48 / 20
Регистрация: 01.09.2017
Сообщений: 381
07.01.2019, 13:19 8
D1973, Так он я так думаю, предполагает постоянную замену картинок в папке, типа, закачал новые картинки в папку, и у него в проге будут отображаться именно все новые автоматом обновляясь. Но картинки могут быть с разными неповторяемыми именами, и тут такой тип проверок бесполезен, поэтому я же сразу сказал, что эта задача будет ещё похлеще всех тут остальных. Решение будет иметь довольно нехилый код.

Всё бы было как дважды два, если бы все картинки он подготавливал заранее, переименовывал, как нужно и в проге были бы они предопределены заранее по именам, но тут всё гораздо сложнее.

Думаю что на первом этапе нужно получить список имен файлов в конкретной папке, а затем уже дальше кумекать:


Delphi
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
procedure TForm1.GetAllFiles( Path: string; Lb: TListBox );
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst( Path + '\*.*', faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name <> '.' ) and ( sRec.Name <> '..' ) then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + '\' + sRec.Name, Lb );
Lb.Items.Add( Path + '\' + sRec.Name );
end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;
 
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
GetAllFiles( 'C:\Papka', listbox1 );
end;
 
end.
Добавлено через 1 минуту
поправочка!
Delphi
1
2
чтобы вытащить только имена файлов нужно поменять строку Lb.Items.Add( Path + '\' + sRec.Name );
  на Lb.Items.Add(sRec.Name );  так будет проще дальше работать с ней.
0
0 / 0 / 0
Регистрация: 22.12.2018
Сообщений: 44
07.01.2019, 13:37  [ТС] 9
D1973,спасибо,то что нужно было.
Всем спасибо за ответы.
0
Модератор
9270 / 6048 / 2380
Регистрация: 21.01.2014
Сообщений: 25,828
Записей в блоге: 3
07.01.2019, 16:04 10
920403, давайте вместе тему внимательно перечитаем:
Автор:
Цитата Сообщение от NikitaGek Посмотреть сообщение
картинка с тем же названием 18.png будет новая
Ваш ответ:
Цитата Сообщение от 920403 Посмотреть сообщение
Но картинки могут быть с разными неповторяемыми именами
Автор:
Цитата Сообщение от NikitaGek Посмотреть сообщение
просто появлялась,без нажатия
Ваш ответ:
Цитата Сообщение от 920403 Посмотреть сообщение
procedure TForm1.Button1Click(Sender: TObject);
т.е. Ваши советы - совершенно противоположное тому, что требуется ТС-у...

Цитата Сообщение от 920403 Посмотреть сообщение
но тут всё гораздо сложнее...
Вы лучше автора знаете его задачу???
0
62 / 48 / 20
Регистрация: 01.09.2017
Сообщений: 381
07.01.2019, 16:57 11
D1973, Да, точно, я пропустил его некоторые сообщения, в моём варианте предполагается уже более продвинутая конструкция, ну если в будущем у кого нить такая задача встанет.
0
Модератор
9270 / 6048 / 2380
Регистрация: 21.01.2014
Сообщений: 25,828
Записей в блоге: 3
07.01.2019, 17:19 12
Цитата Сообщение от 920403 Посмотреть сообщение
если в будущем у кого нить такая задача встанет
может быть... Вот только если использовать что-нибудь поновее Дельфи 7, то Вашу процедуру можно свести к одной строке, используя TDirectory.GetFiles()
0
07.01.2019, 17:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2019, 17:19
Помогаю со студенческими работами здесь

Цикл для обновления данных в БД
Доброй ночи. В таблице есть поле &quot;raiting&quot; который необходимо подсчитать по нажатию кнопки....

Бесконечный цикл для обновления данных в stringgrid
Добрый день! Что то не пойму как периодически обновлять результаты запроса раз в 5 сек в stringgrid...

Как создать цикл для программы?
необходимо 4тобы программа не закрывалась после отладки, а продолжаласт .. например прописать: 1 -...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru