Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.01.2012, 22:16
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию Потоки

Извиняюсь если не там тему создал.
Делаю подобие vk клиента, и там есть функции:
procedure RefreshMySmallProfile;
procedure ShowFriends(online:boolean)
procedure SetStatus(text:string);
Хочу выполнять эти функции в отдельном потоке.
Но вопрос как передать в поток функции, хотелось бы что-то на подобие этого:
Thread.Create(ShowFriends(true));
Каким образом можно это реализовать?

П.С.
На форме есть СкроллБокс, на нем лежит Image с фоном, поверх скроллбокса создаются панели FriendBox(TPanel) по кл-ву друзей, на нем там еще label с именем и т.п. В итоге пока грузится список друзей, стираются старые panel, рисуются новые, а их около 100, Мы имеем белый фон, Хотелось бы вытащить Image поверх белого фона, и нарисовать на нем: "идет загрузка" и т.п., Каким образом можно вытащить Image поверх, BringToFront не помогает, вот думаю может на канве рисовать или не получится, у кого-нибуть есть соображения.
Буду очень признателен за помощь.
Ответить с цитированием
  #2  
Старый 23.01.2012, 22:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

По поводу потоков. А что, сделать 3 типа потока (по потоку для каждой функции) и запускать нужное кол-во потоков нельзя? Каждый поток - это отдельный объект. Так что никаких проблем быть не должно. Ну и не забываем про синхронизацию.

По поводу картинок ничего не понял...
Ответить с цитированием
  #3  
Старый 23.01.2012, 22:44
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

я передаю переменные в поток, например число
а там уже
Код:
case nomer of
1:
2:
3:
...
Ответить с цитированием
  #4  
Старый 23.01.2012, 22:59
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

поток для кажой функции не пойдет, так как этих функций щас 3, в итогеих будет пару десятков минимум, просто мне нужно чтобы это же функция выполнилась в потоке, а не тормозила работу с формой, насчет картинок, завтра скрины выложу, чтоб понятней было
Ответить с цитированием
  #5  
Старый 24.01.2012, 14:08
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Решил на данный момент разработки отказаться от потока, всеравно секундную загрузки списка друзей пользователь в состоянии подождать.
Далее по картинкам, на этапе разработки это выглядит так:
Тут видно что по серединке лежит 3 image 'а, по серединке тот который мне нужен, лежит он на scrollBox, далее на на скроле я создаю панельки с друзьями и т.п., вот как это вглядит:

в ок, но во время прорисовки, несколько секунд создается такая фигня:

Видите, белый фон, а мне бы хотелось на время прорисовки поднять картинку поверх, тоесть загородить белую фигню, в идеале бы в начале процедуры прорисовки написать Image1.BringToFront;
а в конце Image1.SendToBack;
Но это к сожалению не проходит(( а на месте белой фигни у меня должен быть мой фон и значок загрузки.
Ответить с цитированием
  #6  
Старый 24.01.2012, 15:29
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Проблема решена, тему можно закрывать...
Ответить с цитированием
  #7  
Старый 24.01.2012, 21:58
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

Ой, ошибся, проблему так и не решил.
пробовал перед рисованием на скроллбоксе ставить
ScrollBox.visible:=false;
и ScrollBox.parent:=nil;
а потом уже ShowFriends;
но прикол в том, что они обрабатываются позже чем ShowFriends и в итоге получаю окно как на третьем скрине, кто-нибуть может подсказать как решить...
Ответить с цитированием
  #8  
Старый 24.01.2012, 22:28
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Грузить все в отдельном потоке в некоторый буфер, а потом из этого буфера просто отрисовывать.

По поводу потоков - а что мешает просто передавать указатель на функцию внутрь потока?
Ответить с цитированием
  #9  
Старый 24.01.2012, 22:49
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

по поводу указателя на функцию, отличная идея, спасибо за совет, попробую руализовать, а насчет "Грузить все в отдельном потоке в некоторый буфер, а потом из этого буфера просто отрисовывать." немного не понял... и вообще с технической точки зрения моего вопроса, почему visible:=false; выполняется после, может можно как то скрыть эту прорисовку...
Ответить с цитированием
  #10  
Старый 25.01.2012, 03:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Код:
Visible := False;
Application.ProcessMessages;

Т.к. выполнение идет в главном потоке, приложение просто не успевает обработать сообщения, стоящие в очереди. ProcessMessages принудительно заставляет обработать очередь сообщений.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Kingcss (25.01.2012)
  #11  
Старый 25.01.2012, 17:10
Kingcss Kingcss вне форума
Начинающий
 
Регистрация: 20.12.2010
Адрес: Иваново
Сообщения: 100
Версия Delphi: Delphi 7
Репутация: 519
По умолчанию

lmikle огромное спасибо, получилось и с потоком и с ScrollBox. Очень благодарен за вашу помощь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter