Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Как нарисовать на форме квадрат и перерисовывать е


Автор: User32 8.7.2010, 17:07
Имею Access 2003 и нарисованный квадрат на форме.
При перемещении формы за пределы экрана квадрат стирается.
Как избежать затирания или перерисовывать его заново?

Автор: Akina 8.7.2010, 17:09
В MS Access не существует типа объекта "Квадрат".

Автор: User32 8.7.2010, 17:20
Цитата(Akina @ 8.7.2010,  17:09)
В MS Access не существует типа объекта "Квадрат".

Естественно, я рисую его через API функции используя gdi32.dll
Просто не совсем ясно выразился. Но не суть, суть то в чем, к примеру рисуем мы так на форме

Код

Public Sub Test123()

Dim hbrush As Long 
Dim r As RECT 
Dim retval As Long 
Dim ReturnGP As Long
Dim hdc As Long

hdc = GetWindowDC(Me.hwnd)
retval = SetRect(r, 100, 100, 200, 200) 
hbrush = CreateHatchBrush(HS_DIAGCROSS, RGB(0, 0, 255))
retval = FillRect(hdc, r, hbrush)
retval = DeleteObject(hbrush)
retval = SelectObject(hdc, holdbrush)
retval = DeleteObject(hbrush)
ReturnGP = ReleaseDC(Me.hwnd, hdc)

End Sub

А потом форму перетаскиваем за пределы экрана и возвращаем обратно.
И получаем что вся наша мазня потерлась...


Автор: Akina 8.7.2010, 18:05
Правильно. И должна была потереться. 
Отслеживай событие перемещения формы (и изменения размеров тоже) и при необходимости перерисовывайся. Или откажись от API.

Автор: User32 9.7.2010, 09:32
Цитата(Akina @ 8.7.2010,  18:05)
Отслеживай событие перемещения формы (и изменения размеров тоже) и при необходимости перерисовывайся.

Вот в этом и вопрос. Что за событие когда форма выходит за пределы экрана, ведь в Access не снабжен полноценным VB и потому очень сильно ограничен в методах и событиях.
К примеру в Visual Basic 6.0 что из пакета VS6.0 есть событие Paint.
Вешаем нашу процедуру на событие и забываем о этой проблеме...

Код

Private Sub Form_Paint()
  MsgBox "77777777777777777777777777777777"
End Sub


А в Access этого нет. Вот как быть в этом случаи?

Автор: Akina 9.7.2010, 09:35
Цитата(User32 @  9.7.2010,  10:32 Найти цитируемый пост)
Что за событие когда форма выходит за пределы экрана

Form.Move, ё моё!

Цитата(User32 @  9.7.2010,  10:32 Найти цитируемый пост)
К примеру в Visual Basic 6.0 что из пакета VS6.0 есть событие Paint.

BeforeRender
AfterRender
AfterFinalRender
И тебе ещё мало?

Автор: User32 9.7.2010, 12:17
Цитата(Akina @ 9.7.2010,  09:35)
Цитата(User32 @  9.7.2010,  10:32 Найти цитируемый пост)
Что за событие когда форма выходит за пределы экрана

Form.Move, ё моё!

Ё - твоё, где же это у VB что в Access 2003 событие Move?


Автор: bopoha 12.7.2010, 14:52
Придется через WinAPI получать это событие.

Автор: User32 27.7.2010, 14:44
Цитата(bopoha @ 12.7.2010,  14:52)
Придется через WinAPI получать это событие.

Это понятно, но как?

Автор: bopoha 23.8.2010, 11:49
Пример см. тут.
http://support.microsoft.com/kb/278379

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)