Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с построением цикла [D7]


Страницы:   1 2 3

Avpsol ©   (2011-09-25 19:31:00) 

Здравствуйте, у меня проблема с реализацией выборочного сохранения.У меня есть папка(c:\image) в которой имеются изображения в формате tiff они там создаются под номером 1,2,3,4.tif и т.д в каждом файле по одному изображению.Мне нужно по нажатию кнопки взять первые два изображения(лицевую и обратную сторону),соединить их в один файл(multipage) и сохранить в папке(c:\Форма),потом удалить исходные две картинки,и при повторном нажатии на кнопку взять опять первые два файла и сделать тоже самое.С первыми двумя у меня получается(кроме выборочного удаления) а вот со следующими нет он ведь ищет файлы с номером 1,2.tif а они уже 3,4.tif.Нужно как то организовать цикл в цикле все перепробовал не работает.Может кто-нибудь видит где в коде ошибка.Заранее спасибо за помощь.
begin
   if TWAIN_BeginMultipageFile('c:\Форма1П\file.tif')=0 then
  begin
   begin
    j:=1;
    f:=2;
        end;
         for i := j to f do
     begin
       StrFmt(pagefile, 'c:\image\%d.tif', [i]);
        hdib := TWAIN_LoadNativeFromFilename(pagefile);
        if hdib<>0 then
        begin
           TWAIN_DibWritePage(hdib);
           DIB_Free(hdib);
        end;
        if j=j+1 then
        begin
        j:=j+1;
        f:=f+2;
        end;
           if TWAIN_LastErrorCode()<>0 then
           break;
           end;
  end;
           TWAIN_EndMultipageFile()
  end;
  begin
     RenameFile('c:\Форма1П\Выходные данные\file.tif','c:\Форма1П\Выходные данные\' + edt1.text + edt2.text + '.tif');
  if TWAIN_LastErrorCode()<>0 then
     TWAIN_ReportLastError('Невозможно соединить файлы.')
     end;
     end;

//MyRemoveDir('c:\image');


Avpsol   (2011-09-26 19:00:00) [21]

Он должен делать то что написал QAZ.единственно вот так
c:\image\1.tiff+c:\image\2.tiff:=c:\Форма\file.tiff
c:\image\3.tiff+c:\image\4.tiff:=c:\Форма\file.tiff
c:\image\5.tiff+c:\image\6.tiff:=c:\Форма\file.tiff
он каждый multipage файл комбинирует и переименовывает на то что я пишу в эдитах(серийный номер+код):
RenameFile('c:\Форма1П\file.tif','c:\Форма1П\' + edt1.text + edt2.text + '.tif');
Комбинирование и переименовывание файлов он у меня прекрасно делает, но только первые два(1.tif и 2.tif) а мне нужно чтоб после этого он удалил эти первые два,и после повторного нажатия кнопки он взялся комбинировать и преименовывать следующие(3.tif и 4.tif),и потом опять следующие(5.tif и 6.tif) и т.д.Циклично.Компрендо?


sniknik   (2011-09-26 14:52:00) [22]

> вы чо читать разучились?
словами одно, по коду другое.
помощь может быть только по коду, по описанному это уже ТЗ, тут оплата не указана.


QAZ   (2011-09-26 14:44:00) [23]

ему надо:
c:\image\1.tiff+c:\image\2.tiff:=c:\Форма\1.tiff
c:\image\3.tiff+c:\image\4.tiff:=c:\Форма\2.tiff
c:\image\5.tiff+c:\image\6.tiff:=c:\Форма\3.tiff
...
вы чо читать разучились?


sniknik   (2011-09-26 14:32:00) [24]

имхо, но "дело было не в бобине"... т.е. циклы тут совсем ни причем.

покажи без циклов код для к примеру 4х файлов, с явными названиями/путями и комментариями, что ты от написанного ожидаешь...


sniknik   (2011-09-26 14:28:00) [25]

> Так что ли ?
+ еще уточнить.
вся система попросту удаляет первый файл, и переписывает (со всякими сложностями) второй... ну судя по коду TWAIN_ LoadNativeFromFilename  вместо ожидаемого (???) TWAIN_ AddNativeFromFilename.
так?


Сергей М.   (2011-09-26 14:21:00) [26]

т.е. в рез-те нажатия кнопки все файлы из директории c:\image должны исчезнуть, а в директории c:\Форма1П должны появиться файлы в кол-ве в два раза меньшем чем кол-во файлов в c:\image донажатия кнопки ? Так что ли ?


avpsol   (2011-09-26 13:50:00) [27]

Но ТВАЙН работает по циклу
begin
   if TWAIN_BeginMultipageFile('c:\Форма1П\file.tif')=0 then
  begin
   begin
    j:=1;
    f:=2;
        end;
         for i := j to f do
     begin
       StrFmt(pagefile, 'c:\image\%d.tif', [i]);
        hdib := TWAIN_LoadNativeFromFilename(pagefile);
        if hdib<>0 then
        begin
           TWAIN_DibWritePage(hdib);
           DIB_Free(hdib);
        end;
       if TWAIN_LastErrorCode()<>0 then
           break;
           end;
  end;
           TWAIN_EndMultipageFile()
  end;

Он берет 1.tif и 2.tif и сохраняет их в file.tif.
Если добавить еще один блок вот так
begin
   if TWAIN_BeginMultipageFile('c:\Форма1П\file2.tif')=0 then
  begin
   begin
    j:=3;{Область изменения}
    f:=4;{Область изменения}
        end;
         for i := j to f do
     begin
       StrFmt(pagefile, 'c:\image\%d.tif', [i]);
        hdib := TWAIN_LoadNativeFromFilename(pagefile);
        if hdib<>0 then
        begin
           TWAIN_DibWritePage(hdib);
           DIB_Free(hdib);
        end;
       if TWAIN_LastErrorCode()<>0 then
           break;
           end;
  end;
           TWAIN_EndMultipageFile()
  end;

То тогда 3 и 4 .tif он тоже сохраняет в file2.tif.
А мне необходимо чтобы при нажатии кнопки он сам сделал то что происходит во втором блоке.


Сергей М.   (2011-09-26 13:34:00) [28]

Имя первого файла лежит в FileListBox.Items[0], второго - в FileListBox.Items[1]

А к манипуляциям с содержимымфайлов TFileListBox не имеет ни малейшего отношения - на то у тебя есть ТВАЙН.


avpsol   (2011-09-26 13:24:00) [29]

Каким способом мне тогда загрузить первые два файла,а потом сохранить их в одном файле.Подскажите.


Сергей М.   (2011-09-26 12:48:00) [30]

а TFileListBox не спасет ОРД ?


avpsol   (2011-09-26 12:38:00) [31]

Понятно тогда нужно создавать цикл.


QAZ   (2011-09-26 12:38:00) [32]


> Ega23 ©   (26.09.11 10:52) [9]

ошибка будет при нечетном колве


Сергей М.   (2011-09-26 12:36:00) [33]


> strlist[0];
> strlist[1];


И какие же чудеса творятся в этих строчках ?


> для загрузки всех файлов расширения tif.


LoadFromFile для этого не предназначен. Вообще не предназначен. Совсем не предназначен.


И. Павел   (2011-09-26 12:31:00) [34]

> ,* для загрузки всех файлов расширения tif.

Обратите внимание: LoadFromFile, а не LoadFromFiles.


stas   (2011-09-26 12:29:00) [35]

avpsol   (26.09.11 12:27) [12]
Так нельзя :)


avpsol   (2011-09-26 12:27:00) [36]

А что именно не правильно в этой строке
strlist.LoadFromFile('c:\image\*.tif');Путь к файлам указал,* для загрузки всех файлов расширения tif.


sniknik   (2011-09-26 12:13:00) [37]

> Загрузка файлов из директории почему-то не работает.
а с чего ей работать? потому что ты в комментарии написал пожелание?

нажми F1 на LoadFromFile


avpsol   (2011-09-26 12:07:00) [38]

Загрузка файлов из директории почему-то не работает.И мне еще не понятно как первую и вторую строку добавить в цикл чтобы он сохранял все это в нужную мне папку под расширением tif,когда я ставлю strlist[0] на место j,а strlist[1] заместо f,он естественно пишет что целые(Integer) и строковые(String) типы несовместимы!
begin
strlist:=TstringList.Create;
strlist.Clear;
strlist.Add('c:\image\*.tif');
strlist.LoadFromFile('c:\image\*.tif');{Загружаю все файлы из директории}
strlist.Sorted:=True;{Включаю сортировку}
end;
while strlist.Count > 1 do
begin
strlist[0];
strlist[1];
begin
   if TWAIN_BeginMultipageFile('c:\Форма1П\file.tif')=0 then
  begin
   begin
    j:=1;
    f:=2;
        end;
         for i := j to f do
     begin
       StrFmt(pagefile, 'c:\image\%d.tif', [i]);
        hdib := TWAIN_LoadNativeFromFilename(pagefile);
        if hdib<>0 then
        begin
           TWAIN_DibWritePage(hdib);
           DIB_Free(hdib);
        end;
       if TWAIN_LastErrorCode()<>0 then
           break;
           end;
  end;
           TWAIN_EndMultipageFile()
  end;
  begin
     RenameFile('c:\Форма1П\file.tif','c:\Форма1П\' + edt1.text + edt2.text + '.tif');
  if TWAIN_LastErrorCode()<>0 then
     TWAIN_ReportLastError('Невозможно соединить файлы.')
begin
strlist.Delete(0);
strlist.Delete(0);
end;
     end;
     end;
end;


Ega23   (2011-09-26 10:52:00) [39]

while strlist.Count > 1 do
begin
//strlist[0] - первая строка
//strlist[1] - вторая строка
// do something
strlist.Delete(0);
strlist.Delete( 0 );
end;


Очень Злой   (2011-09-26 10:47:00) [40]


>         if j=j+1 then
>         begin
>         j:=j+1;
>         f:=f+2;
>         end;


Это поправки для военного времени?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо