Panel bileşenini resim olarak kaydetmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Panel bileşenini resim olarak kaydetmek

Mesaj gönderen Query »

Arkadaşlar Slm;

Panel i resim olarak kaydedebilirmiyiz.

Arama yaptım ekranda belirli bir alanı resim olarak alabiliyorum fakat Panelin boyutları ekran sınırları içinde olmayabilir.

Kod: Tümünü seç

Panel1.Brush.Bitmap.SaveToFile('ss.bmp')
diye bişi buldum ama o da hata veriyor.

İyi Çalışmalar
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Bunun için TBitMap Objesinden bir nesne oluştur (BMP:=TBitMap.Create) Panel in genişliğini ve yüksekliğini alarak Bmp nesnemize ata. Sonra BitBlt apisini kullanarak Create ettiğimiz Bmp nesnesine coordinatları vererek Panel imizin resmini çekelim. Ardından da Bmp.SaveToFile diyerek kaydet.

Biraz uğraş yapamazsan kodunu yazarım çok basit seni zorlayacağını sanmıyorum.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

Hüseyin Hocam teşekkürler. Cevabını referans alarak (BitBlp) biraz araştırdım sonucda bu şekle getirdim

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  hh, hdev : hdc;
  bm : hbitmap;
  a, h, w : integer;
begin
  hh := CreateCompatibleDC(GetDC(handle));
  bm := CreateCompatibleBitmap(GetDC(handle), Panel2.Width, Panel2.Height);
  SelectObject(hh,bm);
  hdev:=GetWindowDC(Panel2.Handle); 
  BitBlt(image3.Canvas.Handle, 0, 0, Panel2.Width, Panel2.Height, hdev, Panel2.Left, Panel2.Top, SRCCOPY);
  image3.Picture.SaveToFile('c:\deneme.bmp');
end;
Fakat burda yine ekran görüntüsünü alıyor. :(

Benim istediğim Panel bileşeninin formdan taşması durumunda ki programımda taşıyor, yani görünmeyen kısmınıda almak istiyorum.

Kod: Tümünü seç

hdev:=GetWindowDC(Panel2.Handle); 
sanırım burda bi sorun olabilir GetWindowDC direk windows ekranının mı görüntüsünü alıyor acaba :roll:

İlgine çok teşekkür ederim.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Merhaba bu konuyu aşağı yukarı anlamış olarak kabul edecem seni.

BitBlt fonksiyonu o an ekranda gözüken objelerin fotosunu çeker.

Aşağıdaki kodumuz biraz daha sade ve anlaşılır.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var BMP: TBitMap;

begin
    BMP:=TBitMap.Create;
    try
        BMP.Width:=Round(Panel1.Width);
        BMP.Height:=Round(Panel1.Height);
        BitBlt(bmp.Canvas.Handle,0,0,Panel1.Width,Panel1.Height,GetWindowDc(Panel1.Handle),0,0,SRCCOPY);
        BMP.SaveToFile('HusoPanel.bmp');
    finally
        BMP.Free;
    end;
end;
Görünmeyen kısımları almak içinde Form un Scroll Bar ından yararlanabilirsin. (İpucu :idea: buna benzer örnek bir kodumuz forumda olacaktı )

Kod: Tümünü seç

HorzScrollBar.Position := Form1.Width;
Biraz ilizyon gerekebilir. ;)

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

Sonucda iki parça halinde alıp birleştireceğiz. :)

İlgine çok teşekür ederim.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Artık ilizyon kısmı sana kalmış :) neticeyi bekliyorum ;)

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

Raize setindeki panel bileşeninin canvas özelliği var. Gerçi istediğim gibi görünmeyen kısmı alamıyorum :( ama en azından satırları azaltıyo ... :)

Kod: Tümünü seç

  image1.Canvas.CopyRect(Rect(0,0,RzPanel1.Width,RzPanel1.Height), RzPanel1.Canvas, Rect(0,0,image1.Width,image1.Height));
  image1.Picture.SaveToFile('c:\deneme.bmp');
bu kullanımın diğerine göre dezavantajları var mı sizce?
Cevapla