Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/57: Рейтинг темы: голосов - 57, средняя оценка - 4.86
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Выяснить, является ли текущее окно (приложение) активным

22.03.2010, 22:45. Показов 11074. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочу привинтить к программе tray-иконку. Часть логики должна выглядеть следующим образом. Если окно программы активно, то при клике на tray-иконку окно будет минимизировано. Если окно программы РАЗвёрнуто (т.е. НЕ минимизировано), но неактино (грубо говоря, находится где-то под другими окнами), то при клике на tray-иконку приложение всплывёт наверх

Проблема с тем, как определить является ли приложение активным. Вроде бы напрашивается логичное решение, что надо вызвать GetForegroundWindow() и сравнить с handle'ом текущего окна. Но проблема в том, что при нажатии мышкой на tray-иконку окно приложения теряет фокус (т.е. как бы фокус переходит на tray-иконку). Когда мышку отпустить, то фокус опять возвращается к окну приложения. Как это дело можно порулить?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.03.2010, 22:45
Ответы с готовыми решениями:

Проверить, является ли окно активным
Как проверить активно ли сейчас окно? То есть если я нажму на своё окно, то оно станет активным, если нажму на другое, то оно таковым уже...

Как определить, является ли окно браузера активным?
Как выяснить, является ли активным окно браузера, в котором выполняется JavaScript? Как активировать окно? window.focus()? Как быть,...

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

43
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
24.03.2010, 21:22
Студворк — интернет-сервис помощи студентам
Че-то я потерял нить. А зачем вам хендл иконки вообще? Одних сообщений, приходящих от иконки в заданную при ее создании процедуру разве не достаточно?.
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
24.03.2010, 21:27
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Че-то я потерял нить. А зачем вам хендл иконки вообще? Одних сообщений, приходящих от иконки в заданную при ее создании процедуру разве не достаточно?.
Не достаточно. Мы хотим определить,как на эти сообщения реагировать,т.е сворачивать окно или наоборот поднимать наверх.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2010, 21:32  [ТС]
В общем понятно, почему на другом софте такого поведения нет - гемор не сопоставим с удобством
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
24.03.2010, 21:32
Так а чем тут иконка поможет, если она вообще никаким боком не привязана ни к чему, кроме трея. И чем не подходит определение активного окна не по клику мышом на иконке а по перемещению указателя над ней - ведь в этот момент фокус еще никуда не переведен.
2
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
24.03.2010, 21:45
Цитата Сообщение от Evg Посмотреть сообщение
В общем понятно, почему на другом софте такого поведения нет - гемор не сопоставим с удобством
Альтернативное,которое я видел - определение, видимо окно или нет. Логика такая - если окно не перекрыто,кто ж полезет в трей жать? Нажмет на само окно.Если его скрыло другое - можно лезть в трей или куда-то еще. Реализовать наверняка проще чем то,о чем мы думаем.

К примеру,поведение квипа посмотрел. Он проверяет, есть ли над ним в его локальных координатах (0,0) какое-нибудь другое окно.Если есть - тащится наверх.Если нет - сворачивается.

Добавлено через 2 минуты
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Так а чем тут иконка поможет, если она вообще никаким боком не привязана ни к чему, кроме трея. И чем не подходит определение активного окна не по клику мышом на иконке а по перемещению указателя над ней - ведь в этот момент фокус еще никуда не переведен.

Хорошая мысль. Если там есть сообщение попадания указателя на иконку и сообщение об уходе указателя с иконки - можно скомбинировать.

Завести,соответственно,еще один флаг. При переходе фокуса проверять,на трей или нет.Если на трей - проверять флаг положения мышки.Если где надо - делаем так,если где не надо - сяк
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2010, 22:33  [ТС]
Хм... с мышой надо попробовать

Добавлено через 4 минуты
С виду вроде всё необходимое для этого есть. Надо прикинуть, нет ли каких подводных камней

Добавлено через 39 минут
Опять не канает. В момент нажатия мышкой сначала теряется фокус с окна, потом посылается сообщение, что мышь находится над tray (и в этот момент окно уже неактивно) и только потом посылается сообщение клика на tray. Да что же за свинство-то такое
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
24.03.2010, 22:44
Evg, тогда остается только такая лабуда.Напишу в псевдокоде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool focus_flag;
 
WM_FOCUS : 
focus_flag = true;
break;
WM_KILLFOCUS:
if( wParam == tray_window) { 
 
POINT p = GetMousePos();// позиция указателя
RECT rect = Shell_NotifyIconGetRect();//
if(inside(p,rect)) focus_flag = true;
else focus_flag = false;
} else focus_flag = false;
break;
case Tray_clicked : 
if(flag) minimize();
else OnTop();
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2010, 23:12  [ТС]
Пока у меня с этим трабл - не могу поймать SETFOCUS и как-то криво ловится KILLFOCUS. В общем пока поживу без изысков (т.е. как у всех)
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
26.03.2010, 19:13
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Если там есть сообщение попадания указателя на иконку и сообщение об уходе указателя с иконки - можно скомбинировать.
Там, по крайней мере у меня, нет таких. И вообще -поступает только 3 сообщения - MOVE, DOWN и, кажется UP (это все мышинное).
Я, кажется, не понял - а вы где сообщение ловите? В основном цикле своей програмы? Или чужой? Если своя, так в обработке WM_USER+ваша_константа - как раз и будет то, что надо.
например на Delphi это выглядит как
Delphi
1
2
3
4
5
6
7
8
9
10
11
// создание иконки
var
  nidata: TNotifyIconData;
begin
  with nidata do begin
    Wnd := Self.Handle; // хендл вашего окна
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallBackMessage := WM_MYICONNOTIFY; // ваше сообщение типа WM_USER + номер
    остальное опущено
  end;
  Shell_NotifyIcon(NIM_ADD, @nidata);
а в обработке этой самой WM_MYICONNOTIFY и будут события мыши, только не в WParam, а в LParam,
причем приходить они будут только в ваше окно (Self.Handle) и только тогда, когда мыша над вашей иконкой.
Прошу прощения, если излагаю тривиальности, но отчего-то показалось, что вы пытаетесь поймать мышу в своем основном цикле, причем ловите именно WM_MOUSE, а не сообщение вашей иконки.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.03.2010, 01:03  [ТС]
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Я, кажется, не понял - а вы где сообщение ловите? В основном цикле своей програмы?
Я затрудняюсь дать внятный ответ на вопрос. Я пока лишь начинающий и внутренности чёрного ящика не знаю. В описание класса окна впендюриваются макросы по типу:

C++
1
2
3
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER (WM_WINDOWPOSCHANGING, TMessage, WM_WindowPosChanging)
END_MESSAGE_MAP (TForm)
что конструирует некую процедуру. После препроцессирования оно будет выглядеть примерно как:

C++
1
2
3
virtual void __fastcall Dispatch(void *Message) { switch (((PMessage)Message)->Msg) {
case 0x0046: WM_WindowPosChanging(*((TMessage *)Message)); break;
default: TForm::Dispatch(Message); break; } }
С виду смахивает на некую прокладку для оконной процедуры, но что и как там конкретно - я не знаю
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
27.03.2010, 15:49
Evg, а нарисуйте еще и код создания tray-иконки, а лучше киньте весь проект.
Сейчас где-то на час-полтора исчезну, а вечером гляну. На Delphi есть готовое решение, но раз у Вас, как я понял, Builder, то мой пример мало чем поможет для начинающего. У меня, правда, Builder не установлен, но думаю, это и не понадобится. А вообще-то, как мне кажется уж лучше сразу привыкать к MS, чем потом переучиваться с Borland'а, раз Вы все равно только начинаете.
1
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
27.03.2010, 17:43
Evg!
Не дождавшись Вашего ответа, кину файлик для VS.
а судя по Вашему коду у Вас должно быть что-то вроде

после / или перед / или вместо
MESSAGE_HANDLER (WM_WINDOWPOSCHANGING, TMessage, WM_WindowPosChanging)
пишите
MESSAGE_HANDLER (WM_MYMSG_FROM_TRAY_ICON, TMessage, MyIconMessagesHandler)
естеcтвенно, ранее определив макрос WM_MYMSG_FROM_TRAY_ICON, например как
#define WM_MYMSG_FROM_TRAY_ICON WM_USER + 1
а уже в MyIconMessagesHandler ловите по LParam приходящие от иконки сообщения
(иконка посылает только мышиные - MOVE, DOWN, UP и DBLCLICK (всего 7 штук). Никаких других у меня получить от нее не получилось, хотя пытал почище гестапо.
Вложения
Тип файла: rar tray.rar (2.2 Кб, 33 просмотров)
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.03.2010, 19:37  [ТС]
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Evg, а нарисуйте еще и код создания tray-иконки, а лучше киньте весь проект.
Кода создания иконки как такового там нету. Там есть просто компонент TTrayIcon со стандартными событиями

Цитата Сообщение от kukuruku310 Посмотреть сообщение
На Delphi есть готовое решение, но раз у Вас, как я понял, Builder, то мой пример мало чем поможет для начинающего.
Скажем так, начинающий я в создании гуёвых приложений под винду. Если кто-то выдаст рабочий код с нужной мне функциональностью полностью написанный на WinApi - меня это вполне устроит как образец/

Цитата Сообщение от kukuruku310 Посмотреть сообщение
А вообще-то, как мне кажется уж лучше сразу привыкать к MS, чем потом переучиваться с Borland'а, раз Вы все равно только начинаете.
Для своего уровня и своих задач я пока не увидел ещё ни одной причины зачем нужно делать сложно, когда можно сделать просто

Цитата Сообщение от kukuruku310 Посмотреть сообщение
#define WM_MYMSG_FROM_TRAY_ICON WM_USER + 1
При работе с borland'овской компонентой нет возможности задать callback message. Либо есть, но хз где и хз как. Да и не думаю, что оно поможет. В твоём примере ловятся события WM_MOUSEMOVE и WM_LBUTTONDOWN, для чего есть соотвествующие ловушки в классе. Но он мне не помогло и я уже писал причину выше: в момент прихода события LBUTTONDOWN окно уже потеряло фокус.

Ещё раз хочется повторить задачу. Свернуть-развернуть приложение по нажатию на tray у меня проблемы нет. Проблема в том, как понять, что в момент нажатия на tray фокус текущей задачи находится НЕ на нашем приложении. Ещё у меня в приложении есть, например, окно с настройками, и когда оно включено, то формально главное приложение неактивно. А потому пляски с бубнами принимают неприятные масштабы. Я не сторонник сложных инженерных конструкций, держащихся на костылях и подпорках, а потому, если нет простого решения, я лучше забью на эту функциональность. Потому как я пока ни в одной программе её не видел
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
27.03.2010, 22:13
Ну еж моеж. Так бы сразу и сказали, что пользуете компонетнту. Оттуда и все траблы. Только при чем тут API тогда непонятно. Я понимаю API-приложение как НЕ использующее никаких идиотских надстроек типа всяких навороченных библиотек. В Borland это VCL, в MS-MFC, и т.д.

Код, приведенный в моем примере полностью рабочий код и полностью (и исключительно) на API. Так что разбирайтесь. Говоря про VS, я имел ввиду, что хоть Delphi, хоть Builder, суть не меняется - все равно все основано на VCL. Мне, например, не нравится слишком много мусора в готовом приложении, т.к. тащится и нужное и ненужное. Правда, и MFC ничем не лучше, но я ее просто никогда не использовал. Тогда уж лучше VCL. По крайней мере в ней всякие траблы найти проще. Я просто решил, что пишите на чистом API.
Задавать callback message в данном случае не надо. Это называется не callback, а скорее простое стандарное Windows сообщение, но которое определяете сами. Как это делается в Builder не скажу - вам ведь нужен именно синтаксис такого объявления.

Насчет ловушек "в классе". Никаких классов там нет. Ни единого. Простая стандартная процедура обработки сообщений окном.

И наконец, возвращаясь опять к тому, с чего все и начали.
Определение активного окна надо делать не в событии КЛИКА, а в событии ПЕРЕМЕЩЕНИЯ мыши, запоминать его, а по клику - использовать ранее полученное. Никаких сложностей ни вам, ни Windows это не создаст. В самом крайнем случае можно снизить частоту вызовов GetForegroundWindow, используя таймер или как-то еще, но, насколько я знаю, так никогда не делает. MOUSE_MOVE на иконке в трее - не из тех событий, которые слишком уж загрузят проц. Посмотрите повнимательней мой код обработки WM_MOUSEMOVE.
Естественно, мой пример абсолютно не рабочий (в смысле использовать в том виде, как есть, нельзя), я просто взял то, что выплюнул VS при создании нового проекта и добавил то, что нужно для вашей задачи. Если хотите, пошлю Exe-файл, где в окошке отчетливо видно, какое приложение в момент перемещения/клика по иконке находится "на верхнем уровне"
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.03.2010, 22:33  [ТС]
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Ну еж моеж. Так бы сразу и сказали, что пользуете компонетнту. Оттуда и все траблы. Только при чем тут API тогда непонятно.
Просто я уже не первый вопрос пишу. Сначала писал в теме по borland'у, после того, как никто не отвечал - писал сюда. И забыл внятно написать про Borland

Цитата Сообщение от kukuruku310 Посмотреть сообщение
Задавать callback message в данном случае не надо.
Я имел в виду поле uCallbackMessage при создания tray через Shell_NotifyIcon

Цитата Сообщение от kukuruku310 Посмотреть сообщение
Насчет ловушек "в классе". Никаких классов там нет. Ни единого. Простая стандартная процедура обработки сообщений окном.
Цитата Сообщение от kukuruku310 Посмотреть сообщение
Определение активного окна надо делать не в событии КЛИКА, а в событии ПЕРЕМЕЩЕНИЯ мыши, запоминать его, а по клику - использовать ранее полученное.
Я так и делаю. В событии перемещения мыши по иконке tray я взвожу флаг, что наше окно активно или не активно. Но если я нажму туда мышкой, то иконка получает ещё одно сообщение MOUSEMOVE, в момент обработки которого наши приложение уже неактивно. В итоге, когда я получаю событие клика мыши, то флаг ВСЕГДА оказывается в состоянии false из-за этого последнего сообщения MOUSEMOVE

Цитата Сообщение от kukuruku310 Посмотреть сообщение
Естественно, мой пример абсолютно не рабочий
Вот потому я и подчеркнул, что мне нужен рабочий пример

Цитата Сообщение от kukuruku310 Посмотреть сообщение
Если хотите, пошлю Exe-файл, где в окошке отчетливо видно, какое приложение в момент перемещения/клика по иконке находится "на верхнем уровне"
Я это и сам могу на borland'е сделать Вот если бы Exe-файл, который в момент клика мыши печатал 0 или 1 - это было бы интереснее
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
28.03.2010, 00:04
наконец-то въехал, в чем тут у вас проблема. Уж звиняйте за бестолковость.
Вот гляньте как сделал - там исходник, но, к сожалению опять только VS и готовый Exe

И еще по ходу обнаружил хитрый трабл. Если завести глобальную переменную для Handle своего окна, и создавать иконку не передачей HWHD как параметра, а используя эту глобальную переменную, то иконка создается, но при первом наведении мыши на нее исчезает. Вот такие пироги. Учтите в своем проЭкте.
Вложения
Тип файла: rar tray2.rar (23.0 Кб, 17 просмотров)
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.03.2010, 00:14  [ТС]
Работает, правда есть косячок - если щёлкнуть два раза с небольшим интервалом времени при развёрнутом окне (порядка секунды), то не работает как надо. Но это уже мелочи

Насколько я понял, ты всего учитывал не только последнее активное окно в событии MOUSEMOVE, но и предпоследнее. Так? И насколько такой вариант является надёжным?
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
28.03.2010, 00:29
Цитата Сообщение от Evg Посмотреть сообщение
Работает, правда есть косячок - если щёлкнуть два раза с небольшим интервалом времени при развёрнутом окне (порядка секунды), то не работает как надо.
при большом интервале, по крайней мере на моеей XPSP2 работает как надо, при малом интервале просто получается не DOWN, а DBLCLICK, который я не обрабатываю вообще.
Цитата Сообщение от Evg Посмотреть сообщение
учитывал не только последнее активное окно в событии MOUSEMOVE, но и предпоследнее. Так? И насколько такой вариант является надёжным?
Все так. Насколько надежно - не скажу, но скорее всего достаточно надежно, т.к. до Click'а активным остается предыдущее окно, а MOVE проскакивает скорее всего из-за "дрожи в руках" в момент клика. Если нужна абсолютная надежность - можно сделать что-то вроде стека или проверять окно на принадлежность к Tray-ю.
По крайней мере других идей пока нет.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
28.03.2010, 00:59  [ТС]
Цитата Сообщение от kukuruku310 Посмотреть сообщение
не DOWN, а DBLCLICK
Ах вот оно что...

Цитата Сообщение от kukuruku310 Посмотреть сообщение
Все так
Только вот почему у меня на это мозгов не хватило Вроде бы всё необходимое лежало на поверхности

Цитата Сообщение от kukuruku310 Посмотреть сообщение
Насколько надежно - не скажу, но скорее всего достаточно надежно, т.к. до Click'а активным остается предыдущее окно, а MOVE проскакивает скорее всего из-за "дрожи в руках" в момент клика.
Я это проверял - ставил очень низкую чувствительность и прижимал мышку - дело не в дрожи. А просто система шлёт одно лишнее сообщение. Только вот это некая специальная фича или косяк со стороны разработчиков ос - хз. На на XP и на семёрке вроде бы как симметрично работает. Код будет сильно локализованным и если что - его можно будет легко отключить

В общем, спасибо за идею
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 547
28.03.2010, 14:37
Цитата Сообщение от Evg Посмотреть сообщение
Вроде бы всё необходимое лежало на поверхности
К сожалению и сам и не раз, и даже не два стирал пальцы о клаву до самых локтей ради пары итоговых строчек. Да и, скорее всего, этим может "похвастаться" каждый.
Но не в этом-ли наша сила, брат?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.03.2010, 14:37

Выяснить, является ли хоть одно из заданных слов палиндромом (GUI-приложение)
Даны три слова. Выяснить, является ли хоть одно из них палиндромом ("перевертышем"), т. е. таким, которое читается одинаково слева...

Нужно закрыть модальное окно и сделать активным вызвавшее его окно
Мне нада средствами Win API закрыть модальное окно и сделать активным вызвавшее его окно. Кто знает как это сделать?

Сделать окно активным, закрыть окно, открыть в текущем окне
Появилась задача просматривать картинки (например обращаясь к xdg-open или через cacaview) и при этом продолжать работу в терминале. К...

Сделать окно активным
Всем привет. Столкнулся с такой проблемой. Нужно из программы проверять есть ли обновления, и если есть скачивать и заменять...

сделать окно активным
Ребята подскажите по такому вопросу. У меня есть форма на ней кнопка. Когда я нажимаю на эту кнопку, создаётся приложение ворд и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
После бана на Пикабу не работает авторизация аккаунта с Яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой Зрите в корень - монополизация на разработку программ. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru