11.08.2023

Как вставить картинку в базу данных. Как создать кнопку в базе Microsoft Access Как вставить изображение в форму access


Возникла задача хранения (загрузка, отображение) картинок (фотографий и т.п.) в базе данных Access.

На первый взгляд опытного программиста;-) нет ничего проще - картинки храним в поле таблицы с типом , а отображаем на формах при помощи элемента управления Присоединенная рамка объекта , ну или если потребуется Свободная рамка объекта (Bound Object Frame, Unbound Object Frame) . Но не тут-то было!; Оказалось, что если данные записать напрямую (в коде Visual Basic), например, используя метод AppendChunk , в поле с типом Поле объекта OLE , то в элементе управления Присоединенная рамка объекта изображение вот так вот просто не отображается. Отображается же оно только в том случае, если загрузить данные в это поле при помощи контекстного меню самого поля или указанного элемента управления, выбрав правильный тип OLE объекта (что-нибудь типа Рисунок, Picture...). Такая гибкость и умность обработки данных не особо устраивала.

А элемент управления с манящим типом Рисунок (Image) предназначен для работы исключительно со статическими изображениями: на этапе дизайна (ну, в общем-то, и из кода Visual Basic) можно указать файл на диске, который будет отображаться на форме.

Изучив БД примеров - Northwind в английской версии, Борей в русской - и изрядно просканировав интернет, стало понятно, что отсутствие нормальной работы с изображениями в Access"е - общепризнанный факт. Вариантов предлагается два:

1. Хранение картинок в виде файлов на диске, а пути к ним - в БД. Отображение на форме при помощи элемента управления Рисунок (Image) , присваивая путь в качестве значения свойству Рисунок (Picture) .

2. Хранение картинок в БД в полях Поле объекта OLE (OLE Object) . Аналогичное отображение на форме при помощи элемента управления Рисунок (Image) . При этом для загрузки файла используется метод AppendChunk , а чтобы отобразить картинку данные выгружаются во временный файл методом GetChunk , путь к полученному файлу присваивается свойству Рисунок (Picture) элемента управления. Этот метод дан с примером .

Минус первого метода в том, что при перемещении каталога хранения файлов должны быть в обязательном порядке корректно изменены пути к файлам, сохраненные в БД. Минусы второго метода - нужно придумать как добиться уникальности имени временного файла (так как теоретически с БД могут работать несколько пользователей "из одного и того же места"), и прямая работа с файлами на диске всё-таки замедляет работу. И оба этих метода не подходят для использования в Ленточной форме (Continuous Forms) , а только в Одиночной форме (Single Form) .

Уже склонившись ко 2-ому варианту, как более приемлемому, промелькнула мысль - а не попробовать ли использовать элемент управления Рисунок (Image) не только для отображения, но и для преобразования данных в нужный графический формат, использовав свойство PictureData объекта Image ?! И это сработало! Не нужны никакие временные файлы (хотя, конечно для Ленточной формы это всё равно не подходит, но это и не критично).

Итак, идея в том, что загрузка файла осуществляется присвоением пути к нему свойству Picture элемента управления Рисунок (Image) , и последующим считыванием данных из свойства PictureData - таким образом мы добиваемся, что данные буду сохранены в формате, который Access гарантированно отобразит. А отображение картинки выполняется считыванием данных из поля с типом Поле объекта OLE (OLE Object) и их присвоением свойству PictureData элемента управления.

Пример.

Пусть у нас в таблице MyTable есть поле MyImage типа Поле объекта OLE (OLE Object) . На форме MyForm нам нужен элемент управления Рисунок (Image) - MyPic . При этом, чтобы разместить этот элемент управления на форме, нужно обязательно выбрать рисунок, а потом в дизайнере в свойстве Рисунок (Picture) указать (отсутствует) ((none) ) - со скобками. На вопрос об удалении рисунка - ответить утвердительно.

Загрузку можно выполнить примерно так:


Dim rs As Recordset
Dim dlgFile As FileDialog, strFilePath As String

Set dlgFile = Application.FileDialog(msoFileDialogOpen)

dlgFile.AllowMultiSelect = False
dlgFile.Filters.Clear
dlgFile.Filters.Add "Все файлы", "*.*"
dlgFile.Filters.Add "JPEG", "*.jpg"
dlgFile.Filters.Add "Рисунки", "*.bmp"
dlgFile.FilterIndex = 1
If dlgFile.Show = 0 Then
Set dlgFile = Nothing
Exit Sub
End If

strFilePath = Trim$(dlgFile.SelectedItems(1))
Set dlgFile = Nothing

MyPic.Picture = strFilePath

Set rs = CurrentDB.OpenRecordset("MyTable", dbOpenDynaset)

rs.AddNew
rs! = MyPic.PictureData
rs.Update

MyPic.Picture = "" "очистка картинки, если нужно
"====================================================

А отображение выполнять так (например, в обработчике события Текущая запись (On Current)):

"====================================================
If Me.NewRecord Then
MyPic.Picture = ""
Else
MyPic.PictureData = Me!
End If
"====================================================

Вставка рисунков в формы и отчеты

В Microsoft Access существует возможность вставки рисунков в формы и отчеты. Использование рисунков может улучшить внешний вид создаваемых форм и отчетов. Например, в отчеты можно включать логотип фирмы, а в форме предоставлять возможность просмотра не только данных о сотрудниках фирмы, но и их фотографий. Для вставки рисунков в формы и отчеты используются специальные элементы управления - свободная и присоединенная рамки объектов (Unbound Object Frame, Bound Object Frame), а также элемент управления Рисунок (Image).

Способ вставки рисунка зависит от того, как предполагается его использовать.

  • Объект OLE можно хранить в одном из полей таблицы Access, например в таблице "Сотрудники" (Employee) базы данных "Борей" хранятся фотографии сотрудников. Можно в полях таблицы Access хранить также документы Word. В таком случае для отображения этих объектов в формах или отчетах следует использовать элемент управления Присоединенная рамка объекта (Bound Object Frame).
  • Объекты OLE могут храниться не в таблицах Access, а прямо в форме или отчете. С помощью такого способа в форме или отчете можно, например, сохранить логотип фирмы. В этом случае для отображения объекта OLE следует использовать элемент управления Свободная рамка объекта (Unbound Object Frame) или Рисунок (Image).
  • Можно также для добавления рисунка в форму или отчет использовать свойство Рисунок (Picture) этой формы или отчета. Обычно так поступают, когда требуется включить фоновый рисунок (подложку), занимающий часть окна или все окно формы или отчета.

Чтобы добавить фоновый рисунок в форму:

  1. Откройте форму в режиме Конструктора.
  2. В окне свойств формы на вкладке Макет (Format) найдите свойство Рисунок (Picture). В поле ввода этого свойства введите путь и имя файла рисунка. Для этого можно нажать кнопку Построителя и выбрать в окне Выбор рисунка (Insert Picture) необходимый файл рисунка (рис. 15.1).

Замечание

Несколько стандартных файлов для фоновых рисунков находятся в папке MICROSOFT OFFICE\OFFICE\BITMAPS\STYLES.

  1. Установите значение свойства Тип рисунка (Picture Type). Значений может быть два: Внедренный (Embedded) или Связанный (Linked). Если рисунок внедренный, он сохраняется в файле базы данных (mdb). Связанный рисунок хранится в отдельном файле на диске. О преимуществах и недостатках того и другого способа мы уже говорили выше. Если один и тот же рисунок вставляется во много форм или отчетов, то внедрение его приведет к "распуханию" файла mdb, т. к. храниться будет столько копий рисунка, сколько раз вы его внедряли. Если вы решите сделать его связанным, необходимо заботиться о том, чтобы его случайно не удалили или не переместили.
  2. С помощью следующих свойств настройте отображение фонового рисунка.
    • Свойство Масштабы рисунка (Picture Size Mode) имеет три значения: Фрагмент (Clip), Вписать в рамку (Stretch), По размеру рамки (Zoom). Значение Фрагмент отображает рисунок в его исходном размере. Если размер рисунка превышает размер окна формы, то изображение рисунка обрезается. Значение Вписать в рамку изменяет размер рисунка так, чтобы он соответствовал окну формы. Использование данного значения может привести к искажению изображения рисунка. Значение По размеру рамки изменяет размер рисунка так, чтобы он соответствовал окну формы либо по ширине, либо по высоте. Использование данного значения не приведет ни к обрезанию рисунка, ни к искажению его пропорций.

Рис. 15.1. Диалоговое коно Выбор рисунка

    • Если вставляется рисунок, занимающий не всю форму, свойство Выравнивание рисунка (Picture Alignment) позволяет определить положение его в форме: Сверху слева (Top Left), Сверху справа (Top Right), По центру (Center), Снизу слева (Bottom Left), Снизу справа (Bottom Right), По центру формы (Form Center).
    • Свойство Мозаичное заполнение (Picture Tiling) позволяет выводить повторяющееся изображение рисунка.

Пример использования рисунка в качестве фона в форме приведен на рис. 15.2.

Аналогично вставляется фоновый рисунок в отчет. Пример использования рисунка в качестве фона в отчете приведен на рис. 15.3.

Рисунок может быть вставлен в форму и в виде элемента управления формы. Для этого можно использовать два типа элементов управления: Рисунок (Image) и Свободная рамка объекта (Unbound Object Frame).

Рис. 15.2. Использование фонового рисунка в форме Microsoft Access

Рис. 15.3. Фоновый рисунок в отчете Microsoft Access

Если не требуется прямое изменение рисунка в форме или отчете, то лучше использовать Рисунок (Picture) (форма будет работать быстрее). Если же предполагается часто изменять рисунок, нужно вставить его с помощью свободной рамки объекта.

Чтобы вставить элемент управления Рисунок (Image), необходимо:

  1. Нажать кнопку Рисунок (Image) на панели элементов (кнопка Мастера элементов должна быть нажата, чтобы запустился Мастер рисунков).
  2. Выбрать в форме или отчете место, в которое помещается рисунок, и щелкнуть на нем левой кнопкой мыши.
  3. В раскрывшемся окне Вставка рисунка (Insert Picture) выбрать имя файла, содержащего добавляемый рисунок, и нажать кнопку ОК. Будет создан элемент управления, в котором помещается рисунок (рис. 15.4).
  4. Установить значения свойств, которые влияют на то, как рисунок будет отображаться в форме или отчете. Эти свойства аналогичны соответствующим свойствам формы.

Рис. 15.4. Использование элемента Рисунок для вставки рисунка в форму

Чтобы вставить рисунок в форму или отчет с помощью свободной рамки объекта, необходимо:

  1. Открыть форму в режиме Конструктора формы или отчет в режиме Конструктора отчета.
  2. Нажать кнопку Свободная рамка объекта (Unbound Object Frame) на панели элементов.
  3. Выбрать в форме или отчете место для вставляемого объекта и щелкнуть на нем левой кнопкой мыши. Появится диалоговое окно мастера Вставка объекта (Insert Object). С помощью мастера можно вставить уже готовый рисунок из файла или сначала создать его в соответствующем приложении, а затем вставить. Поэтому дальнейшие шаги могут быть разными.

Если вам еще предстоит создать рисунок, проделайте следующие операции.

  1. В диалоговом окне Microsoft Access выбрать переключатель Создать новый (Create New), а затем в списке Тип объекта (Object Type) выбрать приложение, с помощью которого будет создаваться рисунок (рис. 15.5).

Рис. 15.5. Окно Microsoft Access, используемое для вставки рисунка с помощью свободной рамки объекта

  1. Объект может отображаться в виде значка - это удобно, когда он содержит сведения, которые не должны все время выводиться на экран. В таком случае нужно просто установить флажок В виде значка (Display as Icon).
  2. Нажать кнопку ОК.
  3. Создать объект с помощью приложения, выбранного на шаге 1.
  4. Закончив создание объекта, выбрать команду Закрыть (Close) в меню Файл (File) приложения, чтобы вернуться в Microsoft Access. Microsoft Access создает элемент управления Свободная рамка объекта (Unbound Object Frame) и отображает в ней рисунок.

Если же файл с рисунком у вас уже готов, чтобы вставить его прямо из файла, вам необходимо:

  1. В диалоговом окне Microsoft Access выбрать переключатель Создать из файла (Create From File), а затем указать путь к файлу. Если точный путь вы не знаете, используйте кнопку Обзор (Browse) (рис. 15.6).

Рис. 15.6. Окно Microsoft Access при вставке рисунка из файла в отчет с помощью свободной рамки объекта

Рис. 15.7. Вставка рисунка Microsoft Paint в отчет с помощью свободной рамки объекта

  1. Если нужно отобразить объект в виде значка, установить флажок В виде значка (Display As Icon).
  2. Для нахождения связи с объектом установить флажок Связь (Link). Если флажок сброшен (по умолчанию), объект будет внедрен.
  3. Нажать кнопку ОК.

Пример вставки рисунка, созданного с использованием Microsoft Paint, в форму с помощью свободной рамки объекта приведен на рис. 15.7.

После вставки объекта можно изменять его размеры и пропорции с помощью свойства Установка размеров (Size Mode). В большинстве случаев изменения в свободный объект могут вноситься в режиме Конструктора формы или отчета. Для того чтобы иметь возможность изменять объект в режиме формы, необходимо задать для свойства Доступ (Enabled) свободной рамки объекта значение Да (Yes), а для свойства Блокировка (Locked) - значение Нет (No). Чтобы отредактировать объект, дважды щелкните на нем мышью. Для этого только необходимо, чтобы на вашем компьютере было установлено приложение, в котором может редактироваться файл данного типа. Пример редактирования внедренного точечного рисунка представлен на рис. 15.8.

Рис. 15.8. Пример редактирования точечного рисунка с помощью Microsoft Paint

Для того чтобы выйти из режима редактирования, достаточно щелкнуть мышью за пределами рисунка.

В отличие от других элементов управления в форме, которые связаны с записями в таблице-источнике, рисунок в свободной рамке объекта не меняется при перемещении по записям в форме - он связан с самой формой, а не с данными, которые отображаются в форме. Рисунки, которые хранятся в записях таблицы, отображаются в форме с помощью присоединенной рамки объекта.

Для хранения рисунков и других объектов OLE в таблицах Access используется специальный тип поля: Объект OLE (OLE Object). Элемент управления Присоединенная рамка объекта (Bound Object Frame) создается одним из стандартных способов:

  • перемещением с помощью мыши нужного поля из списка полей таблицы-источника. В этом случае будет сразу создан элемент управления, связанный с полем в таблице;
  • с помощью кнопки Присоединенная рамка объекта (Bound Object Frame) на панели элементов. В данном случае будет создан элемент управления, для которого нужно сразу установить свойство Данные (RecordSource) - имя поля, содержащего объект OLE (рис. 15.9).

Рис. 15.9. Создание присоединенной рамки объекта в режиме Формы

Вставить рисунок в поле таблицы можно как в таблице, открытой в режиме Таблицы, так и в форме. Для этого нужно:

  1. Открыть таблицу в режиме Таблицы или форму в режиме Формы.
  2. Перейти на запись, в которую требуется вставить рисунок, и выбрать поле объекта OLE.
  3. Выполнить команду Объект (Object) из меню Вставка (Insert).
  4. В диалоговом окне Microsoft Access (см. рис. 15.5) выбрать переключатель Создать новый (Create New), а затем в списке Тип объекта (Object Type) выбрать тип приложения, в котором будет создаваться объект. Если файл с рисунком уже готов, то нужно выбрать переключатель Создать из файла (Create From File), a затем указать путь к файлу.
  5. Для того чтобы отобразить объект в виде значка, установить флажок В виде значка (Display As Icon).
  6. Нажать кнопку ОК.
  7. Если вы создаете новый рисунок, то нужно создать его с помощью приложения выбранного на шаге 4.
  8. Закончив создание объекта, выбрать команду Закрыть (Close) в меню Файл (File) приложения для возвращения в Microsoft Access.

Рисунок будет вставлен в запись в таблице. При этом в режиме Формы рисунок или иной объект автоматически будут отображаться на экране. В режиме Таблицы будет отображаться только тип объекта, например Растровый рисунок.

Вставка графических файлов происходит либо напрямую, либо при помощи отдельных графических фильтров. Эти фильтры устанавливаются при инсталляции Microsoft Access. Для вставки файлов формата Enhanced Metafile (EMF), точечных рисунков Windows (BMP, RLE, DIB), метафайлов Windows (WMF) и значков (ICO) графический фильтр не требуется. Однако такие фильтры необходимы для вставки всех остальных файлов графических.форматов, перечисленных ниже:

AutoCAD Format 2-D (DXF) Computer Graphics Metafile (CGM)

CorelDRAW (CDR) Encapsulated PostScript (EPS)

Graphics Interchange Format (GIF) JPEG File Interchange Format (JPG)

Kodak Photo CD (PCD) Micrografx Designer/Draw (DRW)

PC Paintbrush (PCX) Portable Network Graphics (PNG)

Tagged Image File Format (TIFF) Targa (TGA)

WordPerfect Graphics (WPG) HG Graphics Language (HGL, PLT) Macintosh PICT (PCT)

Пример использования рисунка в качестве фона в форме приведен на рис. 15.2.

Аналогично вставляется фоновый рисунок в отчет. Пример использования рисунка в качестве фона в отчете приведен на рис. 15.3.

Рисунок может быть вставлен в форму и в виде элемента управления формы. Для этого можно использовать два типа элементов управления: Рисунок (Image) и Свободная рамка объекта (Unbound Object Frame).

Рис. 15.2 . Использование фонового рисунка в форме Microsoft Access


Рис. 15.3 . Фоновый рисунок в отчете Microsoft Access

Если не требуется прямое изменение рисунка в форме или отчете, то лучше использовать Рисунок (Picture) (форма будет работать быстрее). Если же предполагается часто изменять рисунок, нужно вставить его с помощью свободной рамки объекта.

Чтобы вставить элемент управления Рисунок (Image), необходимо:

  1. Открыть форму в режиме Конструктора формы или отчет в режиме Конструктора отчета.
  2. Нажать кнопку Рисунок (Image) на панели элементов (кнопка Мастера элементов должна быть нажата, чтобы запустился Мастер рисунков).
  3. Выбрать в форме или отчете место, в которое помещается рисунок, и щелкнуть на нем левой кнопкой мыши.
  4. В раскрывшемся окне Вставка рисунка (Insert Picture) выбрать имя файла, содержащего добавляемый рисунок, и нажать кнопку ОК . Будет создан элемент управления, в котором помещается рисунок (рис. 15.4).
  5. Установить значения свойств, которые влияют на то, как рисунок будет отображаться в форме или отчете. Эти свойства аналогичны соответствующим свойствам формы.

Инструкция

Добавьте поле объекта OLE в таблицу базы данных. Именно в данном поле приложение Microsoft Access может хранить изображения. Откройте нужную БД и в закладке «Таблицы» выделите тот элемент, в который вы хотите поместить изображение. Вызовите конструктор для таблицы. Редактируя ее структуру, добавьте еще одно поле с типом данных «Поле объекта OLE». Задайте ему имя и сохраните изменения базы («Файл» - «Сохранить»).

Поместите в созданную ячейку поля OLE-объект, т.е. саму картинку. Для этого откройте таблицу в режиме просмотра. Вы увидите добавленный столбец. Установите курсор в нужной ячейке и щелчком правой кнопкой мыши вызовите контекстное меню. Выберите команду «Добавить объект».

В открывшемся диалоговом окне активируйте один из предложенных вариантов добавления. Можно вставить уже существующий графический файл или создать его сначала в соответствующем редакторе и затем связать с текущей базой данных. В первом случае выберите в поле «Тип объекта» приложение, в котором вы хотите создать новое изображение, например, «Рисунок Paintbrush». Нажмите кнопку Ок, одновременно запустится программа-редактор. Внедрение объекта в базу данных закончится после того, как вы, создав картинку, закроете графическое приложение.

Для вставки в табличное поле уже существующей картинки выберите второй вариант – активируйте в диалоговом окне переключатель «Создать из файла». Нажмите на кнопку «Обзор…» и укажите путь и имя графического файла с изображением. Желательно на диске иметь картинку в формате.bmp или.dib. По необходимости включите в окне флажок «Связь» – это позволит СУБД отслеживать изменения графического файла и перезагружать изображение в таблице.

02. Данный способ позволяет вам нарисовать некоторые объекты в форме, хотя в программе Международный Туризм использовался другой алгоритм для рисования карты. Этот способ может Вам пригодится в некоторых случаях. Рисуются линии, точки, элипсы, многоугольники, т.е. те базовые объекты, которые применяются в api интерфейсе.

" Функция используется для поиска окна
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWndParent As Long , _
ByVal hWndChildAfter As Long , _
ByVal lpClassname As String , _
ByVal lpWindowName As String ) As Long

" Функция возвращает контекст устройства для рисования
Private Declare Function apiGetDC Lib "user32" Alias "GetDC" _
(ByVal hwnd As Long ) _
As Long

" Функция освобождает контекст устройства для других приложений
Private Declare Function apiReleaseDC Lib "user32" Alias "ReleaseDC" _
(ByVal hwnd As Long , _
ByVal hDc As Long ) _
As Long


" Далеее идут, функции управляющие рисованием

" Функция рисует точку на экране
Private Declare Function apiSetPixel Lib "gdi32" Alias "SetPixel" _
(ByVal hDc As Long , _
ByVal x As Long , _
ByVal Y As Long , _
ByVal crColor As Long ) As Long

" Функция рисует линию из текущей позиции "пера" до точки с координатами
" x,y, но не включая ее саму. Линия рисуется с помощью выбранного "пера". Если
" нет ошибки, то текущее положение пера устанавливается в точку с координатами
" (x,y)
Private Declare Function apiLineTo Lib "gdi32" Alias "LineTo" _
(ByVal hDc As Long , _
ByVal x As Integer , _
ByVal Y As Integer ) _
As Long

" Функция рисует дугу элипса с помощью выбранного "пера".
" Дуга рисуется против часовой стрелки.
" (x1,y1 - x2,y2) ограничивающий прямоугольник для дуги.


Private Declare Function apiArc Lib "gdi32" Alias "Arc" _
(ByVal hDc As Long , _
ByVal X1 As Integer , _
ByVal Y1 As Integer , _
ByVal X2 As Integer , _
ByVal Y2 As Integer , _
ByVal X3 As Integer , _
ByVal Y3 As Integer , _
ByVal X4 As Integer , _
ByVal Y4 As Integer ) _
As Long
" Функция рисует прямоугольник с помощью выбранного "пера".
" (x1,y1) - первый угол

Private Declare Function apiRectangle Lib "gdi32" Alias "Rectangle" _
(ByVal hDc As Long , _
ByVal X1 As Long , _
ByVal Y1 As Long , _
ByVal X2 As Long , _
ByVal Y2 As Long ) As Long

" Функция передвигает позицию рисования
" (x,y) - новая точка
" (lpPoint) - предыдущая точка
Private Declare Function apiMoveTo Lib "gdi32" Alias "MoveToEx" _
(ByVal hDc As Long , _
ByVal x As Long , _
ByVal Y As Long , _
lpPoint As POINTAPI) As Long
" Структура координаты точки
Private Type POINTAPI
x As Long
Y As Long
End Type

" Функция рисует элипс с помощью выбранного "пера".
" (x1,y1) - первый угол
" (x2,y2) - противоположный угол
Private Declare Function apiEllipse Lib "gdi32" Alias "Ellipse" _
(ByVal hDc As Long , _

ByVal X2 As Long , ByVal Y2 As Long ) As Long


" lpPoint - массив точек
" nCount - число точек
Private Declare Function apiPolyline Lib "gdi32" Alias "Polyline" _
(ByVal hDc As Long , _
lpPoint As POINTAPI, _

" Функция рисует ломаную с помощью выбранного "пера"
" lpPoint - массив точек
" nCount - число точек
Private Declare Function apiPolygon Lib "gdi32" Alias "Polygon" _
(ByVal hDc As Long , _
lpPoint As POINTAPI, _
ByVal nCount As Long ) As Long



" (x3,y3) - начальная точка рисования "пером"
" (x4,y4) - конечная точка рисования дуги
Private Declare Function apiChord Lib "gdi32" Alias "Chord" _
(ByVal hDc As Long , _
ByVal X1 As Long , ByVal Y1 As Long , _


" Функция заливает круг с помощью выбранного "пера"
" (x1,y1 - x2,y2) ограничивающий прямоугольник для дуги
" (x3,y3) - начальная точка рисования "пером"
" (x4,y4) - конечная точка рисования дуги
Private Declare Function apiPie Lib "gdi32" Alias "Pie" _
(ByVal hDc As Long , _
ByVal X1 As Long , ByVal Y1 As Long , _
ByVal X2 As Long , ByVal Y2 As Long , _
ByVal X3 As Long , ByVal Y3 As Long , _
ByVal X4 As Long , ByVal Y4 As Long ) As Long

"==============================================================
" Назначение
" Нарисовать объекты
"
Private Sub butExecute_Click()
Dim hwnd As Long , hDc As Long "Окно и контекст рисования
Dim X1 As Long , Y1 As Long , X2 As Long , Y2 As Long
Dim xy(3) As POINTAPI "Точки рисования
On Error GoTo 999

"Очистить зону рисования
Me.Refresh
DoEvents

"Поиск окна для рисования. Это решение предложено
"Николаем Малютиным г.Якутск: [email protected]
hwnd = FindWindowEx(Me.hwnd, FindWindowEx(Me.hwnd, 0, "OFormSub" , "" ), "OFormSub" , "" )

"Выбираем контекст устройства
hDc = apiGetDC(hwnd)

"Координаты зоны рисования
X1 = 15
Y1 = 90
X2 = 180
Y2 = 250

"Рисуем объекты
Select Case Me.Объекты
Case 1: "Точка - красная
Call apiSetPixel(hDc, X2 / 2, Y2 / 2, RGB(255, 0, 0))
Case 2: "Линия
Call apiMoveTo(hDc, X1, Y1, xy(0)) "Передвигаем указатель
Call apiLineTo(hDc, X2, Y2) "Рисуем линию
Case 3: "Элипс
Call apiEllipse(hDc, X1, Y1, X2, Y2 / 2)
Case 4: "Прямоугольник - закрашенный
Call apiRectangle(hDc, X1, Y1, X2, Y2)
Case 5: "Дуга
Call apiArc(hDc, X1, Y1, X2, Y2, 50, 100, 150, 150)
Case 6, 7: "Ломаная, Заливка
" Загружаем координаты
xy(0).x = X1
xy(0).Y = Y1
xy(1).x = X1 + 20
xy(1).Y = Y2
xy(2).x = X2
xy(2).Y = Y2 - 20
If Me.Объекты = 6 Then "Ломаная
Call apiPolyline(hDc, xy(0), UBound(xy))
Else "Заливка
Call apiPolygon(hDc, xy(0), UBound(xy))
End If
Case 8: "Заливка круга до хорды
Call apiChord(hDc, X1, Y1, X2, Y2, 50, 100, 150, 150)
Case 9: "Заливка круга из центра
Call apiPie(hDc, X1, Y1, X2, Y2, 50, 100, 150, 150)
End Select

"Освобождаем контекст устройства
Call apiReleaseDC(hwnd, hDc)
Exit Sub
999:
MsgBox Err.Description "Ошибка
Err.Clear
End Sub

Все примеры Microsoft Access

© 2024
zane-host.ru - Программы. Компьютеры. Сетевое оборудование. Оргтехника