Привет всем.
C55.06 (К.Щерба)
Есть главное окно (не Frame). Из этого окна вызываются другие окна.
Хотелось бы вызывать эти окна не в режиме Modal, а в MDI, и чтобы после закрытия главного окна закрывались все открытые окна. Как сделать это правильнее?
--------------------
С уважением,
Стефанович Александр
AlexAn_St@inbox.ru
Написал: ClaList(2)
Окна
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
MDI можно открывать только из фрейма. Тебе наверно нужно чтобы была прописана цепочка родительских окон:
OPEN( entity [, access mode / owner ] )
entity The label of a FILE, VIEW, APPLICATION, WINDOW, or REPORT structure
owner The label of the APPLICATION or WINDOW structure which "owns" the window entity being opened. Normally, this parameter would be an &WINDOW reference variable. Valid only when the entity parameter names an APPLICATION or WINDOW structure.
A window with an owner always appears on top of its owner, and is automatically hidden if the owner is minimized or hidden. If the owner is closed, all owned windows are also automatically closed. MDI windows are implicitly owned by the frame window. Non-MDI windows do not have an owner by default.
WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
OPEN( entity [, access mode / owner ] )
entity The label of a FILE, VIEW, APPLICATION, WINDOW, or REPORT structure
owner The label of the APPLICATION or WINDOW structure which "owns" the window entity being opened. Normally, this parameter would be an &WINDOW reference variable. Valid only when the entity parameter names an APPLICATION or WINDOW structure.
A window with an owner always appears on top of its owner, and is automatically hidden if the owner is minimized or hidden. If the owner is closed, all owned windows are also automatically closed. MDI windows are implicitly owned by the frame window. Non-MDI windows do not have an owner by default.
WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
Мне нужно, чтобы открываемые окна не были модальными по отношению к главному окну и можно было бы переключаться между окнами.
--------------------
С уважением,
Стефанович Александр
AlexAn_St@inbox.ru
Написал: ClaList(2)
--------------------
С уважением,
Стефанович Александр
AlexAn_St@inbox.ru
Написал: ClaList(2)
Запускай их STARTом в отдельном треде и сможешь переключаться между тредами.
WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
WBR, Nick Tsigouro mailto:nick@arsis.ru
Написал: ClaList(2)
- Admin
- Администратор
- Сообщения: 3963
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 29 раз
- Поблагодарили: 22 раза
- Контактная информация:
В общем правильный ответ по моему таков:
Создаешь очередь в которую пишешь треды открытых окон и при закрытии главного окна все их закрываешь...
Написал: Mixer(144)
Создаешь очередь в которую пишешь треды открытых окон и при закрытии главного окна все их закрываешь...
Код: Выделить всё
PROGRAM
MAP
ChildProc()
END
INCLUDE('cwsynchm.inc')
INCLUDE('CWSYNCHC.INC')
QueueData GROUP,THREAD
ThreadID LONG
ThreadType BYTE
END
NonThreadedQueue QUEUE,TYPE
Data LIKE(QueueData)
END
QueueAccess CLASS
QueueData &NonThreadedQueue,PRIVATE
QueueLock &ICriticalSection,PRIVATE
Construct PROCEDURE
Destruct PROCEDURE
AddThread PROCEDURE(LONG Thread, BYTE ThreadType=0)
RemoveThread PROCEDURE(LONG Thread)
RemoveThreads PROCEDURE
END
QA QueueAccess
Window WINDOW('Main window'),AT(,,277,148),FONT('MS Sans Serif',8,,FONT:regular),SYSTEM,GRAY,DOUBLE
BUTTON('Start child window'),AT(9,8,92,14),USE(?Button1)
BUTTON('Exit from programm'),AT(9,25,92,14),USE(?Button2)
END
CODE
OPEN(Window)
ACCEPT
CASE ACCEPTED()
OF ?Button1
START(ChildProc,25000)
OF ?Button2
POST(EVENT:CloseDown)
END
END
QA.RemoveThreads
CLOSE(Window)
!---------------------------------------------------------
ChildProc PROCEDURE
CWindow WINDOW('Child window'),AT(,,151,69),FONT('MS Sans Serif',8,,FONT:regular),SYSTEM,GRAY,DOUBLE
END
CODE
QA.AddThread(THREAD())
OPEN(CWindow)
ACCEPT
END
QA.RemoveThread(THREAD())
CLOSE(CWindow)
!---------------------------------------------------------
QueueAccess.Construct PROCEDURE
CODE
SELF.QueueLock &= NewCriticalSection()
SELF.QueueData &= NEW(NonThreadedQueue)
QueueAccess.Destruct PROCEDURE
CODE
SELF.QueueLock.Kill()
DISPOSE(SELF.QueueData)
QueueAccess.AddThread PROCEDURE(LONG Thread, BYTE ThreadType=0)
CODE
SELF.QueueLock.Wait() !Lock access to NonThreadedQueue.
SELF.QueueData.Data.ThreadId = Thread
SELF.QueueData.Data.ThreadType = ThreadType
GET(SELF.QueueData, SELF.QueueData.Data.ThreadId)
IF ERRORCODE()
ADD(SELF.QueueData)
ELSE
PUT(SELF.QueueData)
END
SELF.QueueLock.Release() !Allow other access to the queue
QueueAccess.RemoveThread PROCEDURE(LONG Thread)
CODE
SELF.QueueLock.Wait() !Lock access to NonThreadedQueue.
SELF.QueueData.Data.ThreadId = Thread
GET(SELF.QueueData, SELF.QueueData.Data.ThreadId)
DELETE(SELF.QueueData)
SELF.QueueLock.Release() !Allow other access to the queue
QueueAccess.RemoveThreads PROCEDURE
CODE
SELF.QueueLock.Wait() !Lock access to NonThreadedQueue.
LOOP W# = 1 TO RECORDS(SELF.QueueData)
GET(SELF.QueueData, W#)
IF SELF.QueueData.Data.ThreadType = 2
POST(EVENT:CloseDown,,SELF.QueueData.Data.ThreadId)
ELSE
POST(EVENT:CloseWindow,,SELF.QueueData.Data.ThreadId)
END
END
LOOP 1000 TIMES
YIELD
END
DELETE(SELF.QueueData)
SELF.QueueLock.Release() !Allow other access to the queue