powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Q: как утнать ТИП объекта, котрый актив на скрине?
25 сообщений из 26, страница 1 из 2
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819195
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь вот так (может быть это и "через задницу"):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Function TypeNameScreenActive() As String
Dim s As Screen
Set s = Application.Screen
    Dim o
E1: On Error GoTo E2
         Set o = s.ActiveDatasheet
TypeNameScreenActive = "Datasheet"
GoTo End_SFP '--->>>------------------------------
E2: On Error GoTo E3
         Set o = s.ActiveReport
TypeNameScreenActive = "Report"
GoTo End_SFP '--->>>------------------------------
E3: On Error GoTo E4
         Set o = s.ActiveForm
TypeNameScreenActive = "Form"
GoTo End_SFP '--->>>------------------------------
E4: On Error GoTo E5
         Set o = s.ActiveDataAccessPage
TypeNameScreenActive = "DataAccessPage"
GoTo End_SFP '--->>>------------------------------
E5: On Error GoTo  0 
TypeNameScreenActive = "None"
End_SFP: End Function
- но только первый "On Error" отрабатывает как нада! :-(
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819203
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читай хелп по On Error
там все написано
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819216
Bagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот выдрал кусок из своей проги, возможно наведет на решение:
Код: plaintext
1.
2.
3.
Me.Controls(Screen.ActiveControl.Name).ControlType = acCommandButton Then
   .....
   .....
End If
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819242
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лох Позорныйчитай хелп по On Error
там все написано
- из песни, как грится, слова не выкинешь:

На диване я, как древней грек на травке,
Разбавляю, как Сократ, водой портвейн,
Генри Миллера читаю, Джойса, Кафку,
И снобизм свой, занюханный, лелею.

(http://www.bard.ru/cgi-bin/listprint.cgi?id=42.16)
Вы в самом деле думаете, что я не читал "хелп по On Error"?
Нельзя ли по-конкретней??
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819251
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы в самом деле думаете, что я не читал "хелп по On Error"?
по крайней мере читали его не внимательно

ф1An "enabled" error handler is one that is turned on by an On Error statement; an "active" error handler is an enabled handler that is in the process of handling an error. If an error occurs while an error handler is active (between the occurrence of the error and a Resume, Exit Sub, Exit Function, or Exit Property statement), the current procedure's error handler can't handle the error.
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819300
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Признаю свою ошибку, но лежачего не бьют! ;-)

Спасибо за науку. Переделал свою корявую процедуру в:
Код: 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.
Public Function TypeNameScreenActive() As String
Dim s As Screen, o
Set s = Application.Screen
E1: On Error GoTo E2
         Set o = s.ActiveDatasheet
TypeNameScreenActive = "Datasheet"
GoTo End_SFP '--->>>------------------------------
E2: Resume R2
R2: On Error GoTo E3
         Set o = s.ActiveReport
TypeNameScreenActive = "Report"
GoTo End_SFP '--->>>------------------------------
E3: Resume R3
R3: On Error GoTo E4
         Set o = s.ActiveForm
TypeNameScreenActive = "Form"
GoTo End_SFP '--->>>------------------------------
E4: Resume R4
R4: On Error GoTo E5
         Set o = s.ActiveDataAccessPage
TypeNameScreenActive = "DataAccessPage"
GoTo End_SFP '--->>>------------------------------
E5:
TypeNameScreenActive = "None"
End_SFP: End Function
- заработало ...
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819312
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хоть лежачего и не бьют, однако поглумиться над трупом можно :)

проще было один раз написать On Error Resume Next, а потом проверять Err.Number в нужных местах.
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819356
И всё же, я как-то не уловил, почему не годится очевидное решение вроде нижеприведённого?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Select Case Application.Screen.ActiveControl.ControlType
   Case acCommandButton
       MsgBox "CommandButton"
   Case acCheckBox
       MsgBox "CheckBox"
   Case acTextBox
       MsgBox "TextBox"
End Select
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819358
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
On Error Resume Next
Set o = s.ActiveDatasheet
if not o Is Nothing Then Set o = s.ActiveReport
if not o Is Nothing Then Set o = s.ActiveForm
...
On Error Resume  0 
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819359
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вот так:
Код: plaintext
1.
If TypeOf Screen.Activecontrol Is Editbox Then
ElseIf
ну и далее по тексту
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819375
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, процедура должна отрабатывать также и ситуацию, когда на скрине нет ничего ... моего.
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819381
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тимур РахимовИ всё же, я как-то не уловил, почему не годится очевидное решение вроде нижеприведённого?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Select Case Application.Screen.ActiveControl.ControlType
   Case acCommandButton
       MsgBox "CommandButton"
   Case acCheckBox
       MsgBox "CheckBox"
   Case acTextBox
       MsgBox "TextBox"
End Select

Потому что, как я понял, нужно выяснить не тип активного контрола, а тип активного объекта (форма, таблица, отчет, страница доступа к данным).

Тип активного контрола - выясняется с помощью TypeOf Screen.ActiveControl

Тип активного объекта можно определить только (может и не только, но наиболее просто) перебором методов Screen.ActiveForm и т.д. с обработкой ошибок.
Проверка TypeOf Screen.ActiveControl.Parent не годится (на активном объекте может не быть активного контрола).
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819401
MLeon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
Function ActiveItem() As String
    Dim v As Object
    On Error GoTo wrong
    ActiveItem = "Datasheet"
    Set v = Screen.ActiveDatasheet
    If ActiveItem = "" Then
        ActiveItem = "Report"
        Set v = Screen.ActiveReport
        If ActiveItem = "" Then
            ActiveItem = "Form"
            Set v = Screen.ActiveForm
            If ActiveItem = "" Then
                ActiveItem = "Control"
                Set v = Screen.ActiveControl
            End If
        End If
    End If
wrong:
    Select Case err.Number
    Case  0 
        Exit Function
    Case  2474    'not a control
        ActiveItem = ""
        Resume Next
    Case 2475   'not a form
        ActiveItem = ""
        Resume Next
    Case  2476    'not a report
        ActiveItem = ""
        Resume Next
    Case 2484   'not a datasheet
        ActiveItem = ""
        Resume Next
    Case Else
        MsgBox err.Description, , err.Number
    End Select
End Function
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819436
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ударим автопробегом по бездорожью и разгильдяйству:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function TypeNameScreenActive() As String
                        With Application.Screen
On Error Resume Next
If .ActiveForm Is Nothing Then
    If .ActiveDatasheet Is Nothing Then
        If .ActiveReport Is Nothing Then
            If .ActiveDataAccessPage Is Nothing Then
                Dim answer As String
                    answer = "None"
            Else:   answer = "DataAccessPage"
            End If
        Else:       answer = "Report"
        End If
    Else:           answer = "Datasheet"
    End If
Else:               answer = "Form"
End If:                                 End With
TypeNameScreenActive = answer
End_SFP: End Function
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819459
Лох ПозорныйПотому что, как я понял, нужно выяснить не тип активного контрола, а тип активного объекта (форма, таблица, отчет, страница доступа к данным).

Тип активного объекта можно определить только (может и не только, но наиболее просто) перебором методов Screen.ActiveForm и т.д. с обработкой ошибок.

Ага, спасибо, я понял это, как только внимательно перечитал ранее написанное здесь. В таком случае, как я понимаю, речь может идти только о наиболее экономно написанном коде. Применение On Error Resume Next мне кажется наиболее удобным подходом. Воспользовавшись идеей, предложенной "Программист-Любитель", рискну предложить такой вариант кода:

Код: plaintext
Dim obj As Object\nDim strTypeName As String\n\nOn Error Resume Next\n\nstrTypeName = "Unknown"\n\nIf obj Is Nothing Then Set obj = Screen.ActiveDatasheet: strTypeName = "Datasheet"\nIf obj Is Nothing Then Set obj = Screen.ActiveForm:  strTypeName = "Form"\nIf obj Is Nothing Then Set obj = Screen.ActiveReport: strTypeName = "Report"\nIf obj Is Nothing Then Set obj = Screen.ActiveDataAccessPage: strTypeName = "DataAccessPage"\n\nOn Error GoTo  0 \n\nMsgBox strTypeName\n\'...

Вместо strTypeName , разумеется, в зависимости от задачи, можно использовать и целочисленную переменную (перечислимый тип).
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819478
Мда, а ошибочку я таки у себя нашёл. В случае, если никакой объект из перечисленных не является активным, приведённый код вернёт DataAccessPage вместо ожидаемого Unknown . Торопиться вредно :).

Подумаю, как код модифицировать.
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819483
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
модифицировать оч просто:
убрать строчку
Код: plaintext
strTypeName = "Unknown"
добавить в конец проверок строчку
Код: plaintext
If obj Is Nothing Then strTypeName = "Unknown"
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819492
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тимур Рахимов
Код: plaintext
1.
2.
3.
4.
...
If obj Is Nothing Then Set obj = Screen.ActiveDatasheet: strTypeName = "Datasheet"
If obj Is Nothing Then Set obj = Screen.ActiveForm:  strTypeName = "Form"
...

У меня вопросик - форма, открытая как Datasheet, будет давать strTypeName = "Form", хотя не будет давать ошибки и на Set obj = Screen.ActiveForm
И вообще, что Иван FXS понимал под типом объекта? Datasheet - это тип объекта? Для более точного знания типа открытого объекта надо добавить свойство Application.CurrentObjectType которое возвращает AcObjectType
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819501
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Serge GavrilovУ меня вопросик - форма, открытая как Datasheet, будет давать strTypeName = "Form", хотя не будет давать ошибки и на Set obj = Screen.ActiveForm[/quot]

Опечатался, хотел сказать, что форма, открытая как Datasheet, будет и Screen.ActiveDatasheet и Screen.ActiveForm ...
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819509
Serge Gavrilov , что касается Datasheet - совершенно верно. В "раздумьях" о том, как наилучшим образом модифицировать код, я тоже задумался об этом. Видимо, с практической точки зрения будет достаточно изменить порядок проверки: проверять сначала на наличие Screen.ActiveDatasheet, и лишь затем на Screen.ActiveForm.

Лох Позорный:
Благодарю :).
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819522
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тимур Рахимов Видимо, с практической точки зрения будет достаточно изменить порядок проверки: проверять сначала на наличие Screen.ActiveDatasheet, и лишь затем на Screen.ActiveForm.
С практической точки зрения я бы, наверное, проверил наличие активного объекта, а потом получил бы его тип через Application.CurrentObjectType
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819529
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
MsgBox TypeName(Application.Screen.ActiveControl)
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819535
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычMsgBox TypeName(Application.Screen.ActiveControl)
Саныч, читай топик с самого начала
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819539
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Лох ПозорныйСаныч, читай топик с самого начала
И чё? Там этого варианта нет.
...
Рейтинг: 0 / 0
Q: как утнать ТИП объекта, котрый актив на скрине?
    #32819540
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Q: как утнать ТИП объекта, котрый актив на скрине?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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