image1 deki resmi belirlene bir klasöre kopyalamak.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

image1 deki resmi belirlene bir klasöre kopyalamak.

Mesaj gönderen y.kulac »

s.a.

forma bir tane timer yerleştirdim. ekranın resmini alıp image1' e aktarıyorum.
kodu şöyle:

Kod: Tümünü seç

procedure TfrmAna.Timer1Timer(Sender: TObject);
var
  DCDesk: HDC;
begin    
  DCDesk:=GetWindowDC(GetDesktopWindow);
  BitBlt(image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,DCDesk, 0, 0,SRCCOPY);
  ReleaseDC(GetDesktopWindow, DCDesk);

  image1.Picture.SaveToFile('D:\deneme.jpg');

end;
buraya kadar her şey normal. ekranın 5 saniyede bir resmini image1 e aktarıp D sürücüsüne deneme.jpg olarak kaydediyorum.
ama resim 5 saniyede bir çekilip aynı isimle eskisinin üstüne kaydediliyor. benim yapmak istedeğim. her 5 saniyede bir resim kaydedilsin ama farklı adla şekilde kaydedilsin ve önceki kaydettiği aynen kalsın.
1. kayıt deneme1.jpg
2. kayıt deneme2.jpg.
3. kayıt deneme3.jpg
....
bu şekilde sürekli aktif olsun.
bunu nasıl yapabilirim.

bu programı yapmamın sebebi ben işteyken çocuklar bilgisayarda ne yapıyor. ona göre tedbir alacağım.

iyi çalışmalar dilerim.
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Hocam en basit olartak aklıma gelen bi döngü yazmak

Kod: Tümünü seç

procedure TfrmAna.Timer1Timer(Sender: TObject); 
var 
  DCDesk: HDC; 
  i:integer=1;//bu global değişken olmalı yoksa delphi hata veriyor
begin    
  DCDesk:=GetWindowDC(GetDesktopWindow); 
  BitBlt(image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,DCDesk, 0, 0,SRCCOPY); 
  ReleaseDC(GetDesktopWindow, DCDesk); 
 
 image1.Picture.SaveToFile('D:\deneme' +inttostr(i)+'.jpg'); 
 i:=i+1;

end; 
kolay gelsin.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Bu da aynı işi görür...

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
Const
{$j+} i : Integer = 0; {$j-}
var
  DCDesk: HDC;
begin
  DCDesk:=GetWindowDC(GetDesktopWindow);
  BitBlt(image1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,DCDesk, 0, 0,SRCCOPY);
  ReleaseDC(GetDesktopWindow, DCDesk);
  image1.Picture.SaveToFile('D:\deneme' +inttostr(i)+'.jpg');
  inc(i);
end;
Yalnız bir şey dikkatimi çekti, uzantısını siz JPG olarak belirtmişsiniz ama içerik BMP formatındadır haberiniz olsun.. :!: :idea:
Resim
Resim ....Resim
Erd_turkmen
Üye
Mesajlar: 38
Kayıt: 27 Ara 2006 03:13

Mesaj gönderen Erd_turkmen »

Hocam belki işinize yarar. Ben bu şekilde resim kaydediyorum. Aynı resim olunca kopyası olarak tekrar kopyalıyo. Onuda rename olarak şartın içine koyarak yapılabilir. Kolay gelsin

Kod: Tümünü seç

procedure Tfrmsiparis.Resimkaydet(Sender: TObject);
var
  OpStruc: TSHFileOpStruct;
  frombuf, tobuf: Array [0..128] of Char;

Begin
if  OpenDialog1.Execute then begin
  fillChar( OpStruc, Sizeof(OpStruc), 0 );
  FillChar( frombuf, Sizeof(frombuf), 0 );
  FillChar( tobuf, Sizeof(tobuf), 0 );
  StrPCopy( frombuf, OpenDialog1.FileName );
  StrPCopy( tobuf, 'Kopyalanacak Adres');
  With OpStruc DO Begin
    Wnd:= Handle;
    wFunc:= FO_COPY;
    pFrom:= @frombuf;
    pTo:=@tobuf;
    fFlags:= FOF_NOCONFIRMATION or FOF_RENAMEONCOLLISION;
  end;
  ShFileOperation( OpStruc );
end;
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

mrmarman

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
Const
{$j+} i : Integer = 0; {$j-}
hocam burdaki {$j+} işaretleri ne anlama geliyor.biraz açarmısınız
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Const biliyorsun sabitleri belirleyen blok bildirimidir.

- Sabit dendiğinde bunlar değiştirilemez/değer verilemez gibi bir bilgi vardır ama özel durumlar tanımlanarak bu aşılabilir. Yani direktif dediğimiz bu özel durumlar {} bloğunda $ ile başlayan kodlarla verilir. Diğerlerini "Delphi Help"inde detaylarını bulursun.

- {$J+} {$J-} bloğunu {$WRITEABLECONST ON} {$WRITEABLECONST OFF} bloğu olarak da kullabilirsin. Sadece uzunifadesi yazmak zor oluyor diye $j olanı tercih ettim.

- Varsayılanı biliyoruz ki {$J-}

// EK // Asıl espirisini yazmayı unutmuşum, edit yaptım.
- Timer ilk defa çalıştığında bu "değişken sabit" ilk değer olarak 0 alır ve değer ataması yapılabilir.

- Timer sonaki her çalışmasında ilk değer en azından bir kere verildiğinden, en son verilen değer hafızadan okunur ve o değer üzerinden işleme devam edilir. Yani Global değişken gibi işler ama global değildir.
Resim
Resim ....Resim
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Hocam affınıza sığınarak konuyu tam olarak idrak edemediğimden soruyorum:

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject); 
Const 
{$j+} i : Integer = 0; {$j-} 
diye yazmak bize sadece bu sabiti global değişken olarak tanımlamayamı yarar?
açıkcası

Kod: Tümünü seç

var
i:integer=0;
ile

Kod: Tümünü seç

Const 
{$j+} i : Integer = 0; {$j-} 
arasındaki fark nedir? ikiside aynı işi yapar mı?birinin global birinin local değişken olmasımı farkı?
Help'e baktım sadece Writeable typed constants bu başlık altında kısa bi açıklama yapmış.
teşekkür ederim.
Kullanıcı avatarı
y.kulac
Üye
Mesajlar: 276
Kayıt: 08 Kas 2003 12:03
Konum: serdivan/sakarya

Mesaj gönderen y.kulac »

teşekkür ederim.
önerileriniz işimi gördü.
gerçektende resimleri bmp kaydediyormuş. uzantı vermek bir şeyi değiştirmiyor. bu şekilde bir resmin boyutu 2,5 mb civarında.
şimdi burada yapmam gereken, resimler kaydedilmeden önce jpg ye çevirmek. ben bu konuyu araştırayım.
iyi çalışmalar dilerim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@kahraman1285

- Hayır, global bir değişkenin görevlerinden birisi, aynı ve/veya bağlantılı unit'ler içerisinde tanınmak, diğer bir görevi ise son aldığı değeri program sonlanana kadar korumaktır.

- Buradaki direktif global değişkenin ikinci işlevini kazanıyor. Yani proje sonlanana kadar son aldığı değeri korumak. Biliyorsun VAR ile tanımlanan normal bir değişken her seferinde hafızanın o bölgesindeki rastgele bir değerle yola başlar.
Resim
Resim ....Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

mrmarman yazdı:Const biliyorsun sabitleri belirleyen blok bildirimidir.

- Sabit dendiğinde bunlar değiştirilemez/değer verilemez gibi bir bilgi vardır ama özel durumlar tanımlanarak bu aşılabilir. Yani direktif dediğimiz bu özel durumlar {} bloğunda $ ile başlayan kodlarla verilir. Diğerlerini "Delphi Help"inde detaylarını bulursun.

- {$J+} {$J-} bloğunu {$WRITEABLECONST ON} {$WRITEABLECONST OFF} bloğu olarak da kullabilirsin. Sadece uzunifadesi yazmak zor oluyor diye $j olanı tercih ettim.

- Varsayılanı biliyoruz ki {$J-}

// EK // Asıl espirisini yazmayı unutmuşum, edit yaptım.
- Timer ilk defa çalıştığında bu "değişken sabit" ilk değer olarak 0 alır ve değer ataması yapılabilir.

- Timer sonaki her çalışmasında ilk değer en azından bir kere verildiğinden, en son verilen değer hafızadan okunur ve o değer üzerinden işleme devam edilir. Yani Global değişken gibi işler ama global değildir.
Bir yaşıma daha girdim. Çok faydalı bir özellikmiş bu fakat ben bilmiyordum. Elinize sağlık diyeyim daha ne diyebilirim ki.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla