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

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

переменные объявленные в модуле формы обнуляются,
и при отработке события Form_Unload
инициированного этим убиванием ссылки
они равны 0,а если сделать в этом событии Cancel =True,
то форма не закроется , а ссылка уже Nothing ,
как же ее после этого уничтожить програмно?
Что происходит внутри метода DoCmd.Close acForm ,
ведь он закрывает форму корректно?
...
Рейтинг: 0 / 0
15.01.2004, 11:10
    #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
15.01.2004, 12:24
    #32376874
Хам трамвайный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многооконный интерфейс
т1 стр 445
...
Рейтинг: 0 / 0
15.01.2004, 12:41
    #32376920
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многооконный интерфейс
Вопрос по реализации методов DoCmd
применительно к открытым таким образом формам

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

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

Вот и хочется узнать как DoCmd.Close работает
...
Рейтинг: 0 / 0
15.01.2004, 12:57
    #32376958
Geo
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
15.01.2004, 13:01
    #32376966
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многооконный интерфейс
Уточню вопрос.
Как инициировать закрытие формы,
не удаляя ссылки на нее , и не пользуясь DoCmd.Close ?
...
Рейтинг: 0 / 0
15.01.2004, 13:05
    #32376978
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многооконный интерфейс
/topic/47734\r
\r
Может, найдешь что-то интересное.\r
\r
PS. Я так и не знаю, как и почему работает form_1.visible = true.\r
\r
PPS. А может быть, в твоем случае лучше будет сделат "мюнхаузенские" экземпляры?
...
Рейтинг: 0 / 0
15.01.2004, 13:21
    #32377004
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многооконный интерфейс
>лучше будет сделат "мюнхаузенские" экземпляры
Как раз с ним у меня проблеммы.
Форма асинхронно выполняет процедуру имея ссылку на себя в себе.
Форма не видима.
После завершения процедуры форма должна закрытся.
Как инициировать ее закрытие ?
Уничтожаю ссылку - слетают переменные.
DoCmd.Close - но я не хочу делать форму видимой.

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

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

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

ато вдумыватся неахота :)
...
Рейтинг: 0 / 0
15.01.2004, 15:47
    #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
15.01.2004, 16:06
    #32377328
Latuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многооконный интерфейс
Спасибо все получилось.

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

Угу.

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


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