Прозрачный фон у ProgressBar

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Прозрачный фон у ProgressBar

Сообщение YaS » 11.06.2006 (Вс) 10:47

ProgressBar находится на рисунке и серый фон ProgressBar-а портит весь пейзаж.

Как сделать прозрачным фон у ProgressBar?

В поиске не нашел.

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 11.06.2006 (Вс) 11:28

Сделай свой и не мучайся :-) Тогда и бегущая полоса цветной будет и т.д.
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 11:37

Свой - это хорошо.

А все таки.. возможно это сделать? Если да, то киньте кодом.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.06.2006 (Вс) 11:43


YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 11:52

Amed писал(а):Примерно так
http://bbs.vbstreets.ru/viewtopic.php?t=3696


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

Добавлено:

Поставлю свой прогресс.

Всем спасибо.

-------
ЗЫ: свое, оно и в африке

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 12:49

хм....

Amed, а как фон picturebox-а сделать прозрачным?

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

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.06.2006 (Вс) 13:06

Зачем picturebox?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.06.2006 (Вс) 13:09

Можно рисовать руками не на PictureBox, а на форме, скажем.

Расскажи-ка, что вообще надо сделать.

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 13:14

Amed писал(а):Примерно так
http://bbs.vbstreets.ru/viewtopic.php?t=3696


в этом примере именно на PictureBox:
Amed писал(а):'Клади на форму Timer Timer1 и PictureBox pb


А если не на picturebox-е рисовать, то на чем?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.06.2006 (Вс) 13:18

Amed писал(а):а на форме, скажем.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.06.2006 (Вс) 13:21

form.line и так далее

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 13:21

Amed писал(а):Расскажи-ка, что вообще надо сделать.


При загрузке программы (много там всего расчитывается) появляется форма, обрезанная регионами по картинке, а на ней progressbar (на картинке) и label, в котором пишется чего на данный момент делается, чтобы юзер видел, что чего-то происходит, а не повисло.

Так вот, пока progressbar движется, "не закрашенная" его часть видна серым цветом.

Надо:

убрать эту серую "не закрашенную" часть progressbar-a, так как картинка не однородного цвета.

если как в примере выше, то там козни строит picturebox :(

Вроде как есть все расписал.


добавлено:

form.line и так далее

ага.. с формой получилось
но так у меня на форме на той picturebox, а в нем картинка и если красить на на форме, то видно не будет
Последний раз редактировалось YaS 11.06.2006 (Вс) 13:29, всего редактировалось 1 раз.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.06.2006 (Вс) 13:25

Угу. Все так и есть, рисовать прогрессбар безо всякой картинки, прямо на форме.

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 13:30

я выше написал - Добавлено

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 11.06.2006 (Вс) 13:40

Рисуем на том picturebox, которая уже есть на форме и в котором картинка. При желании можно нарисовать красивую рамочку, чтобы границы показать.

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 14:00

Да. На picturebox получилось - рисуется
Но... не получается рисовать с заданной координаты
Код: Выделить всё
Private Sub Timer1_Timer()
Static i As Integer

Picture1.Line (Picture1.ScaleWidth / 3, Picture1.ScaleHeight / 2)-(Picture1.ScaleWidth / 100 * i - 10, Picture1.ScaleHeight / 2 + 10), RGB(255, 0, 0), BF


i = i + 1

If i = 100 Then i = 0

End Sub


Сразу резко зарисовывает до начальной координаты, а только потом пополз прогресс.

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 14:03

Пробовал сначала выполнять
Код: Выделить всё
MoveToEx Picture1.hdc, Picture1.ScaleWidth / 3, Picture1.ScaleHeight / 2, ByVal 0&
- толку никакого

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.06.2006 (Вс) 14:05

Код: Выделить всё
Picture1.Line (Picture1.ScaleWidth / 3, Picture1.ScaleHeight / 2)-(Picture1.ScaleWidth / 150 * i + Picture1.ScaleWidth / 3, Picture1.ScaleHeight / 2 + 10), RGB(255, 0, 0), BF
Изображение

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 11.06.2006 (Вс) 14:19

tyomitch,
Спасибо.

Не по глазам сразу было
Код: Выделить всё
Picture1.ScaleWidth / 150 * i + Picture1.ScaleWidth / 3


Теперь все нормально.
Всем еще раз Большое спасибо.

Вопрос считаю исчерпаным.

IIIypuk
Обычный пользователь
Обычный пользователь
 
Сообщения: 96
Зарегистрирован: 10.06.2006 (Сб) 12:39

Сообщение IIIypuk » 11.06.2006 (Вс) 14:57

А можно еще так:
Добавляешь Shape с параметрами, напр.:
BackColor = 16744576
BackStyle - opaque
BorderStyle - transparent
FillColor = 16777215
FillStyle - VerticalLine
Heigh - 165

А потом по мере загрузки просто меняешь Width.
На мой взгляд весьма простой и красивый способ. Можно еще поиграть там с видами заливки, бордюра, цветов и т.д.

Чтоб посмотреть, как работает, создай пустой проект, добавь шейп этот, кинь таймер на форму, интервал 100, и добавь и добавь код к таймеру

Shape1.Width = Shape1.Width + 10

YaS
Начинающий
Начинающий
 
Сообщения: 22
Зарегистрирован: 13.02.2006 (Пн) 6:19

Сообщение YaS » 12.06.2006 (Пн) 10:52

IIIypuk,
согласен, вариант не плохой, но у меня наблюдалось мерцание при интервале таймера <100

Вот что я сделал, точнее собрал из того чего мне показывали:

Код: Выделить всё
Function fnProgress()
k = Fix((Form1.ScaleWidth - 255) / 2)       ' х-начальное
m = k + 255                                           ' х-конечное

For n = 0 To 255
Form1.Line (k, Form1.ScaleHeight / 2)- _
              (k + n, Form1.ScaleHeight / 2 + 15), RGB(Abs(125 - n), Abs(125 - n), 255), BF
Form1.Caption = RGB(Abs(125 - n), Abs(125 - n), 255) & ", " & Hex(RGB(Abs(125 - n), Abs(125 - n), 255))
Sleep (5)
DoEvents
Next
For n = 0 To 255
Form1.Line (m, Form1.ScaleHeight / 2)- _
              (m - n, Form1.ScaleHeight / 2 + 15), RGB(Abs(125 - n), Abs(125 - n), 255), BF
Form1.Caption = RGB(Abs(125 - n), Abs(125 - n), 255) & ", " & Hex(RGB(Abs(125 - n), Abs(125 - n), 255))
Sleep (5)
DoEvents
Next
End Function

Вместо Form1 можно и Picture... да вроде как все на чем рисовать можно.
Скорость регулируется
Код: Выделить всё
Sleep(5)
, конечно для этого надо в General добавить
Код: Выделить всё
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Можно и без API обойтись, например, если отражается процесс какого-либо расчета или чего другого, требующего времени - вот те и скорости регулировка.

GluKoBuG
Начинающий
Начинающий
 
Сообщения: 19
Зарегистрирован: 11.06.2006 (Вс) 21:49
Откуда: отсюда!

Сообщение GluKoBuG » 12.06.2006 (Пн) 11:05

Как я понял, нужно сделать картинку, прогресс бар и линии.
Линии можно просто
Код: Выделить всё

Line(x1,y1)-(x2,y2),color,[B][F]

А картинку
Код: Выделить всё

Me.PaintPicture(src.Picture,x,y)
Глюк - не глюк, если его можно исправить


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 11

    TopList  
cron