Имя: Пароль:
1C
1С v8
Дочерние окна 1С.
, ,
0 Raxla
 
28.09.11
19:18
Получаю дочернее окно, но не могу получить название окна. Делаю так (упрощённо):
var s:String;l:integer;

wnd := FindWindowEx(MAINMDIHANDLE, 0, 'V8MDIClient', nil);
l:=SendMessage( wnd, WM_GETTEXT, 100, lparam( @ss[ 1 ] ));
ss:=Copy( ss, 1, l );

(взятие текста бралось отсюда http://www.sql.ru/forum/actualthread.aspx?bid=20&tid=624462&pg=-1)
1 Rie
 
28.09.11
19:28
(0) Так а что получаешь? И кто такой ss?
2 Rie
 
28.09.11
19:29
+(1)
Попробуй
var
 Buf: array [0..BUFSIZE] of char;
и адрес Buf передать как lParam.
3 Raxla
 
28.09.11
19:29
в l получаю ноль
4 Raxla
 
28.09.11
19:31
ss AnsiString, в вар не отпечаталось :)
5 Rie
 
28.09.11
19:31
(4) Попробуй (2).
6 Rie
 
28.09.11
19:34
+(5) Ты пытаешься баловаться с динамически выделенной под строку памятью. Это уже не хорошо.
7 Raxla
 
28.09.11
19:39
всё равно - мусор на выходе в буфере
8 Raxla
 
28.09.11
19:42
из 1С вообще можно получить названия окон?
9 Raxla
 
28.09.11
19:44
и в любом случае, длинну-то ноль возвращает!
10 Rie
 
28.09.11
19:49
(7) Посмотри при помощи Spy++ (или что там у тебя имеется), какие окна есть и что с ними. Может, ты не то окно смотришь?
11 Raxla
 
28.09.11
19:56
Пробовал все получать,  по ClassName реально только это окно:

class: V8ViewSplitter
class: V8ViewSplitter
class: V8ViewSplitter
class: V8ViewSplitter
class: V8AutoHideLayouter
class: V8AutoHideLayouter
class: V8AutoHideLayouter
class: V8AutoHideLayouter
class: V8CommandBar
class: V8CommandBar
class: V8CommandBar
class: V8CommandBar
class: V8CommandBar
class: V8Dockbar
class: V8Dockbar
class: V8Dockbar
class: V8Dockbar
class: V8CommandBar
class: V8CommandBar
class: V8MDIClient
12 Raxla
 
28.09.11
19:57
Заголовок у него русским текстом.
13 Rie
 
28.09.11
19:58
(12) Unicode?
14 Raxla
 
28.09.11
20:51
В 1с вижу назавние на русском :-)
Если на выходе была бы не та кодировка, было бы видно, что атм не мусор, а через один символ. Возращаемая длинна не была бы равна нулю. У кого-нибудь в 1с8.1 названия дочерних окон читаются?
15 smaharbA
 
28.09.11
20:59
читаются
16 Raxla
 
28.09.11
21:13
SPY++ показывает, что названия нету, а есть у подчинённого окну V8MDLocalFrame :-)
А в фрейме есть ещё V8Window, тоже без названия...
Наплевать и забыть, или парсить подчинённые окна дальше?
17 orefkov
 
28.09.11
21:46
Перебирай подчиненные окна, пока заголовок не найдешь.
Ну и ессесно, лучше заюзать юникодные версии апишных функций.
18 Raxla
 
28.09.11
21:58
У меня вообще такое подзрение, что как окно будет отзываться только V8MDIClient, а всё остальное будет игнорить стандартные виндовые механизмы, по крайней мере, пока что у меня нулевой результат. Народ, киньте пример, чтения заголовков окон в 1С8.1
19 Raxla
 
28.09.11
22:03
А не, с локал фремами всё работает и коордиаты и заголовок
20 H A D G E H O G s
 
28.09.11
22:03
Я перебирал (но фактически искал) через
EnumChildWindows()

FindWindowEx() у меня чето-не взлетел.
21 smaharbA
 
28.09.11
22:04
нафиг не надо енумеровать, есть дедовский метод через некствиндов и рекурсию
22 H A D G E H O G s
 
28.09.11
22:07
(21) Почему не надо?
Это вы VBA-шники поди шугаетесь получения адреса функции, как черт ладана?
23 Raxla
 
28.09.11
22:13
Кстати. окна вполне себе виндовые. обычный GetWindowText на этот локал фрейм прокатил, хотя для Child окон, как раз это совсем не гарантируется и говорят, что очень мало где работает. Нверное и регион можно дырявым сделать, и вообще поизвращатсья надо окнами :-)))
Надо будет попробовать, как время будет
24 smaharbA
 
28.09.11
22:15
(22) нет, адресоф работает всюду, просто с рекурсией все прозрачнее
25 H A D G E H O G s
 
28.09.11
22:17
(23) Не знаю как насчет "дырявости", а вот порисовать тебе на контексте окна 1С ка не даст :-)
26 H A D G E H O G s
 
28.09.11
22:19
А вот прозрачность (альфа-канал) через SetWindowLong() вполне себе пожалуйста.
27 smaharbA
 
28.09.11
22:22
(26) и направление текста и меню
28 Raxla
 
28.09.11
22:23
То есть и вот это должно сработать: http://club.shelek.ru/viewart.php?id=181
Интересно, а сделать невидимой панель инструментов - сложно? (где хелп значёк остаётся)