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
ö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.
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,
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;
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;
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;
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;
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
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...