Конференция "WinAPI" » сканер [D7, WinXP]
 
  • fedormoore © (01.11.07 14:17) [0]
    Здравствуйте все!!! и всем!!!
    пытаюсь написать простинькую программку для себя которая бы вела електронный архив документов, есть сканер с автоподачиком рз scanjet 5590 и есть вот такой код

    procedure TForm1.Accquire1Click(Sender: TObject);
    var
    dat: hBitMap;
    PInfo: PBitMapInfoHeader;
    Height,Width:integer;
    {Функция возведения 2 в степень}
    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
    {Получаем указатель на графические данные}
    dat:=TWAIN_AcquireNative(Handle,0);
    if dat <> 0 then begin
     {Получаем указатель на область памяти содержащей DIB
     данные и блокируем область памяти}
     PInfo:=GlobalLock(dat);
     {Анализируем полученные данные}
     Height:=PInfo.biHeight ;
     Width:=PInfo.biWidth ;
     Wcm.Caption :=floatToStrF(100/PInfo.biXPelsPerMeter*Width,ffNumber,8,3)+' cm';
     Hcm.Caption :=floatToStrF(100/PInfo.biYPelsPerMeter*Height,ffNumber,8,3)+' cm';
     Colors.Caption := 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('TBitMap: Нет ресурсов для загрузки изображения!',
                   mtError,[mbOk],0);
     end;
     {Отображаем графические данные}
     //Canvas.Draw(10,10,MyBitMap);
     Image1.Picture.Graphic:=MyBitMap;
     {Освобождаем память занятую графическими данными}
     TWAIN_FreeNative(dat);
    end;

    end;

    он показывает (если дописать строку) то сохроняет только последний документ который отсканировал, а как мне быть если в автоподачике лежит целая пачка? просмотрел все вопросы но такой проблемы не встречал
  • tesseract © (01.11.07 16:39) [1]

    > 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;


    Странный код  покажу проще :

    function stp2(s:byte):cardinal
    m:caridnal;
    begin
      m:=2;
      result:=m shl s;
    end;
 
Конференция "WinAPI" » сканер [D7, WinXP]
Есть новые Нет новых   [120367   +51][b:0][p:0]