Иерархия окон в 1С 8.2
Разработка - Работа с интерфейсом
Для работы с окнами 1С необходимы следующие хэндлы окон:
1. h1C – хэндл главного окна
2. hMDI – хэндл окна MDI (для 8.2 неактуально)
3. hReport - хэндл окна активной формы отчета (обработки)
4. hReportDialog - хэндл «подложки» (слой, куда можно поместить видимые компоненты)
Главное окно 8.2 имеет класс V8TopLevelFrameSDI, для вызывающей библиотеки может быть найдено как окно данного класса (с условием, что PID этого окна равен PID библиотеки, т.к. они принадлежат одному процессу)
function EnumWindows82Proc(WND: hwnd; LPARAM: lParam): bool; stdcall;
var ThrID, PID: DWORD;
var b:array[0..254] of AnsiChar;
begin
ThrID := GetWindowThreadProcessId(wnd, PID);
GetClassName(wnd,@b,255);
{ищем только "своё" главное окно}
if (b='V8TopLevelFrameSDI') and (PID=GetCurrentProcessId()) then begin
Main82Handle:=wnd;
end;
end;
function TMiracleClass.GetMain82: Integer;
begin
Main82Handle:=0;
EnumWindows(@EnumWindows82Proc, 0);
RESULT:=Main82Handle;
end;
Примечание: для сторонней программы главное окно можно найти через
FindWindow('V8TopLevelFrameSDI',nil) – самое верхнее
или
FindWindow('V8TopLevelFrameSDI',ЗаголовокЭтогоОкна)
Формы 8.2 хоть и принадлежат процессу главного окна, но не являются его дочками, а являются окнами верхнего уровня. Окна имеют класс V8TopLevelFrameSDIsec
Для вызывающей библиотеки хэндл формы можно найти через GetActiveWindow, со стороны через
FindWindow('V8TopLevelFrameSDIsec',nil) – активная
или
FindWindow('V8TopLevelFrameSDIsec',ЗаголовокНужнойФормы)
А вот дальше начинается весьма запутанная иерархия дочерних окон активной формы.
Методом научного тыка (кстати, удобный - рекомендую[//infostart.ru/public/59436/index.php?fimages=yes&PAGEN_1=7#comm], пост 124) был определен хэндл «подложки», как раз тот слой, где внедренные компоненты видимы на форме
wnd:=FindWindow('V8TopLevelFrameSDIsec',nil); // найдется активная форма
wnd:=GetTopWindow(wnd);// первый V8LayouterTabsWindow
wnd:=GetTopWindow(wnd);// его первый V8FormElement
w:=FindWindowEx(wnd,0,'V8LayouterTabsWindow',nil);// его первый V8LayouterTabsWindow
wnd:=FindWindowEx(wnd,w,'V8LayouterTabsWindow',nil); //его второй V8LayouterTabsWindow
wnd:=GetTopWindow(wnd);// его первый V8FormElement
wnd:=GetTopWindow(wnd);// его первый V8LayouterTabsWindow
wnd:=GetTopWindow(wnd);// его первый V8FormElement - он самый!!!!
{внедряем компонент дельфи}
PB:=TProgressBar.CreateParented(wnd);
PB.UpdateControlState;
PB.Left:=10;
PB.Top:=40;
PB.Width:=200;
PB.Height:=20;
PB.Visible:=true;
PB.Enabled:=true;
PB.Position:=60;
(результат на картинке)
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)
Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!
31720 руб.
27.03.2025 92219 69 44
Консолидация данных Работа с интерфейсом Разработчик Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 1C:ERP Узбекистан Беларусь Кыргызстан Россия Казахстан Платные (руб)
Знакомая ситуация? Пользователи, особенно менеджеры, уверены: отборов много не бывает. Идут пожелания добавить в форму списка еще один быстрый фильтр, еще два, еще пять... В итоге интерфейс превращается в нагромождение полей отбора, а потребность в «самом главном» отборе, который «вот прямо сейчас нужен», все равно не закрыта. Универсальное расширение, которое решает эту проблему элегантно и технологично. С его помощью в любую форму списка можно легко добавить панель настраиваемых кнопок-закладок, каждая из которых применяет сложный фильтр-запрос, а так же показывает актуальное количество элементов в реальном времени.
6088 руб.
17.10.2025 3636 3 0
Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)
Разработка "Дизайнер форм 1С" реализована в виде расширения 1С и является универсальным инструментом для разработки прототипа форм с целью демонстраций, технических заданий и т.д. Без участия разработчика с возможностью экспорта в файл внешней обработки и генерации формы используя искусственный интеллект.
36600 руб.
28.08.2025 10305 2 2
Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)
Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна
20.08.2024 57338 mrXoxot 44
Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.
27.05.2024 29968 smielka 39
Инструментарий разработчика Работа с интерфейсом Разработчик 1С 8.3 Абонемент ($m)
Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.
1 стартмани
10.04.2023 19435 190 acces969 31
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)
Питничная фантазия на возможности в разработке интерфейсов формы с помощью Платформы 1С - делаем свою подсказку. Публикация содержит готовую библиотеку программного формирования данной подсказки.
12.08.2022 16927 top_1c 39
Работа с интерфейсом Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.
1 стартмани
05.07.2022 17933 kalyaka 8
Вот такая безрадостная фигня пока ;(
1. Окошко ввода совсем не желает вести себя как нормальный контрол оpгана упpавления pедактиpованием. В частности не реагирует на стандартную API SendMessage(handle,em_GetLineCount,0,0), которая должна вернуть количество строк в органе управления.
2. Нажатие любой клавиши выдает неопознанную виндой мессагу 0x0118, при этом для любой клавиши wParam=0000FFFF, а lParam=BF84AC9A (всегда, блин!)
см. рис.
Че ж думаешь, никто не проверил его, например, на стандартную API
SendMessage(wnd, em_GetLineCount,0,0)? Думаешь я и мессаги там не проконтролировал? Там только только через переопредление оконной процедуры добраться можно, или через перехват родных библиотек :(
Или это можно где-то применить ?
Только предупреждаю ,я еле-еле вспомнил школьное определение Handle : логический номер назначаемый объекту (файлу , устройству и т.п).
Из внешнего приложения не особенно и надо, а вот тут (картинка 6)
без этого никак не обойтись, на этом все и построено. А отлаживать- куда как удобнее из внешнего
Если бы была возможность работы с окнами 1С, текстами и т.д., вполне можно было, например, упростить себе работу в Конфигураторе, сделав некое грубое подобие Опенконф для 77 с его скриптами и плагинами :)
Лично меня этот проблема очень занимает, но пока не удается решить :(
Вы не подумали, ЗАЧЕМ 1с выпустила 8.2 ?!
Что бы кто-то потом дорабатывал ее в delphi,c, .net Итд ?
я всегда думал, что это не совсем так и вот доводы:
1. 8.2 изначально делалась как МУЛЬТИ платформенное решение, в браузере ее (теоретически) можно хоть на линуксе и на телефоне запустить! (как там ваш прогресс бар будет работать ? - НИКАК!)
2. в 8.2 сделали СВОЙ стандарт внешних компонент.
класс V8TopLevelFrameSDI в 8.2 актуален только для Управляемых форм или для обычных тоже?
Обычные формы:
ищу
FindWindow(L"V8TopLevelFrameSDIsec",NULL);FindWindow(NULL,L"1С:Предприятие - Конфигурация");не могу найти окно обработки. не подскажите как?
можно ли встроить фрейм в окно обработки средствами WIN API?
1. Рекомендую использовать мелкософтовский SpyXX - удобная штука.
2. Для обычного приложения иерархия совсем другая, похожая на иерархию окон 7.7
Хендл MDI-окна
hMDI:=FindWindowEx(MainHandle,0,'V8MDIClient',''); где MainHandle - хендл главного окна
Хендл активной обработки
hActiveForm:=GetTopWindow(hMDI);
Ещё один глупый вопрос.
Есть dll библиотека которая отправляет видеопоток в окно по его Хендлу.
По COM подключить её нельзя т.к. отсутствуют точки входа.
Обернул её в внешнюю компоненту NativeAPI, отправляю в окно обработки 1с, всё хорошо пока фокус захвачен dll (вместо паузы использую MessageBoxA(hMDI,"","",MB_OK)), как только 1с возвращают фокус она видит что над её формой нагло надругались и падает.
в какую сторону капать ?
Спасибо за ответ. но задача несколько иная и компонент TMediaPlayer не подойдет.
т.к. необходимо использовать именно эту библиотеку.
Если копнуть чуть глубже, падает сама dll из-за ошибки доступа к памяти.
Есть сишный проект построенный на этой dll вроде работает, делаю те-же вызовы из NativeAPI всё падает.
В общем это офтопный офтоп.
........................
wnd:=FindWindowEx(wnd,w,'V8LayouterTabsWindow',nil); //его второй V8LayouterTabsWindow
wnd:=GetTopWindow(wnd);// его первый V8FormElement
wnd:=GetTopWindow(wnd);// его первый V8LayouterTabsWindow
wnd:=GetTopWindow(wnd);// его первый V8FormElement - он самый!!!!
____________
Последний как раз hReportDialog
_________________
Тебе на обычные формы надо? Тогда напишу как там его найти
Именно туда и выводил.
Для неуправляемых форм.
HWND hWnd1с = FindWindow(L"V8TopLevelFrame",NULL);
HWND hMDI = FindWindowEx(hWnd1с,NULL,L"V8MDIClient",NULL);
hMDI =GetTopWindow(hMDI);
hMDI =GetTopWindow(hMDI);
hMDI =GetTopWindow(hMDI);
hMDI =GetTopWindow(hMDI);// <-- Элемент картинка на форме
//лишний уровень
// hMDI =GetTopWindow(hMDI);
код правда сишный
В одном из первых сообщений я дезинформировал Вас
На самом деле
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
PS: Наверняка я не прав.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 63333
Создание 26.12.09 05:09
Обновление 28.12.09 00:00
Просмотры 27771
Загрузки 0
Рейтинг
47
Комментарии 50
Код открыт Не указано
Рубрики Работа с интерфейсом
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)