Имя: Пароль:
1C
 
MessageBox из 1C
0 Viktor Zull
 
18.10.06
20:14
Нужно вывести окно сообщения. Для этого используется функция MessageBox(<handle>,<text>,<caption>,<type>) из файла USER32.dll. Использую COMОбъект DynamicWrapper.

Создана такая процедура:

Процедура ОкноСообщения(ТекстСообщения,Заголовок,Режим) Экспорт
   Попытка
       Library = Новый COMОбъект("DynamicWrapper");
   
       ResHandle = 0 ;
   
       Library.Register ("USER32.DLL", "FindWindow", "i=ls", "f=s", "r=l");
       ResHandle = Library.FindWindow(NULL, "1С:Предприятие - "+ПолучитьЗаголовокСистемы());
   
       Если ResHandle > 0 Тогда
           Library.Register("USER32.DLL", "MessageBox", "i=lrrl");
           Library.MessageBox(ResHandle,ТекстСообщения,Заголовок,Режим);
       КонецЕсли;
   Исключение
   КонецПопытки;    
КонецПроцедуры

Вызов процедуры:

ОкноСообщения("Message","Caption",0);

Окно появляется, вот только вместо нужного текста квадратики и вопросительные знаки.

Подскажите что нужно подправить, чтобы в окне выводился нужный текст.

Возможно это связано с тем что нужно передавать парметры должны быть не строками, а массивами символов и не в UNICODE а в ASCII.
1 smaharbA
 
18.10.06
20:21
Нафига тебе враппер ? Все и без него можно
2 Viktor Zull
 
18.10.06
20:58
Как можно ?
3 smaharbA
 
18.10.06
21:10
(2)

//*******************************************
Процедура Сформировать()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.Language="vbscript";
   Стр="Страх!";
   Заг="Ужас...";
   Скрипт.ExecuteStatement("text="""+Стр+"""");
   Скрипт.ExecuteStatement("head="""+Заг+"""");
   Скрипт.ExecuteStatement("prop="+(4096+3+16));
   Сообщить(Скрипт.Eval("msgbox(text,prop,head)"));
КонецПроцедуры

...
Заметь тут модальное сообщение для всей системы и три кнопаря :)
4 Viktor Zull
 
18.10.06
21:28
У меня при выполнении процедуры Сформировать появилась ошибка:

Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Недопустимый  знак

Почему?
5 smaharbA
 
18.10.06
21:29
(4) ну это семерка, под восьмерку сам переделвай, но еще незабудь что в VBScript нельзя русские символы в качестве переменных
6 Viktor Zull
 
18.10.06
21:50
В строке:

Скрипт.ExecuteStatement("prop="+(4096+3+16));

кавычки не поставлены, вот ошибка и вылезала:

Скрипт.ExecuteStatement("prop="""+(4096+3+16)+"""");

А в остальном только в первой строке отличие:

Процедура Сформировать() Экспорт
   Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
   Скрипт.Language="vbscript";
   Стр="Страх";
   Заг="Ужас...";
   Скрипт.ExecuteStatement("text="""+Стр+"""");
   Скрипт.ExecuteStatement("head="""+Заг+"""");
   Скрипт.ExecuteStatement("prop="""+(4096+3+16)+"""");
   Сообщить(Скрипт.Eval("msgbox(text,prop,head)"));
КонецПроцедуры

Спасибо Вам,smaharbA, за помощь.

Только вот вопрос еще: как изменить пиктограмму в этом окне, а то в этом случае окно ошибки получается. А мне надо, чтобы это информационное окно было и кнопка была только одна "OK".
7 Viktor Zull
 
18.10.06
21:59
Я в строке:

Скрипт.ExecuteStatement("prop="""+(4096+3+16)+"""");

числа в скобках меняю и окно каждый раз разное получается, иногда надписи на кнопках на русском языке получаются. Подскажите, как правильно эти параметры задаются.
8 smaharbA
 
19.10.06
06:51
Скрипт.ExecuteStatement("prop=cint("""+(4096+3+16)+""")");
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн