powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Многооконный интерфейс
14 сообщений из 14, страница 1 из 1
Многооконный интерфейс
    #32376710
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто нибудь пробывал делать по НАСТОЯЩЕМУ многооконный интерфейс в Access?
чтобы можно было держать на экране сразу несколько одинаковых(но разных по данным) цепочек форм.
Т.е. отказатся от сервиса DoCmd и сделать свой.
с какими проблеммами сталкивались на этом пути?

Вот ,например,когда когда я уничтожаю экземпляр формы
убивая ссылку на нее (Set frm = Nothing)

переменные объявленные в модуле формы обнуляются,
и при отработке события Form_Unload
инициированного этим убиванием ссылки
они равны 0,а если сделать в этом событии Cancel =True,
то форма не закроется , а ссылка уже Nothing ,
как же ее после этого уничтожить програмно?
Что происходит внутри метода DoCmd.Close acForm ,
ведь он закрывает форму корректно?
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376719
AlTis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вопрос по реализации нескольких экземпляров формы.
Работающий пример:
Код: 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.
Private colForms As New Collection 'Коллекция форм
Private mintForm As Integer 'Количество форм в коллекции

Public Sub acbAddForm()
    Dim frm As Form
    Dim retval As Long ' возвращаемое значение
    
    Set frm = New Form_FrmSpravConsultantPct
  
    colForms.Add Item:=frm, Key:=frm.hWnd &  ""
   
    mintForm =mintForm +1 

    frm.Caption = frm.Caption & "  " & mintForm
    
    
    frm.Visible = True

end sub

Public Sub acbRemoveForm(frm As Form)

    On Error Resume Next
    mintForm = mintForm - 1 
    colForms.Remove frm.hWnd & ""
    On Error GoTo  0 
End Sub

Public Sub acbRemoveAllForms()
    Dim varForm As Variant

    mintForm =  0 
    For Each varForm In colForms
        colForms.Remove  1 
    Next varForm
End Sub


где Form_FrmSpravConsultantPct - ваша форма.
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376874
Хам трамвайный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т1 стр 445
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376920
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос по реализации методов DoCmd
применительно к открытым таким образом формам

после отработки acbRemoveForm
Удаляется ссылка и инициируеся закрытие формы
Но
>переменные объявленные в модуле формы обнуляются,
>и при отработке события Form_Unload
>инициированного этим убиванием ссылки
>они равны 0,а если сделать в этом событии Cancel =True,
>то форма не закроется , а ссылка уже Nothing ,
>как же ее после этого уничтожить програмно?
>Что происходит внутри метода DoCmd.Close acForm ,
>ведь он закрывает форму корректно?

При закрытии обычной формы методом DoCmd.Close acForm
переменные объявленные в модуле формы сохраняют свои значения
во время отработки событий закрытия,
а во время закрытия экземпляра формы через удаление ссылки на нее
обнуляются.
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376950
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Хам трамвайный
Гец по этому случаю делает форму активной и закрывает ее
DoCmd.Close
Но получается , что для этого надо сделать форму видимой,
а это не всегда удобно.

Вот и хочется узнать как DoCmd.Close работает
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376958
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Но получается , что для этого надо сделать форму видимой, а это не всегда удобно.

А так?

on error resume next
docmd.echo false
frm.visible = true
frm.setfocus
docmd.close
if err.number = 0 then set frm=nothing else frm.visible = false
docmd.echo true
on error goto 0
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376966
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточню вопрос.
Как инициировать закрытие формы,
не удаляя ссылки на нее , и не пользуясь DoCmd.Close ?
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32376978
Фотография Geo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/topic/47734\r
\r
Может, найдешь что-то интересное.\r
\r
PS. Я так и не знаю, как и почему работает form_1.visible = true.\r
\r
PPS. А может быть, в твоем случае лучше будет сделат "мюнхаузенские" экземпляры?
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32377004
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>лучше будет сделат "мюнхаузенские" экземпляры
Как раз с ним у меня проблеммы.
Форма асинхронно выполняет процедуру имея ссылку на себя в себе.
Форма не видима.
После завершения процедуры форма должна закрытся.
Как инициировать ее закрытие ?
Уничтожаю ссылку - слетают переменные.
DoCmd.Close - но я не хочу делать форму видимой.

Судя по всему придется извращатся типа
Application.Echo False
frm.visible=true
frm.SetFocus
DoCmd.Close
Application.Echo true

А всего то надо DoCmd.Close но с возможностью передать ссылку.
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32377115
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Latuk
чтобы закрыть, форму используй:
Код: plaintext
Call SendMessage(frm.hWnd, WM_CLOSE,  0 &,  0 &)

а для того чтобы не оставылись "подвисшие" ссылки на форму, обрабатывай событие OnClose (WithEvents).
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32377264
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Shkurenko Alexander
Вроде то что надо.
Это кажется API функция.
Покажи пожалуйста ее объявление в VBA
типа Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

ато вдумыватся неахота :)
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32377289
SendMessage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public Declare Function SendMessage Lib  "User32"  Alias  "SendMessageA"  _
                                    ( _
                                     ByVal hWnd As Long, _
                                     ByVal wMsg As Long, _
                                     ByVal wParam As Long, _
                                     lParam As Any _
                                     ) _
                                    As Long
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32377328
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо все получилось.

PS На всякий случай WM_CLOSE = &H10 ?
...
Рейтинг: 0 / 0
Многооконный интерфейс
    #32377464
Shkurenko Alexander
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Latuk
L>PS На всякий случай WM_CLOSE = &H10 ?

Угу.

ЗЫ Найди файлик win32api.txt, а еще лучше Platform SDK.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Многооконный интерфейс
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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