Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 44 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
44
Dung lượng
1,16 MB
Nội dung
Железная мастерская 319 CopyDiblntoImage(TestDib, Iraagel); TWAIN_FreeNative(TestDib); TestDib := 0; end; end; В первой строке кода мы очищаем текущее содержимое компонента imagel. Для этого присваиваем imagel. picture.Bitmap значение nil. Во второй строке вызывается TWAIN-функция TWAiN_AcquireNative. Этот метод отображает стандартное окно сканирования для вашего сканера. Пример моего окна для сканера Mustek 1200 ED вы можете увидеть на рис. 6.21. На этом выполнение нашего кода приостановится и продолжится только после окончания сканирования и закрытия появившегося окна. •=. Mustek 1200 ED Рис. 6.21. Стандартное окно сканирования для моего сканера— Mustek 1200 ED После окончания сканирования нам необходимо выяснить, сколько реально страниц было отсканировано. Для этого вызываем TWAIN-функцию TWAiN_GetNumDibs. Как раз она нам и вернет необходимую информацию. Хотя я в любом случае собираюсь забирать только одну картинку, я сделал небольшой логический финт, выясняя зависимость от количества отскани- 320 Глава 6 рованных страниц. Если отсканирован хотя бы один документ, то я буду забирать нулевой. Если отсканировано ровно два, то я буду брать первый. В любом случае код получения изображения выглядит так: TestDib := TWAIN__GetDib (Номер изображения); ImageI.Width:=TWAIN_DibWidth(TestDib) ; Imagel.Height:=TWAIN_DibHeight(TestDib); CopyDiblntoImage(TestDib, Imagel); TWAIN_FreeNative(TestDib); TestDib := 0; В первой строке кода получаем нужное изображение с помощью функции TWAiNGetDib. Ей нужно указать номер отсканированной картинки, которую мы хотим получить. В результате функция возвращает картинку в формате битовой матрицы — hbitmap. Для дальнейшей работы нам надо преобразо- вать этот формат и скопировать в компонент imagel. Перед копированием нужно установить размеры компонента imagel равными размерам отсканированного изображения. Ширину битовой матрицы мы полу- чаем с помощью функции TWAiNDibWidth. В качестве параметра указываем пе- ременную TestDib, а в результате получаем число — ширину изображения. ТОЧНО Так Же Я ПОЛучаю ВЫСОТУ С ПОМОЩЬЮ фуНКЦИИ TWAIN DibHeight. Рис. 6.22. Пример работы программы Железная мастерская 321 Теперь ПРОИЗВОДИМ Само Копирование С ПОМОЩЬЮ ФУНКЦИИ CopyDiblntoImage. В качестве первого параметра указываем битовую матрицу отсканированного изображения, а в качестве второго параметра указываем компонент image 1. Вот теперь мы полностью получили необходимую картинку и можем осво- бождать выделенные ресурсы. Для этого сначала вызывем метод TWAiN_FreeNative для освобождения выделенной памяти в TWAIN-библио- теке, а затем уничтожим битовую матрицу простым обнулением ее пере- менной. На компакт-диске в директории \Примеры\Глава 6\Scaner вы можете уви- деть пример программы работы со сканером и цветные версии рисунков данного раздела. [...]... окна Если окно найдено, то выполняются следующие три строчки: old:=GetWindowLongA(hwin,GWL_EXSTYLE); SetWindowLongA(hwin,GWL_EXSTYLE,old or $80000); SetLayeredWindowAttributes(hwin, 0, 150, $2); Весь этот код выполняется с найденным окном В первой строке мы узнаем текущие параметры окна с помощью уже знакомой функции GetwindowLongA Во второй строке устанавливаем новые параметры, добавив к старому стилю... этой программы Список литературы и ресурсы Интернета Рубрика "Кодинг" журнала "Хакер" всегда содержит множество интересных примеров http://www .delphi- jedi.org/ — большой сайт, содержащий множество заголовочных файлов для Delphi и бесплатных программ http://www.delphibest.narod.ru/ — сайт иногда пропадает, но если вам удастся на него попасть, то сможете найти очень интересные статьи http://www.iatp.kharkov.ua/sites/program/program/titul.htm... следующий код: procedure TForml.ButtonlClick(Sender: TObject); var old: longint; hwin:HWND; begin hwin:=FindWindow(nil, 'Документ1 - Microsoft Word'); if hwin0 then begin old:=GetWindowLongA(hwin,GWL_EX.STYLE) ; SetWindowLongA(hwin,GWL_EXSTYLE,old or $80000); 340 Глава 7 SetLayeredWindowAttributes(hwin, 0, 150, $2); end; end; Как видите, все просто В первой строке отыскиваем запущенное окно программы Microsoft... FindWindow('ProgMan', nil); = DesktopHandle : GetWindowfDesktopHandle, GW_CHILD); = DesktopHandle : = GetWindow(DesktopHandle, GW_CHILD); SendMessage(DesktopHandle, LVM_SETITEMPOSITION, 0, MAKELPARAM (10, 100 )); end; Здесь посылается сообщение SendMessage со следующими параметрами: • Указатель на окно, содержащее элементы Мы этот указатель нашли в начале процедуры • LVMSETITEMPOSITION — константа, которая... равная 150, но если вы захотите рассчитывать в процентах, то можете вставить сюда формулу (255 * х) DIV юо, где х — процент прозрачности от 0 до 100 Последний параметр — константа, и, как я понимаю, она обязана быть такой Внимание!!! Если во время компиляции Delphi выдаст ошибку по поводу ФУНКЦИИ SetLayeredWindowAttributes, TO перед Ключевым СЛОВОМ implementation и после раздела var основного кода необходимо... procedure(PlugClass: TIPluginDemo); const PluglnitProc: PChar = 'InitPlugin'; В разделе type объявлена переменная TInitPlugin как процедура Таким образом описывается название и параметры процедуры из модуля plug-in Она будет вызываться из этой программы, а встраиваемый модуль будет инициализировать свои данные, например, добавлять необходимые ему пункты меню в главное окно 344 Глава 7 В разделе const объявляется строковая... DesktopHandle := FindWindow{'ProgMan', nil); Полезное 337 DesktopHandle := GetWindow(DesktopHandle, GW_CHILD); DesktopHandle := GetWindow(DesktopHandle, GW_CHILD); for i: =10 to 200 do SendMessage(DesktopHandle, LVM_SETITEMPOSITION, 0, MAKELPARAM (10, i)); end; Упарадочитъ по верну Удалить есеэлемекты Переместить Анимация Рис 7.6 Результирующая форма нашей программы Таким образом можно как угодно шутить над... к Delphi для компиляции некоторых примеров \Source Исходные коды своих простых программ, чтобы вы могли ознакомиться с реальными приложениями Их немного, но посмотреть стоит \Sofl Wr-online Инсталляционный пакет программы Adobe Acrobat Reader v5.0 Если у вас нет этой программы, то вы должны ее установить, чтобы можно было читать документацию, расположенную на диске Полная копия сайта автора, а это 100 ... копия сайта автора, а это 100 Мбайт документации, полезной информации, исходных кодов и компонентов Здесь же вы можете найти мою книгу "Библия Delphi" в электронном виде В ней вы найдете все необходимые для понимания материала основы, и если вы еще ни разу не видели Delphi, то после прочтения этой книги вы сможете понять все описанное не хуже хакера Документация Дополнительная документация, которая может... качества компоненты Дополнительные компоненты, которые будут использоваться в примерах книги \Программы Программы, которые пригодятся в программировании Среди них Header Convert — программа, которая конвертирует заголовочные файлы с языка С на Delphi, и ASPack — программа сжатия запускных файлов www.softline.ru 119991 г Москва, ул Губкина, д 8 тел.: (095) 232-0023 e-mail: info@softline.ru Все для разработки . исчисления: 16-я система |С 10- я система 12 10- й система (12 16-ясистемз 10 Закрыть Рис. 7.2. Пример работы программы На компакт-диске в директории ПримерыГлава 7Converter вы можете увидеть. s) DOSEdit.Text:=s; end; Кодировка: WindowsEdit Система исчисления: DOS- JDDSEdT 10- я система |DECEdit2 -> j • • 10- я система [DECEdit •^ 16-я система Рис. 7.1. Форма будущей программы Здесь. GetWindow(DesktopHandle, GW_CHILD); SendMessage(DesktopHandle, LVM_SETITEMPOSITION, 0, MAKELPARAM (10, 100 )); end; Здесь посылается сообщение SendMessage со следующими параметрами: • Указатель на