Dotinho Posted May 17, 2009 at 10:19 AM Report #264778 Posted May 17, 2009 at 10:19 AM Boas, eu queria fazer uma progress bar com cor, pois a do windows nao me da esse direito, entao fiz o seguinte: criei uma picture box, no tamanho que quiser, nao é importante o tamanho, depois fiz uma função que le o tamanho e cria a barra comforme a percentagem.. fica aqui o codigo, achei interessante: Private Function ll_PbPerc(ByVal pb As PictureBox, ByVal perc As Integer) As Integer Dim xy As Size = pb.Size Dim xper As Integer = (perc / 100) * (xy.Width - 4) pb.SuspendLayout() Dim g As Graphics = pb.CreateGraphics g.FillRectangle(Brushes.Black, New Rectangle(0, 0, xy.Width, xy.Height)) If perc < 60 Then g.FillRectangle(Brushes.GreenYellow, New Rectangle(0, 0, xper, xy.Height)) ElseIf perc >= 60 And perc < 75 Then g.FillRectangle(Brushes.Yellow, New Rectangle(0, 0, xper, xy.Height)) ElseIf perc >= 75 And perc < 90 Then g.FillRectangle(Brushes.Orange, New Rectangle(0, 0, xper, xy.Height)) ElseIf perc >= 90 Then g.FillRectangle(Brushes.Red, New Rectangle(0, 0, xper, xy.Height)) End If 'g.DrawString(perc & " %", New Font("Calibri", 9, FontStyle.Regular, GraphicsUnit.Pixel, 0), _ ' Brushes.Black, 6, 0) pb.ResumeLayout() Se alguem tiver algum codigo para outro tipo de progress bar, tambem pode postar aqui.. cmps Luis Lourenço
José Lopes Posted May 17, 2009 at 02:31 PM Report #264815 Posted May 17, 2009 at 02:31 PM e como se coloca isto a progredir..só por curiosidade? Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Dotinho Posted May 17, 2009 at 02:45 PM Author Report #264818 Posted May 17, 2009 at 02:45 PM loool, pelo uso.. ll_PbPerc(ByVal pb As PictureBox, ByVal perc As Integer) As Integer equando chamas a função, tens que declarar duas coias, pb As PictureBox, é onde declaras a picture box, depois perc As Integer é onde das o valor da percentagem.. por exemplo : Sub Teste() Dim PictureBox1 as new PictureBox PictureBox1.Location = new size(5,5) PictureBox1.Size= new size(100,5) Me.controls.add(PictureBox1) ll_PbPerc(PictureBox1, 55) As Integer End Sub Luis Lourenço
ribeiro55 Posted May 17, 2009 at 03:57 PM Report #264833 Posted May 17, 2009 at 03:57 PM Ainda que este tipo de coisinhas se devam fazer com um pouco mais de encapsulamento e portabilidade (um usercontrol por exemplo), permite-me sugerir algumas alterações entre as inúmeras que se podiam acrescentar: Private Function ll_PbPerc(ByVal pb As PictureBox, ByVal perc As Integer, Optional ByVal Grad As Boolean = True) As Integer perc = Math.Abs(perc) Mod 101 Dim xy As Size = pb.Size Dim xper As Integer = (perc / 100) * (xy.Width - 4) pb.SuspendLayout() Dim g As Graphics = pb.CreateGraphics g.Clear(Color.Black) Dim CentroVertical As Integer = CInt(pb.Height / 2) Dim CentroHorizontal As Integer = CInt(pb.Width / 2) If perc <> 0 Then Dim CorFinal As New Color Dim Vermelho As Integer = CInt((perc * 255) / 100) Dim Verde As Integer = 255 - Vermelho CorFinal = Color.FromArgb(Vermelho, Verde, 0) Dim PBRec As Rectangle = New Rectangle(0, 0, xper, xy.Height) Dim Gradiente As Drawing2D.LinearGradientBrush If Grad = True Then Gradiente = New Drawing2D.LinearGradientBrush(New PointF(0, CentroVertical), New PointF(PBRec.Width, CentroVertical), _ Color.Black, CorFinal) g.FillRectangle(Gradiente, PBRec) Else Gradiente = New Drawing2D.LinearGradientBrush(New PointF(0, CentroVertical), New PointF(PBRec.Width, CentroVertical), _ CorFinal, CorFinal) g.FillRectangle(Gradiente, PBRec) End If End If Dim Fonte As New Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Pixel, 0) Dim TamanhoStr As SizeF = g.MeasureString(perc & " %", Fonte) g.DrawString(perc & " %", Fonte, _ Brushes.White, CentroHorizontal - (TamanhoStr.Width / 2), CentroVertical - (TamanhoStr.Height / 2)) pb.ResumeLayout() End Function - Protecção contra valores percentuais fora do alcance 0-100 - Gradação automática de cor - Efeito gradiente opcional - Informação de percentagem centrada Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Weasel Posted May 18, 2009 at 08:12 AM Report #264995 Posted May 18, 2009 at 08:12 AM Eu uso Progress Bar que tens disponível no code project http://www.codeproject.com/KB/dotnet/CustomProgressBar.aspx http://www.codeproject.com/KB/vb/NeverEndingBar.aspx existem muitas outras, basta procurar... Knowledge to the masses
ribeiro55 Posted May 18, 2009 at 10:54 AM Report #265020 Posted May 18, 2009 at 10:54 AM Tem piada é construír as nossas próprias 😉 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Dotinho Posted May 21, 2009 at 09:52 AM Author Report #266071 Posted May 21, 2009 at 09:52 AM obrigado pelas ideias, muito interessante.. Luis Lourenço
Dotinho Posted May 21, 2009 at 10:28 AM Author Report #266084 Posted May 21, 2009 at 10:28 AM ribeiro55, da-me erro de memoria nestas linhas, como nunca usei este tipo de desenhos, nao sei muito bem com ocorrigir isto..alguma sugestão? If Grad = True Then Gradiente = New Drawing2D.LinearGradientBrush(New PointF(0, CentroVertical), New PointF(PBRec.Width, CentroVertical), _ Color.Black, CorFinal) g.FillRectangle(Gradiente, PBRec) Else Gradiente = New Drawing2D.LinearGradientBrush(New PointF(0, CentroVertical), New PointF(PBRec.Width, CentroVertical), _ CorFinal, CorFinal) g.FillRectangle(Gradiente, PBRec) End If cmps Luis Lourenço
ribeiro55 Posted May 21, 2009 at 11:33 AM Report #266100 Posted May 21, 2009 at 11:33 AM Erro de memória? Isso está testado. Testo sempre código antes de postar. :dontgetit: Não sei de cor se todas as classes são apenas FW2.0. Tens a 3.5 instalada? Já agora, mostra lá a descrição do erro. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
José Lopes Posted May 21, 2009 at 03:27 PM Report #266174 Posted May 21, 2009 at 03:27 PM loool, pelo uso.. ll_PbPerc(ByVal pb As PictureBox, ByVal perc As Integer) As Integer equando chamas a função, tens que declarar duas coias, pb As PictureBox, é onde declaras a picture box, depois perc As Integer é onde das o valor da percentagem.. por exemplo : Sub Teste() Dim PictureBox1 as new PictureBox PictureBox1.Location = new size(5,5) PictureBox1.Size= new size(100,5) Me.controls.add(PictureBox1) ll_PbPerc(PictureBox1, 55) As Integer End Sub Devo estar a ficar um bocadinho lerdo... Imagina que num ciclo, eu quero fazer progredir a barra conforme a execução de determinada tarefa... como posso fazer isso usando o código como o escreveste...fiquei curioso... crias uma nova picture box a cada iteração? como é? Obrigado Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
Dotinho Posted May 21, 2009 at 03:59 PM Author Report #266187 Posted May 21, 2009 at 03:59 PM nao lool, eu explico.. Por exemplo do design, desnhas a form como quiseres, ate podes por a picturBox no sitio que queres a progress bar (mas poes uma picurebox) no teu codigo, quando quiseres alterar a percentagem, apenas chamas a função.. olha, para percebers mesmo bem, em vez de pores Progressbar1.Value=55, passas a por ll_PbPerc(PictureBox1, 55) se sabes usar uma progress bar, assim tambem sabes usar a minha progressbar atravez de uma pictureBox, só tens que a por no sitio da progressbar.. é simples ==MODIFICADIO=== Ah, fazes copy paste do meu codigo ou do codigo alterado do ribeiro55, é uma função que chamas em vez de progressbar1.value, como te disse á pouco. Luis Lourenço
ribeiro55 Posted May 21, 2009 at 04:08 PM Report #266193 Posted May 21, 2009 at 04:08 PM A utilização está errada, sim. Mas não deixa de ser funcional... o método até funciona. Dentro do ciclo, chamas o método enviando referência a uma picturebox e a percentagem que queres mostrar. Novamente, não estou a dizer que é uma boa política... não o é. Mas funciona. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
José Lopes Posted May 21, 2009 at 04:09 PM Report #266194 Posted May 21, 2009 at 04:09 PM ok.... assim já estou esclarecido... eu e todos os utilizadores que podem ler o post! É que não me estava a parecer muito util.....no fundo no ciclo ficaria qualquer coisa como (nao testei,.. mas o principio deve ser este). for i = 0 to 10 ll_PbPerc(PictureBox1, i) next Já agora.. outro reparo..pk e que ambos puseram isso como function a retornar um integer, quando não fazem um return de nada um sub não resolvia o problema?... só por curiosidade... é que eu sou um tipo curioso. Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
ribeiro55 Posted May 21, 2009 at 04:11 PM Report #266196 Posted May 21, 2009 at 04:11 PM Porque é que é uma function, e porque raio devolve Integer, quando não devolve nada é que já me ultrapassa 😛 Limitei-me a agarrar no exemplo dele e aprimorá-lo um pouco. EDIT: Um sub não só resolvia o problema como deveria ser a solução. 😛 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
José Lopes Posted May 21, 2009 at 04:14 PM Report #266198 Posted May 21, 2009 at 04:14 PM yap..era precisamente ai que queria chegar... para além de ter percebido o modo de funcionamento à primeira...só que achei que devia ser esclarecido... Quando te pedirem peixe.... ensina-os a Pescar!!Hum..lálálálá!!
ribeiro55 Posted May 21, 2009 at 04:21 PM Report #266203 Posted May 21, 2009 at 04:21 PM Eu percebi que tu percebeste 😁 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips"
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now