Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2010, 06:08   #11
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Че то я запутался немного. Я вот как создаю папку куда будут сохраняться файлы:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 sDir: string;
begin
 sDir:=Form1.StatusBar2.Panels[1].Text;
 CreateDir(sDir + Form1.Edit2.Text + '\');
end;
Сначала в ShellTreeView выбирается папка, а затем извлекается путь до выбранной папки так:
Код:
 Form1.StatusBar2.Panels[1].Text:=Form1.ShellTreeView1.Path + '\';
а затем я создаю новую папку с именем из Edit2 в выбранной папке кодом выше.
Полный код у меня такой:
Код:
procedure TForm1.BtnClick(Sender: TObject);
var
 dat: hBitMap;
 PInfo: PBitMapInfoHeader;
 Height,Width,num:integer;
 sFileName,sDir: string;

 function stp2(s:byte):longint;
 var
  m: longint;
  i: byte;
 begin
  m:=2;
  for i:=2 to s do m:=m*2;
  stp2:=m;
 end;

begin
 Form1.Timer2.Enabled:=True;

 {Получаем указатель на графические данные}
 dat:=TWAIN_AcquireNative(Handle,0);
 if dat <> 0 then begin
  {Получаем указатель на область памяти содержащей DIB
   данные и блокируем область памяти}
  PInfo:=GlobalLock(dat);
  {Анализируем полученные данные}
  Height:=PInfo.biHeight ;
  Width:=PInfo.biWidth ;
  Form1.StatusBar1.Panels[3].Text:=floatToStrF(100/PInfo.biXPelsPerMeter*Width,ffNumber,8,3);
  Form1.StatusBar1.Panels[1].Text:=floatToStrF(100/PInfo.biYPelsPerMeter*Height,ffNumber,8,3);
  Form1.StatusBar1.Panels[5].Text:=floatToStrF(stp2(PInfo.biBitCount),ffNumber,8,0);
  {Разблокируем память}
  GlobalUnlock(dat);
  {Передаем в битовую матрицу графические данные}
  {И устанавливаем перехват ошибок}
  try
   MyBitMap.Palette :=TWAIN_CreateDibPalette(dat);
   MyBitMap.Width := Width;
   MyBitMap.Height := Height;
   TWAIN_DrawDibToDC(MyBitMap.Canvas.Handle,0,0,Width,Height,dat,0,0);
  except
   {Обрабатываем наиболее вероятную ошибку связанную с не хваткой ресурсов
    для загрузки изображения}
   on EOutOFResources do
      MessageDlg('Нет ресурсов для загрузки изображения!', mtError,[mbOk],0);
  end;
   {Отображаем графические данные}
   {Сохраняем отсканированный файл}

   sFileName:=Form1.Edit1.Text + '.tiff';
   num:=1;
   while FileExists(sDir + '\' + sFileName) do
   begin
    Inc(num);
    sFileName:=IntToStr(num) + '_' + Form1.Edit1.Text + '.tiff';
//    MyBitMap.SaveToFile(Form1.StatusBar2.Panels[1].Text + '2.tiff');
   end;
   //Canvas.Draw(10,10,MyBitMap);
   Image1.Picture.Graphic:=MyBitMap;
   Image1.Picture.SaveToFile(sDir);
   {Освобождаем память занятую графическими данными}
   TWAIN_FreeNative(dat);
   Form1.Timer2.Enabled:=False;
 end;
end;
Но файл отсканированный не сохраняется. А можно ли вообще сделать так, чтобы отсканированный файл не грузился после сканирования, а сразу сохранялся, а где нибудь в Lable какой-нибудь выводилось количество сохраненных файлов? Я пробовал, как видите, так написать:
Код:
//    MyBitMap.SaveToFile(Form1.StatusBar2.Panels[1].Text + '2.tiff');
Это работает только если отсканирована одна страница, а у меня то их будет несколько тысяч.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.07.2010, 08:39   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
Image1.Picture.SaveToFile(sDir ????!);
А имя сохраняемого файла где?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.07.2010, 09:06   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Так?
Код:
Image1.Picture.SaveToFile(sDir + sFileName);
Так тоже не работает. Отсканированная страница сохраняется сейчас с номером 5_1 почему то в папке с прогой, а если я еще раз ее отсканирую, то файл 5_1 затирается новым 5_1. Как сохранять не загружая в Image1? Чтобы не грузить систему.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.07.2010, 09:21   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Посмотри внимательно должна быть функция AcquireToFilename или типа того.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2010, 09:23   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
var sDir: string;
это должно быть ОДИН раз в программе!!!!
я рекомендую написать в
Код:
type
  TForm1 = class(TForm)
   .....    
  procedure Button1Click(Sender: TObject);
  private
    sDir: string;
потому как тот sDir что задаётся в BitBtn1Click не имеет никакого отношения к тому sDir, что используется в BtnClick !!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.07.2010, 09:46   #16
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Сделал, но все равно не получается. . Вот код программы. ПОсмотрите пожалуйста
Вложения
Тип файла: txt code.txt (9.0 Кб, 121 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.07.2010, 09:48   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Во-первых: Ты думаешь что всем захочется пересобирать форму по твоему коду?
во-вторых: Ты думаешь что все оснащены Rz компонентами? (Ну это так... лирика...)
Имеено поэтому я всем советую прикреплять архив полного проекта
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2010, 10:05   #18
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вот проект.
Вложения
Тип файла: zip Копия twain_demo.zip (806.4 Кб, 10 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 29.07.2010, 12:55   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
artemavd
Проверить не могу, на главз косяков не вижу, но я на себе сделал так:
Код:
var fileName: array [0..260] of Char;
    i: Integer;
begin
   TWAIN_LogFile(0);
   TWAIN_SetHideUI(true);
   TWAIN_SetFileAppendFlag(false);
   if TWAIN_OpenSource('Canon MF3200 Series') then   begin
      TWAIN_SetPixelType(0);
      TWAIN_SetBitDepth(1);
      TWAIN_SetResolution(200);
      TWAIN_SetPaperSize(1);
      TWAIN_SetXferCount(-1);
      TWAIN_SetMultiTransfer(true);
         StrFmt(fileName, 'c:\temp\%d.tif', [tag]);
         TWAIN_AcquireToFilename(self.Handle, fileName);
         tag := tag+1;
      TWAIN_CloseSource();
   end;
   if TWAIN_LastErrorCode()<>0 then
      TWAIN_ReportLastError('Unable to scan.')
end;
Обрати внимание я не сканирую директорию на наличие файлов с такими именами, ибо после сканинга имею привычку перекладывать отсканированное в другое место.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.07.2010, 17:20   #20
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Мне можно этот код поместить в кнопку? ))
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение файла KREGI Помощь студентам 4 30.03.2009 21:09
Как обратиться к объекту который был только что создан Arassir Помощь студентам 5 24.10.2008 20:42
задать значение переменной в только что макросом открытой книге tolikman Microsoft Office Excel 2 17.10.2008 16:35
Сохранение файла Македонский Общие вопросы Delphi 7 17.08.2007 08:35
Как сделать что-бы Таймер срабатывал только один раз? Greg Компоненты Delphi 11 16.12.2006 01:25