Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   {mdm}Zinc (http://www.flasher.ru/forum/showthread.php?t=81193)

MaxD 09.02.2007 12:59

Здравствуйте!
Никак не могу найти в Zinc, как получить список локальных дисков моего компьютера?

alexcon314 12.02.2007 10:30

Ссылка
 
Код:

this.createTextField("driveList", 1, 20, 20, 200, 300);
driveList.text="Список логических дисков:"+ newline;
var kernel32 = new mdm.DLL(mdm.System.Paths.windows + "\\system32\\kernel32.dll");
var numDrives:Number = 1 * kernel32.call("integer", "GetLogicalDrives");
kernel32.close();
var driveLettersMask:Array = numDrives.toString(2).split("");
startChar = 65 + (driveLettersMask.length - 1);
// добавляем в список логические диски системы
for (i = driveLettersMask.length - 1; i >= 0; i--) {
        if (driveLettersMask[i] == "1") {
                var driveLetter:String = String.fromCharCode(startChar - i);
                driveList.text += "Диск " + driveLetter + ":" + newline;
        }
}

под XP работает, под 98 не пробовал :bye:
или http://www.multidmedia.com/support/d...ion=show&id=26

Alexandor1984 12.02.2007 13:44

Цитата:

Сообщение от alexcon314
Здравствуйте. Небольшое сообщение на тему "правая кнопка" (наверно, перемещать не стоит)
Код:

onEnterFrame=function(){
        if (Key.isDown(2)) {
        //(code) by ex.: your_ShowMenu_function(); or broadcasterObj.broadcastMessage("onRightClick");
        }
}

Известный, наверное, многим способ отлова правого клика. Например, чтобы задействовать контекстное меню.
В цинке есть свой объект контекстного меню, но оно имеет сугубо виндовый внешний вид и не поддается кустомизации, вложенный пункт в него не встроишь... Но что хорошо в цинке - напрочь глушится стандартное контекстное меню проигрывателя :). Вышеприведенный код позволяет вывыводить меню любого вида (какое нарисуете) и любого содержания. Я, например, использую mx.controls.Menu. Надо только при компиляции в цинке указать Right Mouse Button Ignored. Именно, Ignored. Иначе, стандартное меню вывалится-таки.. Вобщем, цинк здесь на высоте :).
Есть еще пример, как прикрутить прогрессбар к файловым операциям и примерчик типа "hello world" на тему разработки своих dll для цинка, но не сейчас..

Это все круто, но как это сделать во Flex2?

MaxD 02.03.2007 17:59

Вопрос: как можно получить параметры языковой панели (текущий язык ввода) и менять их?

alexcon314 05.03.2007 01:39

Раскладка
 
Код:

var user32 = new mdm.DLL(mdm.System.Paths.windows + "\\system32\\user32.dll");
var parameter1 = user32.addParameter("integer", "1");
var parameter2 = user32.addParameter("integer", "8");
createTextField("out1", 1, 20, 20, 200, 20);
out1.type = "dynamic";
out1.border = true;
createTextField("out2", 2, 20, 50, 200, 200);
out2.type = "input";
out2.multiline = true;
out2.border = true;
go.onRelease = Go;
function Go() {
        var res = user32.call("boolean", "ActivateKeyboardLayout");
        out1.text = res;
}

out1 - это текстовое поле вывода, go - кнопка.
Жми на кнопку, вводи текст в поле ввода out2 и смотри что будет...:eek:
С параметрами можно поэкспериментировать.
Раскладка меняется только для окна проигрывателя.
За подробностями и расширением функционала кода обращайся к WIN API.
Да.. XP требуется.. вроде как.

MaxD 05.03.2007 15:57

Спасибо, сейчас попробую.

alexcon314 06.03.2007 08:47

Вдогонку
 
Наряду с mdm.DLL (самым на мой взгляд полезным инструментом цинка) есть еще очень хороший инструмент заставить цинк-приложение выполнять разного рода функции. mdm.FileSystem.saveFile позволяет скидывать динамически сгенерированный скрипт (VBS, JS, HTML) на диск и затем mdm.System.exec его запускать. (Если скрипт маленький, то mdm.SystemVBScript.execute без сохранения на диск). Я использовал это для генерации отчетов в форматах HTML, WORD - очень понравилось:o
Мощная справка по скриптам http://www.blindprogramming.com/ftp/...scrdoc56en.exe и куча ссылок http://www.blindprogramming.com.
И еще одно. Может быть не очень серьезно.
Цитата:

mdm.Database.MySQL.runQuery(query:String):Boolean
Parameters
query:String Correct SQL string with SELECT, INSERT, UPDATE or DELETE statement to be executed.
Это строки из help'a Zinc. Я почему-то прочитав их уперся в мысли, что только упомянутые типы запросов цинк корректно шлет на сервер MySql:bb: . Однако, это не так. В цинк встроен полноценный(!) mysql-клиент. Работает все, что может работать. create db, show, grant. В запрос можно встраивать функции (now(), concat() и пр.), join без проблем... Так что возможностей хоть отбавляй!

alexcon314 18.04.2007 00:15

Zinc->Shh->Linux->Bash
 
Здравствуйте.
Продолжая эксперименты с цинком, я столкнулся с такой проблемой.
Есть клиентская программа (цинк+windows). Ее задача - работа с файлами и папками на сетевом ресурсе, который расположен на сервере (Linux+Samba). Есть сложности с взаимодействием win-приложений с шарами на Linux в плане назначения атрибутов файлам/папкам. Для их преодоления я решил использовать утилиту Plink.exe (Putty command line tool), с помощью которой производится коннект с Linux-машиной по Shh и передается ( и выполняется, конечно) динамически формируемая команда оболочки bash. На пример, chmod 0755 path_to_somefile или chown user:group path_to_somefile. Все прекрасно работает до тех пор, пока в path_to_somefile отсутствуют ... да-да, именно - символы кирилицы. Сами по себе русские имена на линуксе нормально воспринимаются. Видимо, в момент передачи параметра Plink-у эта программа не может их как надо передать. В этом меня убеждет echo path_to_somefile >> my.log с каждой командой, а потом просмотр лога в линуксе - буквы попрежнему русские, но не те..
С папками/файлами на Samba обычные операции - delete,make,copy...- из цинка проходят нормально, и с русскими именами в т. ч. Но мне нужно именно менять атрибуты.
В поиске (кл.слово-кодировка) в основном обсуждаются проблемы взаимодействия флэша с php-скриптами.
Можно ли как-то перекодировать строку команды средствами только флэша?
Код:

var StdOut = mdm.System.execStdOut("plink -ssh hostname -l user - pw passwd command");

alexcon314 19.04.2007 18:46

Проблема решилась. Просто. Ремапом символов. Настроить Plink нужным образом не удалось. Правда, пока копался в исходника Plink-а, смог попутно настроить его на автоматическое сохранение ключа сессии без запроса (y/n).

rty 22.04.2007 02:28

Делал недавно авторан с видеопроигрывателем на Цинке. Понял, что косяков возникает немеренно по причине того, что используются всякие виндовс-медиа, квиктаймы... В зависимости от версии установленного плеера на разных машинах цинковский видеоплеер ведет себя по-разному... Сначала меня привлекла легкость расширения функционала флэша, однако думаю, что придется вернуться все-таки к Директору и MPEG Advance Xtre... Кто как выкручивается?

MaxD 23.04.2007 12:25

Вопрос таков: к Цинку была подключена дополнительная библиотека lib1 со своими внутренними командами (напр. save). Обращался к ней через fscommand("lib1.save","parametr1,parametr2").
Как теперь правильно обратиться к командам, используя синтаксис mdm. ...
Просто mdm.lib1.save(parametr1,parametr2) не работает...

MaxD 23.04.2007 13:47

Сам нашел: mdm.Extensions.lib1.save(...)

MaxD 28.04.2007 11:35

Вопрос: mdm.Dialogs.BrowseFile.ButtonText меняет текст кнопки "открыть/сохранить". А можно ли как-то поменять текст кнопки "отмена"?

MyXus 28.04.2007 15:42

У меня вот тоже вопрос..
Код:

mdm.System.Registry.load(3, "\\SOFTWARE");
возвращает "пусто". Как и с любым другим ключом. Не могу добиться толку ни от одной функции объекта Registry

alexcon314 28.04.2007 17:35

Код:

var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName");
var domain:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultDomainName");
// for winXP registry

Это работает у меня давно и железно - выцепляю из реестра логин текущего пользователя и название домена сети (локальной)
Другими функциями не пользовался - не было надобности

alexcon314 28.04.2007 17:50

Цитата:

Сообщение от MaxD
Вопрос: mdm.Dialogs.BrowseFile.ButtonText меняет текст кнопки "открыть/сохранить". А можно ли как-то поменять текст кнопки "отмена"?

Как менять текст на кнопке "отмена" не знаю - надо лезть в винду
Могу предложить изготовить собственное окно "Открыть файл" средствами цинка и делать с ним все что угодно :). Исходник я выкладывал на http://www.multidmedia.com/support/d...on=show&id=115 . 114 - то же только для "Открыть папку"

MyXus 28.04.2007 18:37

Цитата:

Сообщение от alexcon314
Код:

var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName");
var domain:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultDomainName");
// for winXP registry

Это работает у меня давно и железно - выцепляю из реестра логин текущего пользователя и название домена сети (локальной)
Другими функциями не пользовался - не было надобности

Угу. Осознал. Абстрактный вопрос: Я так понимаю, все папочки, что видны в левой панельке regedit - это ключи, а loadString/saveString что за айтемы создают - я не понимаю. Как убить эту строку нахрен? Там есть только deleteKey & deleteTree, но это не то.

udaaff 29.04.2007 04:26

2 alexcon314
хочу уточнить по поводу 45 поста. В dll я не соображаю, подскажи пожалуйста все таки как узнать какая включена раскладка в данный момент.
может есть идея, как создать броадкастер, который бы рассылал это событие??
(иметтся ввиду переключение раскладки)

alexcon314 29.04.2007 22:50

Вложений: 1
Ну я же подсказывал - WinAPI :)
Ну хорошо. Я изготоаил dll-ку gkbl.dll. Ее нужно положить рядом с экзешником, иначе в скрипте нужно прописать полный путь к ней (желательно без русских символов, во избежание...)
Код:

createTextField("out", 1, 20, 20, 200, 20);
out.type = "dynamic";
out.border = true;
var dll = new mdm.DLL("gkbl.dll");
var parameter = dll.addParameter("string", "");
go.onRelease = function() {
        var res = dll.call("string", "GetKBL");
        out1.text = res*1;
};

В поле out должно появиться число: 419 - если в данный момент задействована русская раскладка, 409 - если английская.
Это есть имена раскладок в винде.
На счет бродкастера нет пока идей, кроме тупого опроса по интервалу текущей раскладки с помощью этой функции (var res = dll.call("string", "GetKBL")) но это не есть красиво..
Файл с dll-кой во вложении.
PS. C вложением проблема - не хочет никак вкладываться. :bb: Давай на e-mail сброшу
а ... заработало вроде

alexcon314 29.04.2007 23:37

Для MuXys
Возможно имеет значение версия цинка. У меня 2.5.0.27
Но это не главное.
Действительно, с именованием методов цинка наблюдается некоторая путаница. Папочки в левой панели regedit'a - разделы (или ветки 'branches'). Методы mdm.System.Registry.createKey, .getKeyNames и .deleteKey (у меня работают) воздействуют именно на разделы.
Далее, в правой панели regedit'a отображаются ключи: название, тип, значение. которые в данном разделе присутствуют.
на пример
Код:

var login:String = mdm.System.Registry.loadString("3", "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon", "DefaultUserName");
в качестве последнего аргумента принимает имя ключа в данном разделе, а возвращает его значение.
То же относится и к .saveString(), который принимает аргументами ветку, имя ключа, значение.
и это тоже работает.
С удалением раздела (ветки) нет проблем. Но вот с удалением ключа или его значения - непонятки. .deleteValue() не работает. Да и принимает он, судя по мануалу просто ветку, имя ключа туда не вставляется...
Косяк по ходу. Увы.
Впрочем, это на мой взгляд не существенно. Удаляй ветку или изменяй значения ключей на непотребные. Ну, а про мощь dll я уже высказывался :) - можно и тут копнуть если ооочень надо.
Советую заглянуть сюда http://www.mdmforum.com/forum/index....hl=deletevalue - там изложен еще пара достойных идей как этот косяк спрямить. В частности, осбого внимания заслуживает использование утилиты редактирования реестра из командной строки REG DELETE.
Код:

var cmdExe = "REG DELETE раздел /v ключ";
var results = mdm.System.execStdOut(cmdExe);
mdm.Dialogs.prompt(results);

запусти cmd и набей reg delete /? или reg query /?
В общем, не мытьем так катаньем! :)
Да, еще. Методы .load() и .save() облегченный вариант всех прочих. В том смысле , что они воздействуют на определенную ветку в реестре, и ее не надо им указывать, ветка эта формируется при первом вызове .save(), точное ее местоположение огрворено в мануале: HKEY_CURRENT_USER\Software\<название формы приложения>\ Поэтому не удивительно, что у тебя в скрипте получался пустой ответ.
пример
Код:

go.onRelease = function() {
        mdm.System.Registry.save("myKey", "This is my Content");// записали в ключ 'myKey' значение 'This is my Content'
        var Result = mdm.System.Registry.load("MyKey");// считали только что записанное значение 
        mdm.Dialogs.prompt(Result);
};


MyXus 30.04.2007 00:01

Ну да. Здесь понятно. Просто не хочется мусорить в реестре оставляя левые ключи..
Самое ценное открытие/изобретение (для меня) в этой ветке - возможность испольования kernel32.dll. Супр просто.
А не знаешь еще системных либов такого рода?

alexcon314 30.04.2007 00:58

Если ты спрашиваешь о системных либах widows, то это неконкретный вопрос. Библитоек немало и все содержат массу (тысячи!) очень полезных функций. kernel32, user32, advapi32, gdi32 - все это интересно.
Вообще я пользуюсь справочником Win32 Programmer Reference, где многое изложено о функциях этих библиотек. (есть еще msdn - ресурсы) Правда, зачастую напрямки их подпихивать в цинк не удается в силу специфики формата вызова, но я приладился вроде обертывать их в dll-обертки и уже в таком виде подсовывать в цинк. Пример рядом - пост про то как определить текущую раскладку. На счет того что свупер просто - уточнил бы: супермощно :)

udaaff 30.04.2007 01:15

2 alexcon314
спасибо за помощь!
не мог ты подсказать, где можно найти инфо про эти библиотеки в понятной для человека форме :)

alexcon314 30.04.2007 01:54

Ну... уфф.. ты спросил :)
Полгода назад я боялся слова dll, поверишь? Теперь сам их пишу :). Всю инфу я качал из инета и искал в инете. Какие проблемы?
Ссылок кучи. search. Будут конкретные вопросы - пожалуйста, обращайся.

udaaff 01.05.2007 02:44

:umnik2:
посоветуй с чего начать... в сети дурдом какой-то :)
на каком языке это все пишется?

alexcon314 01.05.2007 09:42

Вложений: 1
К цинку можно подцепить dll, написанные на C++ или на Delphi. Поэтому, для начала нужно обзавестись соответствующими инструментами программирования: MS Visual C++, MS VisualStudio, Borland Delphi или Borland C++ - это наиболее распространенные IDE. Я больше использую С++. Неплохо бы приобрести начальные знания по этим языкам. Как - это на любителя. По мне лучше приобрести книгу в магазине. Правда, с этим у меня проблемы - в моем городе просто нет таких магазинов :). Поэтоиу путь лежит на программерские форумы опять же, где добрые люди выкладывают ссылки на электронные мануалы десятками. Придется волей-неволей повариться в этом соку прилично времени, если новичок. Следует обратить внимание на WinAPI - собственно к нему и надо стремиться, вобщем-то. Это "собрание функций сидящих в винде и в ее библиотеках". Если не хочешь сам их программировать (а это долго) лучше использовать готовые.
Забиваешь для начала "программирование С++" в поиск - и понеслась.
Когда созреешь, забивай в поиск "dll" - и снова понеслась. ЧЕСТНО(!), я не помню таких ссылок, где было бы все и сразу. Инфу нужную таскаешь в основном по крупицам - так уж повелось. В конце концов упираешься в пример работающего исходника какой-нибудь dll-ки. Вот тут я тебе помогу сразу, см. вложение. Тестить dll можно прямо в окне цинка. Там есть Tools->Extension Creator. Цепляешь в этом креаторе dll-ку, он тебе высветит доступные функции, в ней заложенные. На следующей закладке задаешь тестовые аргументы выбранной функции и тип возвращаемого значения, если нужно. Для этого нужно хорошо представлять себе что за функцию ты тестишь. На следующей закладке грузишь dll и жмешь "выполнить". Если все хорошо, получишь от dll достойный ответ. Ну а как из скрипта цеплять dll я уже показывал.
Но лучше начать с готовых виндовых dll-ек типа kernel32 и т.д. Посмотри на них в креаторе. на их функции. Где-то ранее в этой же теме я выкладывал скрипт, вызывающий системный "писк" и скрипт, перемещающий файл - это как раз через kernel32 работает. Главное - найти хороший справочник по этим функциям то есть справочник по ...- да-да... по Win API. См. мой пост 62 выше. Выложить его здесь не могу - он весит прилично. Постараюсь выложить на http://mdm-zinc.narod.ru если будет время ... или опять же - search.
И еще посоветую (во второй раз уже!) - обрати внимание на mdm.System.VBScript, массу примочек можно сделать не прибегая к dll напрямую, а через VB(JS)-скрипты, там все покажется проще.
Вот так примерно. Ты уж извини за пространный ответ.:(
P.S. исходник dll - это проект сделанный в MS VisualStudio 2003. При желании можно его приспособить и под другие IDE

alexcon314 02.05.2007 00:39

Два в одном
 
Вложений: 1
Подумал, почему бы не слить функции "изменить раскладку" и "узнать текущую раскладку" в одну dll?
Код:

var dll = new mdm.DLL("kbl.dll");
createTextField("out1", 1, 20, 20, 200, 20);
out1.type = "dynamic";
out1.border = true;
out1.text = "See result here.";
createTextField("out2", 2, 20, 50, 200, 200);
out2.type = "input";
out2.multiline = true;
out2.border = true;
out2.text = "Type your text here.";
change_kbl.onRelease = function() {
        var parameter = dll.addParameter("integer", "");
        var res = dll.call("integer", "FollowKBL") * 1;
        if (res != 0) {
                out1.text = "Keyboard layout has changed.";
        } else {
                out1.text = "Error has occured.";
        }
        //res=0 if error has occured
        Selection.setFocus(out2);
};
get_kbl.onRelease = function() {
        var parameter = dll.addParameter("string", "");
        var res = dll.call("string", "GetKBL") * 1;
        if (res != 0) {
                out1.text = "Keyboard layout name is " + res;
        } else {
                out1.text = "Error has occured.";
        }
        //res=0 if error has occured
        Selection.setFocus(out2);
};

Это скрипт, иллюстрирующий использование.
Сама dll-ка во вложении. (Положить ее надо рядом с экзешником.)
P.S. Просьба отписаться, если не работает. Интересно все-таки..

udaaff 02.05.2007 02:11

Все работает! Прошлое тоже работало после небольшой корректировки.
Выкачал справочник точно такой как там в хэлпе, буду разбираться, очень интересно. А функцию нельзя никак заставить результат без нолей возвращать? (просто интересно)
Extensions are a fantastic new feature -- это точно.
dll -- это просто напросто сборник процедур и функций -- я правильно понял?
А что к примеру полезного можно сделать при помощи метода System.JScript.execute()?

alexcon314 02.05.2007 08:57

Функция GetKeyBoardLayoutName возвращает именно с нулями, но при "обертывании" в свою dll пишется функция из которой уже она вызывается и возвращаемое значение можно привести к любому виду в самой этой оберточной dll-ке. Это не проблема. Можно заставить ее возвращать вообще "RU" Или "EN".
По поводу VBScript, JSScript я давал ссылку на справочник по скриптам в посте сразу за самым первым примером с раскладкойь (не помню номер, наверно 46-47). Почитай этот мануал, там много интересного. ПРавда, обратную связь с функцией в VB(JS) скрипте не так просто организовать.
Но в принципе это преодолимо, а при определенных условиях и вовсе не имеет значения.
Для примера: в цинке есть косячок (один из первых, с которым мне пришлось столкнуться), состоящия в томБ что RemoveFolder - метод удаляет только (и только) пустую папку, что не приемлемо. Приходилось писать рекурсию. Само по-себе не обременительно, но не приятно. Через соответствующий VBScript этот косячок убирается на раз. Без ковыряний в API-шных функциях. Но что мне особо понравилось (извините, модераторы, за невольное повторение) - это динамическая выгрузка данных в разные форматы - в Word, Excel, HTML (последнее, конечно без всяких скриптов, просто упомянул до кучи:)). Никто не мешает и обработку указанных форматов сделать, хотя это посложнее. И без всяких ActiveX в цинке (они чего-то не очень мне понравились).
Кстати, System.JS(VB)cript.execute() тоже косяка кидает. Проблема решается выгрузкой скрипта на диск и последующим запуском. При выгрузке больших по размеру скриптов, рекомендуется делать построчную выгрузку с помощью .appendFile - метода.
Еще мне понравился запуск command line - утилит. Их много всяких разных и помогают порой серьезно. Например см. мой пост в этой теме "Zinc->Shh->Linux->Bash" (48 пост вроде). Ну нет у винды shh dll-ки, а поди ж ты - работает shh :)!
Но dll, конечно, остается на первом месте.

alexcon314 02.05.2007 15:30

Выгрузка в Word
 
Если я Вам еще не надоел :), позволю себе привести пример работы с VBScript. В системе должен быть установлен Word, чтобы все работало.
Код:

// имитация динамического массива данных; например, массив - результат выборки из БД MySql
var dataArray:Array = new Array();
for (var i = 0; i <= 100; i++) {
        dataArray.push({field1:i + " a", field2:i + " b", field3:i + " c", field4:i + " d", field5:i + " e", field6:i + " f", field7:i + " g", field8:i + " h"});
}
//создаем документ, таблицу, элеметарное форматирование
var vbcode:String = "";
vbcode += "Set objWord = CreateObject(\"Word.Application\")\r";
vbcode += "objWord.Visible = True\r";
vbcode += "Set objDoc = objWord.Documents.Add()\r";
vbcode += "objWord.Activate()\r";
vbcode += "objDoc.Select\r";
vbcode += "objDoc.Application.Selection.PageSetup.Orientation = 1\r";
vbcode += "objDoc.Application.Selection.PageSetup.LeftMargin = 30\r";
vbcode += "Set objRange= objDoc.Range()\r";
vbcode += "objDoc.Tables.Add objRange,1,8\r";
vbcode += "Set objTable = objDoc.Tables (1)\r";
vbcode += "objTable.Range.Style = \"Сетка таблицы\"\r";
for (var i = 1; i <= 8; i++) {
        vbcode += "objTable.Columns(" + i + ").Width =80\r";
}
vbcode += "objTable.Rows.Height = 16\r";
vbcode += "objTable.Rows.Add ()\r";
for (var i = 1; i <= 8; i++) {
        vbcode += "objTable.Cell(1, " + i + ").Range.Text = \"Колонка " + i + "\"\r";
}
vbcode += "objDoc.Tables (1).Rows(1).HeadingFormat = True\r";
mdm.FileSystem.saveFile(mdm.System.Paths.appData + "toWord.vbs", vbcode);
vbcode = "";
//заполняем таблицу
for (var i = 0; i <= 100; i++) {
        vbcode += "objTable.Rows.Add ()\r";
        for (var j = 1; j <= 8; j++) {
                vbcode += "objTable.Cell(" + (i + 2) + ", " + j + ").Range.Text = \"" + dataArray[i]["field" + j] + "\"\r";
        }
        mdm.FileSystem.appendFile(mdm.System.Paths.appData + "toWord.vbs", vbcode);
        vbcode = "";
}
go.onRelease = function() {
        mdm.System.exec(mdm.System.Paths.appData + "toWord.vbs");
};

Аналогично можно поступить с Excel'ем и с HTML. Форматирование текста - средствами VBA. Не привожу из экономии места.

udaaff 02.05.2007 16:39

неа, не надоел :)
Мануал отличный! Я, кстати, много интересного для себя нахожу на сайте http://www.intuit.ru/courses.html -- всем советую.

udaaff 02.05.2007 17:21

В ActionScript classes > Key > getAscii (Key.getAscii method) есть один недостаток -- The ASCII values returned are English keyboard values (т.е. какая бы раскладка не была включена, вернется все равно английский аски). Бился над этой проблемой кучу времени. Единсвенный, относительно нормальный, способ, который я придумал -- это английский аски код пропускать через массив.
Код:

this.createTextField("my_txt", 0, 100, 100, 100, 100);
//
var rusLayout:String = ' !Э№;%?э()*+б-ю.0123456789ЖжБ=Ю,"ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯх\\ъ:_ёфисвуапршолдьтщзйкыегмцчняХ/ЪЁ';
var rusLayoutCL:String = ' !э№;%?Э()*+Б-Ю.0123456789жЖб=ю,"ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯХ\\Ъ:_Ёфисвуапршолдьтщзйкыегмцчнях/ъё';
//
var filter:Array = new Array(32);
filter = filter.concat(rusLayout.split(""));
var filterCL:Array = new Array(32);
filterCL = filterCL.concat(rusLayoutCL.split(""));
//
var ascii:Number;
var rusSymbol:String;
var currentFilter:Array;
//
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
        ascii = Key.getAscii();
        //
        if (!Key.isToggled(Key.CAPSLOCK)) {
                currentFilter = filter;
        } else {
                currentFilter = filterCL;
        }
        //
        rusSymbol = currentFilter[ascii];
        //
        my_txt.text = rusSymbol;
};
Key.addListener(keyListener);
//}

Работает только при включенной английской раскладке!!
У меня есть подозрения, что это как то можно обойти при помощи цинка. Есть какие-нибудь мысли по этому поводу?

alexcon314 02.05.2007 18:03

Вложений: 1
Уточни: ты автоматическую транслитерацию задумал сделать? Или тебе нужно просто, чтобы принудительно всегда печаталось по русски? Или нужно печатать по русски при реально включенной английской раскладке? Не догоняю..
Цитата:

Работает только при включенной английской раскладке!!
При включенной русской зачем пропускать через массив? И так по русски все будет...Или я чего-то не понимаю? Поясни :)
А не работает до конца потому, что при смене раскладки Key.getAscii() может для некотрых кнопок возвращать разные значения в отличие от Key.getCode(), кстати, который возвращает код клавиши один и тот же не зависимо от раскладки.
В подмогу вложение.

udaaff 03.05.2007 01:37

ты своей флэшкой сам ответил на свой вопрос!! :)
и при русской и при аглийской раскладке возвращаются английский аски!!! Т.е. в любом случае вернется нерусский код :)
Попрубуй после того как ты считал код нажатой клавиши, вывести русский символ -- ничего не получится!! Как узнать код русской нажатой клавиши? -- вот это я имел ввиду.

etc 03.05.2007 12:07

Код клавиши (не символа) не зависит от раскладки. Просто потому что кнопки на клавиатуре одни и те же.

alexcon314 03.05.2007 14:20

Вложений: 1
Неужели это продолжение темы http://flasher.ru/forum/showthread.php?t=92449 ? Значит ли это, что тебе нужно ТОЛЬКО узнать КОД символа на нажатой кнопке в русской раскладке и напечатать его? Тогда попробуй вот это - см. вложение.
Если без цинка. И если это то, что тебе надо.
С цинком должно быть проще - принудительно переключать раскладку на русскую по какому нибудь событию и какие проблемы после этого - я не понимаю.

alexcon314 03.05.2007 18:23

Вдогонку
 
Вложений: 1
Забыл "залипание" SHIFT'а сделать. Исправился.

udaaff 04.05.2007 01:25

2 alexcon314 выложи свой код поджалуйста!
флэшки мне мало о чем говорят...

alexcon314 04.05.2007 08:31

Код
 
Вложений: 1
код во .fla:
Код:

#include "remap.as"
this.createTextField("my_txt", 0, 10, 10, 500, 220);
my_tex.type = "input";
my_txt.multiline = true;
my_txt.border = true;
ke = "";
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
        var code:Number = Key.getCode();
        if (code == 13) {
                my_txt.text += newline;
                return;
        }
        if (code == 32) {
                my_txt.text += " ";
                return;
        }
        if (Key.isDown(Key.SHIFT)) {
                shift = true;
        } else {
                shift = false;
        }
        if (shift && !Key.isToggled(Key.CAPSLOCK)) {
                ke = "0";
        }
        if (!shift && Key.isToggled(Key.CAPSLOCK)) {
                ke = "0";
        }
        if (shift && Key.isToggled(Key.CAPSLOCK)) {
                ke = "";
        }
        if (shift && code == 220) {
                var ke = "0";
        }
        if (!shift && code == 220) {
                var ke = "";
        }
        if (shift && code == 191) {
                var ke = "0";
        }
        if (!shift && code == 191) {
                var ke = "";
        }
        if (shift && code >= 48 && code <= 57) {
                var ke = "0";
        }
        if (!shift && code >= 48 && code <= 57) {
                var ke = "";
        }
        my_txt.text += String.fromCharCode(remap["i" + code + ke]);
        ke = "";
};
Key.addListener(keyListener);

include во вложении
Привязка происходит именно к кодам клавиш, а не к Ascii. В remap.as просто вручную расписаны по кнопкам символы. Все это можно заточить получше. Это всего лишь рабочий вариант.
Косяк: если вручную нарисовать TextField и дать ему тип input - работать будет гораздо хуже. Поможет my_txt.restrict = "^a-z\\A-Z"

alexcon314 04.05.2007 20:31

Попытался построить broadcaster-listener события "изменилась раскладка". Вариант с вызовом dll-функции по интервалу из цинка через setInterval или onEnterFrame отпадает, т.к. при коротких интервалах вызова цинк падает. Почему - не выяснял.
Пробовал вариант .onKeyDown (.isDown) c клавишами Ctrl+Shift или Alt+Shift. Установленный в системе способ переключения раскладки клавишами можно о узнать в реестре. С Ctrl куда ни шло. А вот Alt засечь не получается. Тупик.


Часовой пояс GMT +4, время: 19:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.