Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание эл-тов управления... / 25 сообщений из 26, страница 1 из 2
05.06.2003, 15:11:18
    #32177485
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
Уважаемый All, насколько я понимаю, создать элемент управления на форме можно только в режиме конструктора. А как с помощью VBA создать, к примеру, прямоугольник с определенными свойствами, если пользователь нажмет на кнопку в открытой форме? Или все же делать этот ректангл скрытым до момента нажатия на кнопку?
...
Рейтинг: 0 / 0
05.06.2003, 15:41:58
    #32177550
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
...поясню...
Есть задача прорисовывать прямоугольники с заданными в полях шириной и высотой в определенном месте формы при нажатии на кнопку. Как реализовать? Скажите от чего плясать, дальше сам разберусь, плиз...
...
Рейтинг: 0 / 0
05.06.2003, 15:52:50
    #32177569
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
Был бы Vb6, делалось бы наподобие
Dim NewShape as Control (?)
Set NewShape = new ИмяУжеИмеющегосяШейпаНаФорме

вроде бы так, точно не помню, а проверить не на чем...
...
Рейтинг: 0 / 0
05.06.2003, 16:10:40
    #32177602
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
...попробовал, не хочет создавать нью объект...
...
Рейтинг: 0 / 0
05.06.2003, 16:14:13
    #32177609
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
А заранее можно наделать (с запасом) этих прямоугольников?
Если можно - то лучше менять их свойства (ширину/толщину/координаты) и показывать, чем создавать новые. к тому же создание новых возможно только в mdb - в mde этого сделать не получиться
...
Рейтинг: 0 / 0
05.06.2003, 16:19:54
    #32177619
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
>Senin Viktor

заранее можно, но это будет примерно около 50-ти штук. Всякий раз по разному. Чаще конечно не более 10-ти... Вот и я к тому, что придется наверное играть лефтами да топами, хайтами да вайтами...

а все-таки, если это возможно в mdb, то как?
...
Рейтинг: 0 / 0
05.06.2003, 16:23:42
    #32177622
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
...грубо говоря хотят сделать упрощенный вариант компоновочной программы дабы операторам удобно было визуально определять наиболее оптимальный способ расположения изображений на одном листе...
...
Рейтинг: 0 / 0
05.06.2003, 16:39:54
    #32177643
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
...кстати говоря, а про реализацию Drag&Drop с этими прямоугольниками кто может подсказать? Я пытался ловить координаты мыши и тем самым отслеживать какой прямоугольник тащить. Может есть что-то уже реализованное с перетаскиванием?
...
Рейтинг: 0 / 0
05.06.2003, 16:58:40
    #32177678
АлексейЕ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
Для создания контролов см. Функции CreateControl, CreateReportControl
...
Рейтинг: 0 / 0
05.06.2003, 17:00:31
    #32177681
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
А нельзя ли (.mdb) открыть экземпляр (as new), при манипуляциях редактировать (в режиме конструктора в скрытом виде)) базовый экземпляр сабформы, а по окончании (текущей манипуляции) - сохранять базовый и заменять открытый экземпляр. Тогда достаточно иметь на форме по одному "запасному" объекту каждого типа, на любой момент времени. (с которыми и манипулировать).

Видел кстати проект, где "рабочим" файлом был .mdb (именно для динамического конструирования), а библиотеки хранились в .mde
...
Рейтинг: 0 / 0
05.06.2003, 17:51:21
    #32177761
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
>АлексейЕ
см. Функции CreateControl, CreateReportControl

эти функции работают только в режиме конструктора, в том и петрушка...

>All

...то есть я так понял в mdb, в момент необходимости создания объекта, программно переключать форму в режим конструктора, затем создавать нужные контролы с помощью CreateControl и снова переключаться в режим формы? А не слишком ли это муторно и долго в плане ожидания пользователем нежели вариант с уже встроенными скрытыми контролами?

P.S: Кстати, а с перетаскиванием как бороться? Мож кто подскажет...
...
Рейтинг: 0 / 0
05.06.2003, 18:03:34
    #32177790
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
ИМХО, наблюдается попытка использования среды Access для несвойственных для нее функций.
Только без обид.
Для таких задач нужны другие средства.
...
Рейтинг: 0 / 0
05.06.2003, 18:19:09
    #32177820
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
>incold

Ни каких обид, я сам это понимаю. Просто не работал с другими "средствами". Так, с Дельфи баловался немножко. Просто здесь необходимо сочетание БД и такой вот фигни. БД в Аксессе, посему и фигню эту тож в Аксессе пыркаюсь сделать. А что метры (читай мЭтры) посоветуют?
...
Рейтинг: 0 / 0
05.06.2003, 18:26:40
    #32177829
wara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
incold,
И какие же это средства?
...
Рейтинг: 0 / 0
05.06.2003, 18:37:02
    #32177840
incold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
Насколько я понял, идет попытка совместить базу данных с каким-то графическим построителем.
А Access, прежде всего, предназначен для учета данных.
Я не говорил, что знаю какие средства нужно использовать.
Я сказал, что Access для этого не очень подходит (а точнее очень не подходит).
Может для такой задачи Ексель больше подойдет? Может еще что-нибудь?
Тут я затрудняюсь сказать.

Конечно на Access многое можно сделать, и потом говорить вот какой я крутой программист, вот только нужно ли все это делать?
...
Рейтинг: 0 / 0
05.06.2003, 18:44:05
    #32177845
wara
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
А вообще, программное создание контролов - это вообще разрешимая задача? Ведь, если подумать, мы, конструируя эти контролы через GUI Access или еще чего, все равно создаем какой-то код - что за контрол, какие свойства, какие данные, процедуры обработки,... А потом эта "статическая" информация хранится. А ведь было бы гораздо интереснее создавать их в момент выполнения программы, а затем уничтожать. Тогда бы мы могли задавать лишь алгоритмы обработки (форматирования) форм, а не хранили бы данные - в каком месте формы стоит какой контрол.
(Да простят меня спецы, если глупость сморозил)
...
Рейтинг: 0 / 0
05.06.2003, 18:46:54
    #32177848
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
нет. "работающая форма" - всегда новый экземпляр (Set F = new Form_BASIS). Основной (Form_BASIS - то что хранится в базе) - всегда в режиме конструктора (скрыт). При изменении в "работающем" экземпляре (вызове скрытого контрола) - добавить новый скрытый в основной и сохранить. По завершении манипуляций с "извлеченным контролом" скопировать все свойства контролов с "работающего экземпляра" в скрытый (стандартный двойной цикл по контролам и их свойствам), находящийся в режиме конструктора и сохранить. разрушить "работающий экземпляр" и создать новый работающий из только что сохраненного основного. Опять в нем по одному скрытому объекту каждого вида.


Есть и иной подход - попробовать проанализировать предметную область, выделить классы задач. Для каждого класса - свой шаблон с максимально необходимым количеством скрытых контролов (именно под этот класс задач). Методы (обработчики манипуляций) могут быть общими.
__
ЗЫ: а чем плохо позаимствовать не аксесовскую форму (как ActiveX) с возможностью (методами) кидать на нее (ее, не аксессовские) контролы в рабочем режиме? Или я не прав?
...
Рейтинг: 0 / 0
05.06.2003, 19:52:24
    #32177883
Rusty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
"...грубо говоря хотят сделать упрощенный вариант компоновочной программы дабы операторам удобно было визуально определять наиболее оптимальный способ расположения изображений на одном листе..."
2 G&P
Кстати, имеется аналогичная (более или менее) задача. Интересно было бы услышать решение. Хотя бы- куда копать?..
...
Рейтинг: 0 / 0
08.06.2003, 02:18:37
    #32179065
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
К вопросу о визуальном представлении информации в MS Access...
Не хочу бить себя пяткой в грудь, но собаку я на этом съел :)

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

Наша задача была следущей: есть музей - поэтажные планы начерченые в AutoCad, есть экспонаты - у каждого инвентарный номер. Требуется: схематично нанести экспонаты на планы (как квадратики) и иметь возможность перетаскивать эти квадратики с места на место, отслеживая, реальное перемещение экспонатов.

Берем чертёж, переводим его в формат wmf (Windows Meta File) и кладём его как картинку на backgroung формы. Потом создаём квадратики: Label (надпись) - столько сколько нам может потребоваться (Экспериментально найдено что форма можен "снести" около 750 элементов управления) и делаем их невидимыми.

Работает это так: есть таблица с экспонатами (ЭкспонатID, инвентарный номер, описание и т.д.) и таблица которая описывает положение квадратика на плане (КвадратикID, ЭкспонатID, ИмяПлана, КоординатаX, КоординатаY).
Специальная процедура берет записи из второй таблицы и расставляет квадратики в соответствии с координатами. При перетаскивании квадратика, на событие MouseUp, новые координаты считываются и заносятся в таблицу.

Надо сказать - система работает превосходно: во время очередной инвентаризации, просто распечатывают схему и сличают её с реальной обстановкой.

Если кому интересны технические решения - пишите постараюсь ответить.
...
Рейтинг: 0 / 0
08.06.2003, 09:28:55
    #32179078
Нуф-нуф
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
А еще можно создать форму без заголовка, кнопок, и прочих рюшечек, сделать ее всплывающей и не скрываемой (постоянно поверх остальных), вставить в нее ваш прямоугольник и позиционировать ее на экране так, как заблагорассудится.
При необходимости можно создать еще одну копию такой формы, настроить ее и опять вывести и спозиционировать там где надо, и еще одну, и еще...

Но все это, конечно, имхо...
...
Рейтинг: 0 / 0
09.06.2003, 10:59:40
    #32179319
G&P
G&P
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
2lobodava:

При перетаскивании квадратика, на событие MouseUp, новые координаты считываются и заносятся в таблицу.
Если кому интересны технические решения - пишите постараюсь ответить.


Интересное решение. Можно поподробней?
...
Рейтинг: 0 / 0
09.06.2003, 12:58:07
    #32179457
АлексейЕ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
http://am.rusimport.ru/MsAccess/f2.aspx?id=2607
...
Рейтинг: 0 / 0
15.06.2003, 00:53:04
    #32182608
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
G&P:
Интересное решение. Можно поподробней?

Да не вопрос :)

Для начала надо создать новый модуль класса с именем clsActionLabel и скопировать в него этот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
Private WithEvents mlblLabel As Label
Private mfrmForm As Form
Private mlngOldX As Long, mlngOldY As Long
Private mlngOldXForDblClick As Long, mlngOldYForDblClick As Long
Private mstrFunctionOnClick As String, mstrFunctionOnDblClick As String
Private mstrFunctionOnMouseDown As String, mstrFunctionOnMouseMove As String, mstrFunctionOnMouseUp As String

Public TopBorder As Long, BottomBorder As Long, LeftBorder As Long, RightBorder As Long
Public HorizontalMove As Boolean, HorizontalSizing As Boolean, HorizontalSizePointer As Boolean
Public VerticalMove As Boolean, VerticalSizing As Boolean, VerticalSizePointer As Boolean
Public ShiftKey As Boolean, AltKey As Boolean, CtrlKey As Boolean
Public LeftButton As Boolean, RightButton As Boolean
Public CoordinateX As Long, CoordinateY As Long

Private mbytBorder As Byte

Public Property Get Label() As Label
Set Label = mlblLabel
End Property
Public Property Set Label(lblNewLabel As Label)
Set mlblLabel = lblNewLabel
Set mfrmForm = mlblLabel.Parent
RightBorder = mfrmForm.Width
BottomBorder = mfrmForm.Section( 0 ).Height
End Property

Private Sub mlblLabel_Click()
If Len(mstrFunctionOnClick) >  0  Then Application.Run mstrFunctionOnClick, Me
End Sub

Private Sub mlblLabel_DblClick(Cancel As Integer)
mlngOldX = mlngOldXForDblClick
mlngOldY = mlngOldYForDblClick
If Len(mstrFunctionOnDblClick) >  0  Then Application.Run mstrFunctionOnDblClick, Me
End Sub

Private Sub mlblLabel_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
mlngOldX = X
mlngOldY = Y
mlngOldXForDblClick = X
mlngOldYForDblClick = Y

If Len(mstrFunctionOnMouseDown) >  0  Then
    Call SetKeysButtonsCoordinates(Button, Shift, X, Y)
    Application.Run mstrFunctionOnMouseDown, Me
    Call SetKeysButtonsCoordinates
End If
End Sub

Private Sub mlblLabel_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim lngNewX As Long, lngNewY As Long

If Len(mstrFunctionOnMouseMove) >  0  Then
    Call SetKeysButtonsCoordinates(Button, Shift, X, Y)
    Application.Run mstrFunctionOnMouseMove, Me
    Call SetKeysButtonsCoordinates
End If

If Screen.MousePointer =  0  Then
    If HorizontalMove Then
        lngNewX = mlblLabel.Left + X - mlngOldX
        If lngNewX >= Me.LeftBorder And lngNewX <= Me.RightBorder - mlblLabel.Width Then
           mlblLabel.Left = lngNewX
        ElseIf lngNewX < Me.LeftBorder Then
           mlblLabel.Left = Me.LeftBorder
        ElseIf lngNewX > Me.RightBorder - mlblLabel.Width Then
           mlblLabel.Left = Me.RightBorder - mlblLabel.Width
        End If
    End If
    
    If VerticalMove Then
        lngNewY = mlblLabel.Top + Y - mlngOldY
        If lngNewY >= Me.TopBorder And lngNewY <= Me.BottomBorder - mlblLabel.Height Then
           mlblLabel.Top = lngNewY
        ElseIf lngNewY < Me.TopBorder Then
           mlblLabel.Top = Me.TopBorder
        ElseIf lngNewY > Me.BottomBorder - mlblLabel.Height Then
           mlblLabel.Top = Me.BottomBorder - mlblLabel.Height
        End If
    End If
End If

If Not (HorizontalSizing Or VerticalSizing) Then
    If  0  < X And X <  45  Then
        mbytBorder =  1 
    ElseIf mlblLabel.Width -  45  < X And X < mlblLabel.Width Then
        mbytBorder =  3 
    ElseIf  0  < Y And Y <  45  Then
        mbytBorder =  2 
    ElseIf mlblLabel.Height -  45  < Y And Y < mlblLabel.Height Then
        mbytBorder =  4 
    Else
        mbytBorder =  0 
    End If
    
    If mbytBorder =  1  Or mbytBorder =  3  And HorizontalSizePointer Then
        Screen.MousePointer =  9 
    ElseIf mbytBorder =  2  Or mbytBorder =  4  And VerticalSizePointer Then
        Screen.MousePointer =  7 
    Else
        Screen.MousePointer =  0 
    End If
End If

If HorizontalSizing And Screen.MousePointer =  9  Then
    If mbytBorder =  1  Then
        If mlblLabel.Width - X >=  60  Then
            If mlblLabel.Left + X >= Me.LeftBorder Then
                mlblLabel.Width = mlblLabel.Width - X
                mlblLabel.Left = mlblLabel.Left + X
            End If
        Else
            mlblLabel.Width =  60 
        End If
    Else
        If X >  60  Then
            If mlblLabel.Left + X <= Me.RightBorder Then mlblLabel.Width = X
        Else
            mlblLabel.Width =  60 
        End If
    End If
End If

If VerticalSizing And Screen.MousePointer =  7  Then
    If mbytBorder =  2  Then
        If mlblLabel.Height - Y >=  60  Then
            If mlblLabel.Top + Y >= Me.TopBorder Then
                mlblLabel.Height = mlblLabel.Height - Y
                mlblLabel.Top = mlblLabel.Top + Y
            End If
        Else
            mlblLabel.Height =  60 
        End If
    Else
        If Y +  15  >  60  Then
            If mlblLabel.Top + Y <= Me.BottomBorder Then mlblLabel.Height = Y
        Else
            mlblLabel.Height =  60 
        End If
    End If
End If
End Sub


Private Sub mlblLabel_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
mlngOldX =  0 
mlngOldY =  0 

If Len(mstrFunctionOnMouseUp) >  0  Then
    Call SetKeysButtonsCoordinates(Button, Shift, X, Y)
    Application.Run mstrFunctionOnMouseUp, Me
    Call SetKeysButtonsCoordinates
End If
End Sub

Public Property Get OnClick() As String
OnClick = mstrFunctionOnClick
End Property
Public Property Let OnClick(ByVal strNewValue As String)
mstrFunctionOnClick = strNewValue
If Len(mstrFunctionOnClick) >  0  Then mlblLabel.OnClick =  "[Event Procedure]" 
End Property

Public Property Get OnDblClick() As String
OnDblClick = mstrFunctionOnDblClick
End Property
Public Property Let OnDblClick(ByVal strNewValue As String)
mstrFunctionOnDblClick = strNewValue
If Len(mstrFunctionOnDblClick) >  0  Then mlblLabel.OnDblClick =  "[Event Procedure]" 
End Property

Public Property Get OnMouseUp() As String
OnMouseUp = mstrFunctionOnMouseUp
End Property
Public Property Let OnMouseUp(ByVal strNewValue As String)
mstrFunctionOnMouseUp = strNewValue
If Len(mstrFunctionOnMouseUp) >  0  Then mlblLabel.OnMouseUp =  "[Event Procedure]" 
End Property

Public Property Get OnMouseMove() As String
OnMouseMove = mstrFunctionOnMouseMove
End Property
Public Property Let OnMouseMove(ByVal strNewValue As String)
mstrFunctionOnMouseMove = strNewValue
If Len(mstrFunctionOnMouseMove) >  0  Then
    mlblLabel.OnMouseMove =  "[Event Procedure]" 
    mlblLabel.OnMouseUp =  "[Event Procedure]" 
    mlblLabel.OnMouseDown =  "[Event Procedure]" 
End If
End Property

Public Property Get OnMouseDown() As String
OnMouseDown = mstrFunctionOnMouseDown
End Property
Public Property Let OnMouseDown(ByVal strNewValue As String)
mstrFunctionOnMouseDown = strNewValue
If Len(mstrFunctionOnMouseDown) >  0  Then mlblLabel.OnMouseDown =  "[Event Procedure]" 
End Property

Private Sub SetKeysButtonsCoordinates(Optional intButton As Integer =  0 , Optional intKey As Integer =  0 , Optional sinCoordinateX As Single =  0 , Optional sinCoordinateY As Single =  0 )
Me.LeftButton = (intButton And acLeftButton) >  0 
Me.RightButton = (intButton And acRightButton) >  0 
Me.ShiftKey = (intKey And acShiftMask) >  0 
Me.CtrlKey = (intKey And acCtrlMask) >  0 
Me.AltKey = (intKey And acAltMask) >  0 
Me.CoordinateX = CLng(sinCoordinateX)
Me.CoordinateY = CLng(sinCoordinateY)
End Sub


Теперь создаём форму и в разделе Detail рисуем два лэйбла: lblTest1 и lblTest2.
А в модуле формы пишем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Private mcolActionLabels As Collection

Private Sub Form_Open(Cancel As Integer)
Dim albActionLabel As clsActionLabel
Dim i As Integer
 
Set mcolActionLabels = New Collection

For i =  1  To  2 
    Set albActionLabel = New clsActionLabel
    Set albActionLabel.Label = Me( "lblTest"  & Trim(Str(i)))
    albActionLabel.OnMouseMove =  "OnLabelMouseMove" 

'    albActionLabel.OnClick = "OnLabelClick"
'    albActionLabel.OnDblClick =  "OnLabelDblClick" 
'    albActionLabel.OnMouseDown = "OnLabelMouseDown"
'    albActionLabel.OnMouseUp =  "OnLabelMouseUp" 
    
    mcolActionLabels.Add albActionLabel, albActionLabel.Label.Name
Next
End Sub


И последний штрих - создаём новый модуль (не модуль класса, а просто модуль),
называем его как хотим и пишем код, который будет управлять поведением всех лэйблов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function OnLabelMouseMove(albActionLabel As clsActionLabel)
albActionLabel.HorizontalMove = albActionLabel.LeftButton
albActionLabel.HorizontalSizePointer = True
albActionLabel.HorizontalSizing = albActionLabel.LeftButton

albActionLabel.VerticalMove = albActionLabel.LeftButton 
albActionLabel.VerticalSizePointer = True
albActionLabel.VerticalSizing = albActionLabel.LeftButton
End Function


Теперь осталось всё сохранить, открыть форму и протестировать:
наводим мышь на один из лэйблов, жмём левую клавишу и тащим...
наводим мышь на край лэйбла (курсор изменяется) жмём левую клавишу и изменяем размеры.

Если в Функции OnLabelMouseMove написать:
Код: plaintext
1.
2.
albActionLabel.HorizontalMove = albActionLabel.RightButton
albActionLabel.HorizontalSizePointer = albActionLabel.CtrlKey
albActionLabel.HorizontalSizing = albActionLabel.LeftButton and albActionLabel.CtrlKey

то лэйбл в горизонтальном направлении будет двигаться только при правой нажатой клавише мыши,
а ширину будет менять только если удерживать Ctrl и нажимать левую клавишу мыши.
(ну это так, как пример...)

А теперь к вопросу "Как этим пользоваться?"
Допустим надо считывать позицию только что передвинутого лейбла.
В нашем примере лэйблов всего два и можно было бы для каждого написать код на событие MouseUp,
но ничего не стоит нарисовать пятьсот лейблов и тогда для каждого писать код (причём одинаковый) - застрелиться.
Выход: написать функцию, которую только что отпущеный лэйбл будет вазывать передавая ссылку на себя как аргумент:
Код: plaintext
1.
2.
3.
4.
Public Function OnLabelMouseUp(albActionLabel As clsActionLabel)
MsgBox  "Label Name = "  & albActionLabel.Label.Name
MsgBox  "Label Top = "  & albActionLabel.Label.Top 
MsgBox  "Label Left = "  & albActionLabel.Label.Left 
End Function


!!! Надо только не забыть "раскомментировать" строку в модуле формы:
' albActionLabel.OnMouseUp = "OnLabelMouseUp"

Ну, это, я пошёл... Будут вопросы, заходи...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
20.08.2004, 20:09:46
    #32659866
lobodava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
А я вот тут примерчик сделал... Наконец-то...
...
Рейтинг: 0 / 0
20.08.2004, 20:33:58
    #32659876
xax_nv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Создание эл-тов управления...
Класс!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Создание эл-тов управления... / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]