Resim kullanan Progress Bar yapımında sorun...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
YeniCevizci
Üye
Mesajlar: 35
Kayıt: 24 Tem 2004 09:49

Resim kullanan Progress Bar yapımında sorun...

Mesaj gönderen YeniCevizci »

Merhaba arkadaşlar.

Hazırladığım program açılırken bir progress bar göstermek istiyorum. Açılması uzun sürüyor (süreceğini tahmin ediyorum). Ancak standart progress barları kullanamam, çünkü yapmak istediğim progress bar şöyle birşey: Zeminde bir boş progress bar "resmi" var, ilerleme oldukça dolu progress bar "resmi" üzerine çiziliyor. Böylece progress bar ilerliyormuş gibi gözüküyor.

Bunu bir bileşen olarak hazırlamak "istemediğimi" de özellikle belirtmeliyim.

Aşağıdaki gibi bir deneme yaptım ancak sorun çıktı. Dolu progress bar resmini çizerken renkler doğru gözükmüyor. Sanki yeni resmi çizerken önceki resmin renk paletini kullanıyor ya da yarı-transparan bir şekilde çiziyor gibi. Bu sorunun renkleri aynı resimler kullanıldığında gözükmediğini de ekleyeyim. (Bu da önceki resmin renk paletininin kullanıldığı izlenimi bıraktı bende ama, bu nasıl olur bilemiyorum, yani hiçbir fikrim yok, biraz acemiyim de)

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if (i<300) then // resimlerin boyutu 300x34 piksel
  begin
  i:=i+1;
  image1.Canvas.CopyRect(rect(0,0,i,34),image2.canvas,rect(0,0,i,34));
  end;
end;
Bu yöntem bu iş için doğru yöntem mi? Ne gibi değişiklikler yapmalıyım? Belirttiğim sorunu nasıl çözebilirim?

Cevaplarınız için şimdiden teşekkürler.
bukentay
Üye
Mesajlar: 44
Kayıt: 16 Şub 2004 07:21

Mesaj gönderen bukentay »

canvasla, paletle ugrasmak istemiyorsaniz,
progressbarin olmasini istediginiz yere bir panel koyun ,eni-boyu koyacaginiz resimle ayni olsun.icine istediginiz resmi koyun.onunda ustune bir panel daha koyun.2.panelinde eni-boyu ayni olsun.her iki panelinde inner ve outher beveli bvnone olsun.
sonra saatle birlikte en ustteki paneli kaydirin.

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Panel2.Left:=Panel2.Left+1;
end;
YeniCevizci
Üye
Mesajlar: 35
Kayıt: 24 Tem 2004 09:49

Mesaj gönderen YeniCevizci »

Cevabınız için teşekkürler. Paneller ile progress bar yapma fikriniz hoş, ancak resim kullanmak zorundayım.

Aslında bir gelişme kaydettim, resimleri önceden, tasarım anında image bileşenine yerleştirmeyip program açılışında üzerine çizersem (image1.Canvas.CopyRect(rect(0,0,300,34),image3.canvas,rect(0,0,300,34));) sorun olmuyor.

Ancak yine de resim kullanarak progress bar yapımında bu kodları kullanmak mantıklı mıdır, başka neler yapılabilir gibi konularda görüşlerinizi bekliyorum.

Teşekkürler.
bukentay
Üye
Mesajlar: 44
Kayıt: 16 Şub 2004 07:21

Mesaj gönderen bukentay »

bu yontemlede resim kullaniyorsunuz ?
ve eger formunuz MDIMain Form degilse pek bi sakincasida yok.
program acildikdan sonra panel1'i invisible yaparsiniz.
gerci bu ideal yolmu diye sorarsaniz, tabiki degil.
ama benim bildigim en kisa yol.:)
YeniCevizci yazdı:Cevabınız için teşekkürler. Paneller ile progress bar yapma fikriniz hoş, ancak resim kullanmak zorundayım.

Aslında bir gelişme kaydettim, resimleri önceden, tasarım anında image bileşenine yerleştirmeyip program açılışında üzerine çizersem (image1.Canvas.CopyRect(rect(0,0,300,34),image3.canvas,rect(0,0,300,34));) sorun olmuyor.

Ancak yine de resim kullanarak progress bar yapımında bu kodları kullanmak mantıklı mıdır, başka neler yapılabilir gibi konularda görüşlerinizi bekliyorum.

Teşekkürler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@YeniCevizci

Merhaba...

- Tahminim o ki iki farklı Pixel Formatındaki resmi bir araya getirmek üzere bir çalışma yapmışsınız. Yeni resmin kendi paletinde gelmemesi bunun sinyalini veriyor.

- Bu işlem için ikinci resminizin formatı neyse birincisini de ona uydurmak ya da tersini yapmak zorundasınız. Aksi halde @bukentay'ın önerdiği şekilde Layer (katman) metodu uygulamak zorunda kalırsınız.

- FormCreate olayında şu iki satırı ekleyin... Her iki resim formatı da görünür bozulma olmadan ortak paydada buluşacaktır.

Kod: Tümünü seç

  Image1.Picture.Bitmap.PixelFormat := pf4bit;
  Image2.Picture.Bitmap.PixelFormat := pf4bit;
- Sanıyorum çözüm sunacaktır... :idea:

Çalışmalarınızda başarılar...
Resim
Resim ....Resim
YeniCevizci
Üye
Mesajlar: 35
Kayıt: 24 Tem 2004 09:49

Mesaj gönderen YeniCevizci »

bukentay, mesajınızı eksik okumuşum, kusura bakmayın. :oops: Çok teşekkürler.

mrmcop, çok teşekkür ederim. Çalışma "iki farklı Pixel Formatındaki resmi bir araya getirmek" üzerine değildi ama, resimler öyleymiş herhalde. :)
Cevapla