değeri bir artırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
notname
Üye
Mesajlar: 149
Kayıt: 11 Şub 2005 02:15

değeri bir artırma

Mesaj gönderen notname »

selam arkadaşlar

kafayı sıyırmak üzereyim nerdeyse bir türlü çıkamadım işin içinden o derece kolay olmasına rağmen :D

şu şekil bir image1 deki resmi kaydediyorum.

Kod: Tümünü seç

buttonclik;
var
i:integer;
begin
image1.picture.savetofile('deneme'+inttostr(i+1)+'.jpg');
end;
burada kaydetme işinde sorun yok ama ama hep aynı dosyanın üzerine yazıyo benim istediğim deneme1.jpg, deneme2.jpg gibi kaydetmesi kafayı sıyırcam bi el atın :)
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

önce i değişkenine bir değer ataman gerekiyor ve bu değeri bir yerde saklaman gerekiyor. Burda herhangi bir değeri olmadığı için devamlı aynı dosyaya kaydetmesi gayet normal. i nin en son değerini veri tabanında yada başka bir dosyada tutarak ordaki değere 1 eklemen lazım.

Kod: Tümünü seç

i:= Query1SonDeger.value
gibi.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
@husonet in daha önce yayınladığı Değer arttırma fonksiyonlarını kullanarak geliştirdiğim bir Enuygun dosya adını tespit etme fonksiyonum var,

@husonet in fonksiyonları;

Kod: Tümünü seç

function Numarator(no: String): String;
var
    Nmr, Temp, Temp1:String;
    Temp2:Char;
    i, Tmp:Integer;
Begin
    nmr := TersCevir(no);
    i:= 0;
    while i < length(no) Do
    Begin
        i := i + 1;
        if nmr[i] = '9' Then
        begin
            nmr[i] := '0';
            continue;
        End
        Else
        if (nmr[i] < '9') and (nmr[i] >= '0') Then
        Begin
            Temp := inttostr(StrToInt(nmr[i]) + 1);
            Tmp := i;
            Break;
        end;
        if nmr[i] = 'Z' Then
        begin
            nmr[i] := 'A';
            continue;
        End
        Else
        if (nmr[i] < 'Z') or (nmr[i] >= 'A') Then
        Begin
            Temp := inttostr(ord(nmr[i]));
            Temp := intToStr(StrToInt(Temp) + 1);
            Temp := Chr(StrToInt(Temp));
            Tmp := i;
            Break;
        end;
    End;
    i:= 0;
    while i < length(no) do
    Begin
        i := i + 1;
        if tmp = i Then
            if (temp[1] <= '9') and (temp[1] >= '0')  Then
                nmr[i] := temp[1]
            Else
            Begin
                nmr[i] := Temp[1];
            End;
        nmr[i] := nmr[i];
    End;

    result := TersCevir(nmr);
End;


function TersCevir(no: String): String;
var
    Cevrilen:String;
    i:Integer;
Begin
    i:= 0;
    Cevrilen := '';
    For i := length(no) DownTo 1 Do
    Begin
        Cevrilen := Cevrilen + no[i];
    End;
    Result := Cevrilen;
End;


bu fonksiyonları projene ekle ve sonrasında ,

Kod: Tümünü seç

function DosyaADiTespitEt(DA: String): String;
var
DName:String;
Konum:String;
Sonuc:String;
begin
    DName:=Copy(DA,1,Pos('.',DA)-1);
    if FileExists(DA) then DName:=Numarator(DName) else begin Result:=DA;Exit;end;
    Sonuc:=DName+ExtractFileExt(DA);
    Result:=DosyaADiTespitEt(Sonuc);
end;

fonksiyonunu ekle ,
Kullanımı

Kod: Tümünü seç

var
YeniDosyaAdi:String;
begin
YeniDosyaAdi:=DosyaAdiTespitEt('c:\test\dosya1.jpg');
{belirtilen klasörüde dosya varsa taki dosya bulamayana kadar değeri arttırarak yeni bir dosya adı bulur ve sadece dosya adını döndürür yani tam path i döndürmez.}
end;

iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Daha kestirme bir fonksiyon:

Kod: Tümünü seç

function MyGetNewFileName(const aFileNameWithoutExtension, aExtension: string): string;
var
  I: Integer;
begin
  I := 1;
  repeat
    Result := aFileNameWithoutExtension + IntToStr(I) + aExtension;
    if not FileExists(Result) then Exit;
    Inc(I);
  until 1 = 2;
end;

Kod: Tümünü seç

buttonclik; 
var 
i:integer; 
begin 
image1.picture.savetofile(MyGetNewFileName('deneme', '.jpg')); 
end; 
İyi çalışmalar.
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

i değişkeni kullandığın prosedure içinde tanımlı. Procedure'ü her çalıştırdığında yeniden oluşturuluyor, muhtemelen de 0(sıfır) değeri ile. Procedure bitince yok ediliyor.
Bundan kurtulmak için i değişkenini global bi değişken olarak tanımlarsan mesele kalmaz. Kodunda başka bir değişiklik yapmana gerek yok.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
notname
Üye
Mesajlar: 149
Kayıt: 11 Şub 2005 02:15

Mesaj gönderen notname »

saolun arkadaşlar işin komik kısmı en zor kısmını yaptım bu iki satırlık kodda takılmıştım :D herkese iyi çalışmalar
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

hdayi yazdı: Bundan kurtulmak için i değişkenini global bi değişken olarak tanımlarsan mesele kalmaz. Kodunda başka bir değişiklik yapmana gerek yok.
sanırım

Kod: Tümünü seç

image1.picture.savetofile('deneme'+inttostr(i+1)+'.jpg');
satırını

Kod: Tümünü seç

inc(i);
image1.picture.savetofile('deneme'+inttostr(i)+'.jpg');
şeklinde değiştirmeside gerekiyor
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

:oops: :oops: :oops:
Mesajı okurken bi yerlerde inc(i) görmüştüm, o yüzden dikkat etmemişim...
Pardon, pardon ... :)
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Mustafa_Ucar
Üye
Mesajlar: 63
Kayıt: 03 Ara 2005 07:31

Mesaj gönderen Mustafa_Ucar »

Arkadaşlar yapmayın etmeyin!!!
Son çözümlerde şöyle bir hata var; programı her açtığınızda 0'dan itibaren değer verecek ve eski resimlerin üzerine kaydedecek.
Soruyu soran arkadaşın dosyalarını kaybetmemesi için bu uyarıyı yapıyor ve ÖSS çalışmamdan ötürü kodları oluşturamayıp 2 tavsiyede bulunuyorum;

1- Her yeni dosya kaydında tüm dosya isimlerine bakıp, son kayıt numarasını bulur ve bir ekleyip kaydedebilirsin;

2- Programın ilk açılışında son kayıt numarasını bulur, i'yi global tanımlar ve bu değeri aktarabilirsin.

Ama ben olsam sırf bunun için bir dosya txt dosyası oluşturur ve her yeni kayıt eklediğimde içindeki değeri bir arttırırdım. Sanırım bunu yapmazsın ama en az uğraştıracak yol bu olur. Hele iyice tembelleşir bir memo koyup LoadFromFile ve SaveToFile kullanırsan...

Kolay gelsin
Cevapla