![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
В общем понадобилось мне реализовать тут визуально загрузку содержимого на странички. Как ни странно, но не нашел в инете готового простенького решения под Дельфи. И вот что родилось в итоге:
|
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Admin (01.06.2015)
| ||
|
#2
|
|||
|
|||
|
Эт, канещно, здорово. А модуль с кодом в архив положить слабо?
|
|
#3
|
||||
|
||||
|
Цитата:
Unit33.pas то где ? ЗЫ Тоже реализовывал с помощью ImageList в потоке, правда не для табов, интересно твою реализацию посмотреть. |
|
#4
|
||||
|
||||
|
Упс
Приду домой новый выложу. Как это я так слона то и не заметил. |
|
#5
|
||||
|
||||
|
Вот выкладываю подправленный код. Немного еще там намудрил с закрытием вкладки и остановкой прогресса.
|
|
#6
|
||||
|
||||
|
Бгг, ну и реализация, однако.
Я бы на таймер повесил и табщит пронаследовал бы. |
|
#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
|
||||
|
||||
|
Ололо, а чего не воспользоваться анонимным потоком с замыканием на табшит?
|
|
#13
|
||||
|
||||
|
А как вы его контролировать собираетесь? Останавливать например? Вкладка ведь не обязательно должна закрываться если поток завершился.
|
|
#14
|
||||
|
||||
|
Потом покажу, без потока-трутня и таймера.
|