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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.06.2015, 22:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию Реализация кругового прогресбара в заголовке таба

В общем понадобилось мне реализовать тут визуально загрузку содержимого на странички. Как ни странно, но не нашел в инете готового простенького решения под Дельфи. И вот что родилось в итоге:
Изображения
Тип файла: png Demo.png (15.9 Кбайт, 21 просмотров)
Вложения
Тип файла: rar QuadProgress.rar (3.0 Кбайт, 12 просмотров)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Admin (01.06.2015)
  #2  
Старый 02.06.2015, 05:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Эт, канещно, здорово. А модуль с кодом в архив положить слабо?
Ответить с цитированием
  #3  
Старый 02.06.2015, 13:44
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Цитата:
Сообщение от Страдалецъ
В общем понадобилось мне реализовать тут визуально загрузку содержимого на странички. Как ни странно, но не нашел в инете готового простенького решения под Дельфи. И вот что родилось в итоге:

Unit33.pas то где ?

ЗЫ
Тоже реализовывал с помощью ImageList в потоке, правда не для табов, интересно твою реализацию посмотреть.
Ответить с цитированием
  #4  
Старый 02.06.2015, 14:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Упс Приду домой новый выложу. Как это я так слона то и не заметил.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 02.06.2015, 21:02
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вот выкладываю подправленный код. Немного еще там намудрил с закрытием вкладки и остановкой прогресса.
Вложения
Тип файла: rar QProject.rar (4.8 Кбайт, 6 просмотров)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 02.06.2015, 21:24
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Бгг, ну и реализация, однако.
Я бы на таймер повесил и табщит пронаследовал бы.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 02.06.2015, 21:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Тут ведь вся сложность оказалось в том, что экземпляр потока некуда присвоить после создания. Пришлось наследование дурацкое делать только для этого. А с таймером я сразу и пробовал, но что-то мне там не понравилось и сделал потоком. Вот если бы у TTabSheet была возможность куда-то ссылку на поток прилепить, можно было бы так не изгалятся.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 02.06.2015 в 22:05.
Ответить с цитированием
  #8  
Старый 02.06.2015, 22:24
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А чем тебя Tag : Integer не устраивает? Или не кошерно указательк инту прокастить...

ЗЫ. Про 64-бит не пинать. До сих пор я только пару проектов под 64 собрал, бо как особого смысла просто нет.

ЗЗЫ. А если очень хочется, то можно "грязным хаком" сделать и свои странички с доп. ссылкой для хранения.

ЗЗЗЫ. А что мешает сделать глобальный объект в своем коде и хранить все ссылки там? Да, видимо, хакать TTabPage (или как он там) все-равно придется.
Ответить с цитированием
  #9  
Старый 02.06.2015, 23:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну вот не могу себя заставить 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  
Старый 03.06.2015, 02:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А что тебе мешает все-таки захакать табшит?
Код:
type
  TForm1 = class(TForm)
    ...
    TabSheet1 : TTabSheet;
    ...

  TTabSheet = class(ComCtrls.TTabSheet)
  public
    ProgressThread : TThread;
  end;

И вперед.
Ответить с цитированием
  #11  
Старый 03.06.2015, 07:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Только лишь то, что так чуток сложнее выходит. Я же уже предложил вариант с таким решением, но все-же с тагом компактнее.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 03.06.2015, 12:32
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Ололо, а чего не воспользоваться анонимным потоком с замыканием на табшит?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #13  
Старый 03.06.2015, 19:59
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А как вы его контролировать собираетесь? Останавливать например? Вкладка ведь не обязательно должна закрываться если поток завершился.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #14  
Старый 03.06.2015, 21:24
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Потом покажу, без потока-трутня и таймера.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter