Вопрос: Возникла такая проблема:
имеется Frame, пpи запyске программы она вызывает
два Thread. После окончания загрузки активным
оказывается не то MDI Child-окно.
Как сделать активным то окно, котоpое мне нyжно?
Подозpеваю, что нyжно
использовать SETTARGET, но кyда его вставить?
Использyю C5EE, ABC.
Ответ1: Здесь нужно Window{Prop:Active} =
True
Отвечал Nick Tsigouro 24.05.200
Ответ2:
Определяешь в глобальных данных что-то вроде:
EVENT:Active EQUATE(401h)
T1 BYTE
T2 BYTE
Сохраняешь номера thread-ов, скажем:
T1=START(MDI1)
T2=START(MDI2)
Когда надо, пуляешь евент в нужный thread:
POST(EVENT:Active,,T1)
В обработчик событий каждого окна
вставляешь:
CASE EVENT()
OF EVENT:Active
0{PROP:Active}=true
END
Отвечал Новиков Антон 24.05.200 anfront@chat.ru ICQ #50995986
Вопрос:
Как сделать окно программы всегда остaющимся
поверх других окон (программ), даже если оно не
активно ?
Ответ:
Универсальное решение:
Прототип:
MODULE('WIN_API')
SetWindowPos(UNSIGNED, UNSIGNED, SIGNED, SIGNED, SIGNED, SIGNED, |
UNSIGNED),SIGNED,PASCAL
END
Вызов по условию:
IF Loc:byAlwayOnTop
I # = SetWindowPos(<Имя окна>{PROP:Handle},0fffffh,0,0,0,0,3)
ELSE
I# = SetWindowPos(<Имя окна>{PROP:Handle},0ffffeh,0,0,0,0,3)
END
Отвечал В. Синявский Ноября 26, 1999 root@jrcn.donetsk.ua
Ответ 2:
Окно поверх всех остальных можно сделать API
функцией
SetWindowPos(HWND, HWND, SIGNED, SIGNED, SIGNED, SIGNED,WORD),BOOL,PASCAL
Примерно так:
err#=SetWindowPos(QuickWindow{ PROP:Handle },-1,0,0,0,0,BOR(2,1))
наоборот,
err#=SetWindowPos(QuickWindow{ PROP:Handle },0fffeh,0,0,0,0,BOR(2,1))
Алексей Калинкин kalinkin@rmk.ru
Ответ 3:
Посмотри пример во вложении(http://rozalex.chat.ru/pub/Clarion/OnTop.zip),
в Global Embeds делаешь описание функции и переменных,
AfterGlobalIncludes:
HANDLE
EQUATE(UNSIGNED)
HWND
EQUATE(HANDLE)
WORD
EQUATE(SIGNED)
HWND_BOTTOM EQUATE(1)
HWND_TOPMOST EQUATE(0ffffh)
SWP_NOMOVE EQUATE(0002h)
SWP_NOSIZE EQUATE(0001h)
_________________________________
InsideTheGlobalMap:
MODULE('Windows.DLL')
SetWindowPos(HWND, HWND, SIGNED, SIGNED, SIGNED, SIGNED,
WORD),BOOL,PASCAL
END
________________________________
вызов делаешь из любого места:
!Делаем поверх всех окон
err#=SetWindowPos(Window{PROP:Handle},HWND_TOPMOST,0,0,0,0,SWP_NOSIZE+SWP_NO
MOVE)
!Убираем атрибут поверх всех
err#=SetWindowPos(Window{PROP:Handle},HWND_BOTTOM,0,0,0,0,SWP_NOSIZE+SWP_NOM
OVE)
Window{Prop:Active} = 1
Алексей Калинкин, kalinkin@rmk.ru
Вопрос:
Возможно ли в Menu под пункты выбора выводить
символьную строку , текст которой формируется и
меняется в процесе работы?
Ответ:
Изменять текст в пунктах меню можно традиционно:
<?Item>{PROP:Text} = 'Что-то другое'
DO RefreshWindow
где Item - метка пункта меню, т.е. то, что в
форматоре окна называется "Use Variable:"
Отвечал В.Синявский Сентября 17, 1998 root@jrcn.donetsk.ua
Вопрос:
Как управлять одним Clarion-приложением из
второго. Например: по нажатию кнопки из формы,
делать второе приложение, которое то же запущено
- OnTop, т.е. что бы оно выползло на передний план.
Если это воще возможно.
Ответ:
Можно сделать так:
hWin = FindWindow(...)
if IsIconic(hWin)
ShowWindow(hWin, SW_RESTORE)
end
SetForegroundWindow(hWin)
В параметрах FindWindow надо указать класс и заголовок окна второй программы. Есть несколько способов узнать их, но это уже отдельный разговор... Если же класс и заголовок известны заранее, тогда еще легче.
Отвечал YuriMar 28.06.2000
Вопрос:
Как определить номер таба
Например: при изменении TABа мне нужно слать
определенные месаги.
Ответ 1:
Так ловить события связанные с tab changing.
А что, слабо в паре подходящих embed поставить
Message('...','Этот Embed'), скомпилить и запустить?
choice(?currenttab) возвращает №.
А вообще, неплохо покопаться с Examples на предмет,
как сделан Wizard.
Отвечал D_Osipov
Ответ 2:
Есть два события на головной
SHEET
EVENT:TabChanging
CHOICE(?Sheet) - возвращает с какой закладки уходят
EVENT:NewSelection
CHOICE(?Sheet) - возвращает на какую закладку пришли
Подскажите, как
осуществить SUBJ средствами клариона?
Нужно отслеживать завершение некоторых
вынь-приложений.
Ответы:
| task.arj 7 028
17.01.00 14:18 Пример получения task-списка Автор: Алексей Тимков. И утилита для снятия задачи. Это не то, что требуется? FAQ-сервер, Download, Примочки С уважением, Владимир Смелик, MCP vovs@bigfoot.com YahooID: VovShmel |
На мой взгляд, перебор названий окон не самый лучший подход (названия могут меняться). Для Win95/98/2000 можно воспользоваться библиотекой ToolHelp (CreateToolHelp32Snapshot, Process32First, Process32Next), под NT4 - сложнее, но могу прислать пример. Павел Яковенко paolo@ncport.ru |
| Например :) Библиотеку pdh.dll можно взять, например, из Windows2000 Program DataSource &CSTRING pdhStatus = if pdhStatus = ERROR_SUCCESS Павел Яковенко |
Как сделать шоб при нажатии на виндовз кнопочку "ЗАКРЫТЬ" (т.е. крестик или из системного меню CLOSE) -- перехватить закрытие? Именно как - я знаю, но какую "затычку" там вставить, шоб окошко не закрылось? То-есть попросту надо сделать:
a. User: CLOSE!
b. Program: Do you really wanna exit? [Yes] [No]
a. User: Hmmm... No!
b. Program: Ok, continue work...
Ответ:
Во вставке "Обработка событий в окне -
CloseDown" поставь код:
if Message('Завершить работу?','Внимание!',ICON:Question, |
BUTTON:YES+BUTTON:NO,BUTTON:NO) = BUTTON:NO
Cycle
Олег А. Руденко
По моему нужно в CloseWindow а не в CloseDown...
Далюс Гужаускас E-mail: tichij@iname.com
Как бы избавится от сабжа в форме. Поскольку при нажатии на Ok, для всех полей генерируются события Event:Accepted и соответственно выполняется весь код, подвешенный в ембедах на них.
Ответ:
Убрать с кнопки атрибут REQ или прописать
Window{PROP:AcceptAll} = FALSE
aLEX Timkov E-mail: athome@ukrpost.net // timkoff@siberlink.com
Ответ 1:
EVENT:Move
The user is moving a window with the IMM attribute. If a CYCLE statement is encountered in
the code to process this event, EVENT:Moved is not generated and the action is aborted.
This is the event on which you can prevent users
from moving a window. The system is modal during this event.
Вставь в эмбед к WindowEvents - EVENT:Move оператор CYCLE
С уважением, Илья Пащенко.
Ответ 2:
Убери заголовок, системное меню и кнопки.
Короче когда нет синей полосы и системного меню,
никуда ты окно не передвинешь.
С Уважением
Martin martin@sochi.ru
Ответ:
IF ProcStarted=0 THEN
ProcThread = START(Proc)
ProcStarted= 1
ELSE
POST(EVENT:GainFocus,,ProcThread )
END
С уважением, Олег. sh_group@chat.ru
Вопрос:
MDI программу. Открыто несколько потоков. В одном из потоков
> YBM> изменена конфигурационная информация. Это должно вызвать закрытие окон
> YBM> других потоков (всех, или по необходимости). Как мне их закрыть
(кроме
> YBM> того окна , где производились изменения).
Ответ:
На мой взгляд, все очень просто:
The maximum number of simultaneously available execution threads in a single
application is 64. The first execution thread in any program is the main
program code, which is always thread number one (1). Therefore, THREAD
always returns a value in the range of one (1) to sixty-four (64).
Таким образом, в точке, соответствующей нажатию кнопки, например, делаем
вставку:
loop i# = 2 to 64
if(i# <> 0{prop:thread})
post(event:closewindow, , i#)
end
end
Удачи! Sergei Artyushenkov. asn@arsis.ru