Arşiv

Kategoriler

Ne Dinliyorum...

asdad


Visual Basic kurulduğu zaman “Microsoft Windows Common Controls” bileşeni içerisinde progressbar  gelmektedir fakat bu eleman içerisine herhangi bir yazı yazamazsınız yazılsada çok uğraştırır delirtir falan filan :) scrooling değişkenini smoth yaparsanız işlemciden çok yer, sevememiştim bir türlü bu nesneyi … Bende bunu düşünerekten son değiştirme tarihi 12 şubat 2005 olan projeyi yapmışım. uzun zaman geçmiş üstünden.  programlama.com‘da yayımlandıydı :)

Eskiden oyunlar falan kurulurken (hala öyledir belki) progressbar nesnesinin içinde işlemin yüzdesi yazardı, işlem %50 civarına geldiğinde “%xx”  yazısının hereketli çubuğa değen kısmının rengi değişirdi projeyi yapmış olmamdaki diğer etkende budur. :)

İşin mantığı nasıl peki; iç içe konulmuş 2 tane resim kutusu var.  Bunlardan biri sabit diğeri hareketli aslında olay bundan ibaret, hareketli resim kutusunun “width” değeriyle oynuyorsunuz. yazı içinde resimkutusu nesnesinin print özeelliğini kullanmışım  İşlemin gerisi detay…

Kullanımı kolay olsun diye fonksiyon haline getirmiştim kodu; kullanımı Microsoft Windows Common Controls içindeki progressbar ile aynı hemen hemen.

İşlemBar(Çubuk As PictureBox, HareketliÇubuk As PictureBox, YazıHiza As AlignmentConstants, Yazi As String, MaxDeğer, Değer)

çubuk; sabit duracak olan resim kutusu

HareketliÇubu: sabit duracak olan resim kutusu içerisine çizilmiş olan hareketli kısım

YazıHiza: yazının nereye dayalı olacağı

Yazi: işlem çubuğu içine yazılacak olan mesaj

MaxDeğer: işlemin sonunda ulaşılacak en büyük değer. Yüzdelik dilimde gösteriyorsak işlemi 100 yazmak gerekir.

Deger: işlenim o anki değeri.

kodları inceleyerek daha kolay anlaşılır umarım.

Ekran Görüntüsü:

Programın Kodları;

‘Buradan itibaren kopyalıyabilirsiniz…
‘prepare by Shama hasansama@yahoo.com
‘Form üzerine
‘bir adet commandbutton
‘iki adet picturebox (İkinci Picturebox’ı birinci Picturebox içerisine çizerseniz daha kullanışlı olur)

Dim atla As Boolean
Private Sub İşlemBar(Çubuk As PictureBox, HareketliÇubuk As PictureBox, YazıHiza As AlignmentConstants, Yazi As String, MaxDeğer, Değer)
Dim yukarıort

If atla = True Then GoTo ileri

HareketliÇubuk.Align = 1

If HareketliÇubuk.Left = 0 And HareketliÇubuk.Top = 0 Then
HareketliÇubuk.Align = 0
Çubuk.ZOrder 1
HareketliÇubuk.Left = Çubuk.Left + 30
HareketliÇubuk.Top = Çubuk.Top + 25
HareketliÇubuk.Height = Çubuk.Height – 50
HareketliÇubuk.Width = 0
Else
HareketliÇubuk.Left = 0
HareketliÇubuk.Top = 1
HareketliÇubuk.Width = 0
HareketliÇubuk.Height = Çubuk.Height
End If

If Not HareketliÇubuk.BorderStyle = 0 Then
HareketliÇubuk.BorderStyle = 0
End If
If Not HareketliÇubuk.ForeColor = vbWhite Then
HareketliÇubuk.ForeColor = vbWhite
End If
If Not Çubuk.ForeColor = vbBlack Then
Çubuk.ForeColor = vbBlack
End If

HareketliÇubuk.AutoRedraw = True
Çubuk.AutoRedraw = True

‘Renkleri Buradan Değiştirebilirsiniz…
HareketliÇubuk.BackColor = vbHighlight
Çubuk.BackColor = vbButtonFace

Çubuk.ScaleMode = 1
HareketliÇubuk.ScaleMode = 1
ileri:

Çubuk.Cls
HareketliÇubuk.Cls

If Çubuk.BorderStyle = 1 Then
yukarıort = (Çubuk.Height – Çubuk.TextHeight(Yazi) – 60) / 2
Else
yukarıort = (Çubuk.Height – Çubuk.TextHeight(Yazi)) / 2
End If

If YazıHiza = 0 Then ‘Sola Dayalı
Çubuk.CurrentX = 0
Çubuk.CurrentY = yukarıort
HareketliÇubuk.CurrentX = 0
HareketliÇubuk.CurrentY = yukarıort
End If

If YazıHiza = 1 Then ‘Sağa Dayalı
Çubuk.CurrentX = Çubuk.Width – Çubuk.TextWidth(Yazi) – 90
Çubuk.CurrentY = yukarıort
HareketliÇubuk.CurrentX = Çubuk.Width – Çubuk.TextWidth(Yazi) – 90
HareketliÇubuk.CurrentY = yukarıort
End If

If YazıHiza = 2 Then ‘Ortada
Çubuk.CurrentX = (Çubuk.Width / 2) – (Çubuk.TextWidth(Yazi) / 2)
Çubuk.CurrentY = yukarıort
HareketliÇubuk.CurrentX = (Çubuk.Width / 2) – (Çubuk.TextWidth(Yazi) / 2)
HareketliÇubuk.CurrentY = yukarıort
End If

If HareketliÇubuk.Width >= (Çubuk.Width – 60) Then GoTo ileri2
HareketliÇubuk.Width = (Değer * Çubuk.Width) / MaxDeğer
ileri2:
HareketliÇubuk.Print Yazi
Çubuk.Print Yazi
atla = True
DoEvents
End Sub

‘Modül Burada sona erdi. olay command1_click altında.  kullanıma örnek olsun diye for döngüsünü kullanmışım.

Private Sub Command1_Click()
Dim yüzde As String
Picture1.Height = 255
Command1.Enabled = False
atla = False
For i = 1 To 100 Step 0.1
yüzde = (100 * Picture2.Width) / Picture1.Width + 1
If i = 100 Then yüzde = “100″
İşlemBar Picture1, Picture2, vbCenter, Int(yüzde) & “%  prepare by Shama  hasansama@yahoo.com”, 100, i
Next
Command1.Enabled = True
End Sub

Private Sub Form_Load()
With Picture1
.Left = 0
.Top = 120
.Width = 6495
.Height = 255
End With
Picture2.Width = 0
With Form1
.Height = 1740
.Width = 6630
.Caption = “ProgressBar Örneği”
End With
With Command1
.Caption = “Başla”
.Left = 120
.Top = 500
End With
End Sub

Ayrıca;

Programın VB Proje Dosyası

Programın derlenmiş(exe) hali


“Visual Basic’te ProgressBar (İşlemÇubuğu) Yapımı” için 5 Yanıt

  1. 1 Tolga

    Benim aslında çok isteyip de yapamadığım bir sorun var. Sorun da şu ? Ben progress bar ‘ı programa entegrelemek istiyorum.. Yani mesela geçişleri açılışları.. Yani program yavaş açılırsa yavaş olsun hızlı olursa hızlı dolsun.. Bide sorum şu yeri değil ama ? Timer kullandığım form ‘da çalıştırdığım anda diğer fonksiyonlar çalışmıyor sanki donuyor gibi yani o geri sayım yaparken geri dön mesela yapamıyorum onu mesela nasıl yapabilrim ? cevaplarsanız sevinirim..

  2. 2 hasansama

    progress bar’ı programa entegre edebilmek için programınızın kodunu progress bar için uyarlamanız gerekmetedir. o kısmı programınızın kodlarını görmeden açıklamam zor. şu şekilde örneklendirebiliriz; diyelim program içerisinde 5 modül, 1 veri tabanı, vs.. bileşenler var. programınıza öncelikle yükleme ekranı (splash screen) hazırlamanız gerekmektedir. bunun içerisine for….next & do….loop döngüleri kullanarak bileşenlerin yüklenip yüklenmediğini kontrol ederek progrogressbar’lı bir yükleme ekranı yapabilirsiniz. örneğin programınıza 10 bileşen yüklenecek progrosressbar max:100 olsun. her bişelen yüklendiğinde progrogressbar değeri  olacak…. yukarıdaki işlem çubuğunu kullmak istersen “Command1_Click()” fonksiyonu içindeki
    “For i = 1 To 100 Step 0.1
    yüzde = (100 * Picture2.Width) / Picture1.Width 1
    If i = 100 Then yüzde = “100″
    İşlemBar Picture1, Picture2, vbCenter, Int(yüzde) & “% her hangibir yazı”, 100, i
    Next”
    kodu bu işi yapıyor. normal progressbar mantığıyla bunu kullanabilirsin.

    2. sorun nedeni şöyle olabilir; timer nesnesinin fonksiyonu içerisinde muhtemelen sonsuz döngü oluşuyor. do…loop döngüsü durdurulmadığında programı dondurur genelde. bunu önlemek için do…doevents…loop yazarsanız sorun kalmayacaktır büyük ihtimalle. doevents komutu döngüyü yavaşlatacatır.

  3. 3 KIZILTEPE

    paylaşım için tşkler

  4. 4 NahkoGameHacking

    Güzel paylaşım bunu arıyordum teşekkürler.

  5. 5 Sait

    Cok Guzel Tam Aradıgım Gibi Ama Ben VB Anlamıyorum Ancak Bu Yapmış Oldugunuz Projeyı Kendıme Göre Ayarlamak Istedım Ama Yapamadım… mail Adresim Burada var Eğer Bana Yardımcı Olamak Istersenız Lutfen İletişime Geçelim.
    Ama Ben Bura İstegimi Yazım:

    başla butonunun yerine klavyeden herhangi bir tuşla programın active olmasını ıstıyorum yanı örnegin f3 fonksiyonuyla başlatılacak ve 130 sn sonra bitecek ve mana msgbox tan haber vercek. sn ayarını ben yapıyorum msgbox da var zaten ancak başla butonu yerine f3 tuşu yada başka bir tuş ile active olmasını ıstıyorum bu konuda bana yardımcı olursanız sevinirim ….

Yorum Yaz