FileListBox elem tovább léptetése gond... (Delphi)
2014-06-28T20:09:36+02:00
2014-06-29T10:57:09+02:00
2022-08-08T22:50:34+02:00
Huncutka
Jó napokat kívánok mindenkinek!

A következő lenne a gondom. Van egy FileListBox-om. A miben csak jpg fájlok vannak. Egyesével, ha ráklikkelek a fájlra, akkor áttudom nevezni a fájlt. Feltéve, ha a RadioButton1 Checkedje igazra van állítva. Viszont, ha a RadioButton2 van igazra állítva, akkor minden fájlt átnevezne ami a FileListBoxban van és itt a gond. Méghozzá az, hogy csak az első elemet nevezi át. Így a kód részlet.

if RadioButton2.Checked = True then begin try for i := 0 to FileListBox1.Items.Count - 1 do begin if i < 9 then begin Edit1.Text := FileListBox1.FileName; fullFileName := Edit1.Text; FAge := FileAge(Edit1.Text); FileParam := FileDateToDateTime(FAge); RenameFile(FileListBox1.Items.Strings[i], DateToStr(FileParam) + ' ' + Edit2.Text + '00000' + IntToStr(i)+ '.jpg'); end; if (i > 9) and (i < 99) then begin Edit1.Text := FileListBox1.FileName; fullFileName := Edit1.Text; FAge := FileAge(Edit1.Text); FileParam := FileDateToDateTime(FAge); RenameFile(FileListBox1.Items.Strings[i], DateToStr(FileParam) + ' ' + Edit2.Text + '0000' + IntToStr(i)+ '.jpg'); end; if (i > 99) and (i < 999) then begin Edit1.Text := FileListBox1.FileName; fullFileName := Edit1.Text; FAge := FileAge(Edit1.Text); FileParam := FileDateToDateTime(FAge); RenameFile(FileListBox1.Items.Strings[i], DateToStr(FileParam) + ' ' + Edit2.Text + '000' + IntToStr(i)+ '.jpg'); end; FileListBox1.Update; end; except end; end; FileListBox1.Update;

Azt szeretném elérni, hogy minden FileListBox elemet átnevezze egy gombnyomásra a gép, ha a radiobutton2.checked -je true -ra van állítva.
Előre is köszönöm a segítséget.

Üdv

Huncutka
Mutasd a teljes hozzászólást!
Mindegyik FileParam a FileListBox1.FileName-ból származik. Edit1.Text := FileListBox1.FileName;
helyett

Edit1.Text := FileListBox1.Items.Strings[i]; A rename második paraméterének használd a
Format('%s %s%.6d.jpg', [DateToStr(FileParam), Edit2.text, i])

és így kihagyhatod az egész i értéktartomány vizsgálatot.

Debuggolást nem csak hibaüzenet esetén használhatsz, hanem akkor is ha a program nem a kivánságaid szerint müködik.
Tegyél egy töréspontot a for i := 0 ... sorra, F8-al léptess soronként, és közben figyeld a változók értékét!  Így láthatod, hogy hol viselkedik a programod máshogy mint az elvárod.
Mutasd a teljes hozzászólást!

  • Sose kódoltam még delphiben, de debug mit mond? Merre jár a kódod? Van-e hibaüzenet logban? A FileListBox1.Item.Count értéke mennyi?
    Mutasd a teljes hozzászólást!
  • Amikor debuggolsz, akkor az i = 9, i = 99 valamint az i > 999 eseteket is ellenörizd.
    A format utasítás is egyszerüsítheti az életed.
    Mutasd a teljes hozzászólást!
  • .... var szam : string; .... szam := IntToStr(i); while Length(szam) < 6 do szam := '0' + szam; RenameFile(FileListBox1.Items.Strings[i], DateToStr(FileParam) + ' ' + Edit2.Text + szam + '.jpg');
    A sok if-et elkerülendő.
    Mutasd a teljes hozzászólást!
  • Hello

    Nincs hibaüzi, mert a kód lefut "rendesen". Csak nem az a végeredmény amit szeretnék. A dátumot csak az elsőnél veszi figyelembe, a fájlokhoz hozzáadott számnál meg csak az utolsót. Tehát lesz egy darab átnevezésem. Az első FileListBox elem dátumával és az utolsó elem sorszámával. Próbaképp beraktam egy Timerbe az átnevezéses kódrészletet. Látom, hogy a fájl számozást rendesen végrehajtja, de a dátum lekérdezést csak az első FileListBox elemnél hajlandó megtenni.

    Üdv
    Huncutka
    Mutasd a teljes hozzászólást!
  • Hello


    Ezzel a részel nincs gond. Nincs hibaüzi és ha átírom, hogy kattintással készítse el nekem az átnevezést, akkor megcsinálja a gép. Csak amikor azt szeretném elérni, hogy minden elemet nevezzen át, azt nem hajlandő nekem végre hajtani.

    Üdv
    Huncutka
    Mutasd a teljes hozzászólást!
  • Edit1.Text := FileListBox1.Items.Strings[i];
    Mutasd a teljes hozzászólást!
  • Mindegyik FileParam a FileListBox1.FileName-ból származik. Edit1.Text := FileListBox1.FileName;
    helyett

    Edit1.Text := FileListBox1.Items.Strings[i]; A rename második paraméterének használd a
    Format('%s %s%.6d.jpg', [DateToStr(FileParam), Edit2.text, i])

    és így kihagyhatod az egész i értéktartomány vizsgálatot.

    Debuggolást nem csak hibaüzenet esetén használhatsz, hanem akkor is ha a program nem a kivánságaid szerint müködik.
    Tegyél egy töréspontot a for i := 0 ... sorra, F8-al léptess soronként, és közben figyeld a változók értékét!  Így láthatod, hogy hol viselkedik a programod máshogy mint az elvárod.
    Mutasd a teljes hozzászólást!
  • Hello


    Csak összehoztuk  

    Edit1.Text := FileListBox1.FileName; Tényleg jó ötlet volt. A For ciklust megtartottam, mert nélküle csak az elsőt elemet volt hajlandó átnevezni a kis dög gép. Az if -feket is kitudtam iktatni. ...hogy ez miért nem jutott eszembe... Mondjuk az ellenőrzés sem ugrott be, pedig tanultuk. Ennyit számít a rutin. Hiába tanulja az ember, ha nem használja, elhomályosodnak a tanultak. A format részt nem használtam. Íme a helyes kód részlet: if RadioButton2.Checked = True then begin try for i := 0 to FileListBox1.Items.Count - 1 do begin Edit1.Text := FileListBox1.Items.Strings; fullFileName := Edit1.Text; FAge := FileAge(Edit1.Text); FileParam := FileDateToDateTime(FAge); szam := IntToStr(i); while Length(szam) < 6 do szam := '0' + szam; RenameFile(FileListBox1.Items.Strings, DateToStr(FileParam) + ' ' + Edit2.Text + szam + '.jpg'); end; FileListBox1.Update; except end; end; FileListBox1.Update;
    Köszönöm Mindenkinek! Nagy segítség volt ez Mindenki Részéről!!!
    Mutasd a teljes hozzászólást!
  • Edit1.Text := FileListBox1.Items.Strings; helyett Edit1.Text := FileListBox1.Items.Strings[i]; Csak sikerült elrontanod :) és az átnevezésnél is.
    Mutasd a teljes hozzászólást!
abcd