|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Реализация кругового прогресбара в заголовке таба
В общем понадобилось мне реализовать тут визуально загрузку содержимого на странички. Как ни странно, но не нашел в инете готового простенького решения под Дельфи. И вот что родилось в итоге:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Admin (01.06.2015)
|
#2
|
|||
|
|||
Эт, канещно, здорово. А модуль с кодом в архив положить слабо?
|
#3
|
||||
|
||||
Цитата:
Unit33.pas то где ? ЗЫ Тоже реализовывал с помощью ImageList в потоке, правда не для табов, интересно твою реализацию посмотреть. |
#4
|
||||
|
||||
Упс Приду домой новый выложу. Как это я так слона то и не заметил.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
||||
|
||||
Вот выкладываю подправленный код. Немного еще там намудрил с закрытием вкладки и остановкой прогресса.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#6
|
||||
|
||||
Бгг, ну и реализация, однако.
Я бы на таймер повесил и табщит пронаследовал бы. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#7
|
||||
|
||||
Тут ведь вся сложность оказалось в том, что экземпляр потока некуда присвоить после создания. Пришлось наследование дурацкое делать только для этого. А с таймером я сразу и пробовал, но что-то мне там не понравилось и сделал потоком. Вот если бы у TTabSheet была возможность куда-то ссылку на поток прилепить, можно было бы так не изгалятся.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 02.06.2015 в 22:05. |
#8
|
|||
|
|||
А чем тебя Tag : Integer не устраивает? Или не кошерно указательк инту прокастить...
ЗЫ. Про 64-бит не пинать. До сих пор я только пару проектов под 64 собрал, бо как особого смысла просто нет. ЗЗЫ. А если очень хочется, то можно "грязным хаком" сделать и свои странички с доп. ссылкой для хранения. ЗЗЗЫ. А что мешает сделать глобальный объект в своем коде и хранить все ссылки там? Да, видимо, хакать TTabPage (или как он там) все-равно придется. |
#9
|
||||
|
||||
Ну вот не могу себя заставить Tag использовать для чего-либо. Какой-то он вседоступный, каждый может чего угодно в него вписать. Но если конечно стоит выбор - делать такого наследника или использовать tag, возможно все-же tag будет приличнее
Попробую через tag сделать, может правда более прилично выйдет. Ну вроде действительно как-то поприличнее стало: Код:
procedure TForm33.Button1Click(Sender: TObject); var Tab: TTabSheet; TabProgress: TTabProgress; begin Tab := TTabSheet.Create(PageControl1); Tab.PageControl := PageControl1; Tab.Caption := IntToStr(Tab.TabIndex); Tab.ImageIndex := 0; TabProgress := TTabProgress.Create(True); TabProgress.FreeOnTerminate := True; TabProgress.Tab := Tab; Tab.Tag := Integer(TabProgress); TabProgress.Start; end; procedure TTabProgress.Execute; begin inherited; while not Terminated do begin Synchronize(Update); Sleep(50); end; end; procedure TTabProgress.Update; begin Tab.ImageIndex := Tab.ImageIndex + 1; if Tab.ImageIndex > Tab.PageControl.Images.Count-1 then Tab.ImageIndex := 0; end; procedure TForm33.Button2Click(Sender: TObject); begin TTabProgress(PageControl1.ActivePage.Tag).Suspend end; procedure TForm33.Button3Click(Sender: TObject); var i: Integer; begin if Assigned(PageControl1.ActivePage) then begin TTabProgress(PageControl1.ActivePage.Tag).Terminate; PageControl1.ActivePage.Free; end; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 02.06.2015 в 23:16. |
#10
|
|||
|
|||
А что тебе мешает все-таки захакать табшит?
Код:
type TForm1 = class(TForm) ... TabSheet1 : TTabSheet; ... TTabSheet = class(ComCtrls.TTabSheet) public ProgressThread : TThread; end; И вперед. |
#11
|
||||
|
||||
Только лишь то, что так чуток сложнее выходит. Я же уже предложил вариант с таким решением, но все-же с тагом компактнее.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#12
|
||||
|
||||
Ололо, а чего не воспользоваться анонимным потоком с замыканием на табшит?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#13
|
||||
|
||||
А как вы его контролировать собираетесь? Останавливать например? Вкладка ведь не обязательно должна закрываться если поток завершился.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#14
|
||||
|
||||
Потом покажу, без потока-трутня и таймера.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |