|
Для вычисления мат.функций можно воспользоваться VBScript. Доступны следущие: Abs - абсолютное значение Atn - арктангенс Cos - косинус Exp - экспонента (число е в степени) Fix - отбрасывает дробную часть числа Int - целая часть числа (в 1с уже есть) Log - натуральный логарифм (тоже есть) Rnd - случайное число Sgn - знак числа Sin - синус Sqr - квадратный корень Tan - тангенс Hex - перевод из 10-тичной в 16-ричную Oct - в 8-ричную Пример вызова: // синус function sin(value,sc=0) try if sc=0 then sc=createObject("MSScriptControl.ScriptControl"); endif; sc.language="VBscript"; except return getEmptyValue(); endtry; return sc.eval("sin("+value+")"); endFunction
Возведение в степень ( value1^value2) можно реализовать так: sc.eval(""+value1+"^"+value2);
|
Получить
список принтеров:
Процедура Сформировать()
wshNetwork=createObject("WScript.Network");
oPrinters=wshNetwork.EnumPrinterConnections();
i=0;
while i<oPrinters.count()-1 do
message("Порт "+oPrinters.item(i)+" = "+oPrinters.item(i+1));
i=i+2;
enddo;
КонецПроцедуры
Получить имя принтера "по умолчанию":
// Получить имя "принтера по умолчанию":
Процедура Сформировать()
scrptCtrl=createobject("MSScriptControl.ScriptControl");
scrptCtrl.language="vbscript";
scrptCtrl.addcode("
|Function GetDefaultPrinter()
|GetDefaultPrinter=vbNullString
|Set objWMIService=GetObject(""winmgmts:"" _
|& ""{impersonationLevel=impersonate}!\\.\root\cimv2"")
|Set colInstalledPrinters=objWMIService.ExecQuery _
|(""Select * from Win32_Printer"")
|For Each objPrinter in colInstalledPrinters
|If objPrinter.Attributes and 4 Then
|GetDefaultPrinter=objPrinter.Name
|Exit For
|End If
|Next
|End Function");
Сообщить(scrptCtrl.run("GetDefaultPrinter"));
КонецПроцедуры
|
Проблема:
"Емкость диска 40Гб свободно 24Гб выдает -17,14Гб."
ИМХО это ошибка в движке. Не получить нормальное значение простым
способом. Какие-то у них корявки внутри с преобразованием UINT в long
и обратно. При возврате из функции теряется один разряд - самый старший.
Так что восстановить нормальное значение не получится. Единственное, для
чего пригодна эта функция - проследить, что на диске есть еще как минимум
4 Гб. свободного места.
Для корректного определения свободного места на диске можно воспользоваться
VBScript:
fso=createObject("scripting.fileSystemObject");
message(fso.getDrive(диск).freeSpace); |
Процедура глМаксимизироватьОкно() Экспорт
// вызывать в конце процедуры "ПриОткрытии" из модуля формы
WSHShell = СоздатьОбъект("WScript.Shell");
WSHShell.SendKeys("%");
WSHShell.SendKeys("{LEFT}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}");
КонецПроцедуры
Замечание:
Если у вас этот код не работает, значит не установлен <Windows Scripting
Host> или установлена старая версия.
"Что вам нужно для начала: Первое, что надо сделать - убедиться,
что Windows Scripting Host у вас есть.
В состав W2K он входит изначально.
Если вы используете Windows 98 или Internet Information Server 4.0,
или если вы устанавливали Option Pack для Windows NT 4 и для Windows 95,
он у вас точно есть.
В случае Windows 95 все усложняется, и Windows Scripting Host придется
скачивать с сайта Microsoft (msdn.microsoft.com/scripting).
Напишите в командной строке "wscript".
Если появилось диалоговое окно с надписью, отличной от "File not
found", все в порядке." |
//****************************************************************************** // Получим представление цвета из реестра Функция глПолучитьСистемныйЦвет( псИдентификаторЦвета ) Экспорт // ИСПОЛЬЗОВАНИЕ: // м_СерыйЦвет = глПолучитьСистемныйЦвет( "Window" ); //РасшАтрибут.ЦветФона = м_СерыйЦвет; //Если ПустоеЗначение(ЗначениеАтрибута) = 1 Тогда // РасшАтрибут.ЦветФона = 255; // красный...... //КонецЕсли;
// идентификаторы цветов: // ActiveBorder - Рамка вокруг активного окна. //ButtonHilight, ButtonLight - Выделение трехмерных элементов. //AppWorkSpace - Фон окна приложения MDI (приложение, использующее многооконный интерфейс). //Background - Рабочий стол. //ButtonAlternateFace - Кнопка. //ButtonShadow - Тень, "отбрасываемая" кнопкой. //ButtonText - Текст надписи на поверхности кнопки. //TitleText - Текст заголовка окна, кнопки изменения размера, кнопки полосы просмотра. //GrayText - Текст серого цвета. //Hilight - Фон выбранного элемента в органе управления. //HilightText - Текст для выбранного органа управления. //InactiveBorder - Рамка вокруг неактивного окна. //InactiveTitle - Заголовок неактивного окна. //InactiveTitleText - Текст заголовка для неактивного окна. //InfoWindow - Фон элемента подсказка. //InfoText - Текст элемента подсказка. //Menu - Фон меню. //MenuText - Текст меню. //Scrollbar - Полоса просмотра. //Window - Фон окна. //WindowFrame - Рамка окна. //WindowText - Текст в окне. //ButtonFace,MenuBar,MenuHilight
// НЕ НАШЕЛ КЛЮЧ РЕЕСТРА //BTNHIGHLIGHT - Выбранная кнопка. //3DDKSHADOW - Темная тень для трехмерных элементов. //3DFACE, BTNFACE - Поверхности трехмерных элементов. //3DHILIGHT, 3DHIGHLOIGHT, Выделение трехмерных элементов. //3DLIGHT - Свет для трехмерных элементов. //COLOR3DSHADOW,BTNHIGHLIGHT - Тень для трехмерных элементов. //ACTIVEBORDER - Рамка вокруг активного окна. //ACTIVECAPTION - Заголовок активного окна.
ЗначВозврата = -1; СтрокаЦвета = ""; Попытка СтрокаЦвета = глWScript_Shell.RegRead("HKEY_CURRENT_USER\Control Panel\Colors\"+псИдентификаторЦвета); Исключение Сообщить(ОписаниеОшибки()+"[200612011227]"); Возврат ЗначВозврата; КонецПопытки; // Маска цвета будет такой: "212 208 200" (RGB), надо только разложить СтрокаЦвета = СтрЗаменить(СтрокаЦвета," ",","); СписЦветов = глСтрокаВСписок(СтрокаЦвета); Если СписЦветов.РазмерСписка() <> 3 Тогда Возврат ЗначВозврата; КонецЕсли; _Красный = Число(СписЦветов.ПолучитьЗначение(1)); _Зеленый = Число(СписЦветов.ПолучитьЗначение(2)); _Синий = Число(СписЦветов.ПолучитьЗначение(3)); ЗначВозврата = Макс(0,_Синий)*65536+Макс(0,_Зеленый)*256+Макс(0,_Красный);
Возврат ЗначВозврата; КонецФункции // глПолучитьСистемныйЦвет()
|
|
|