PDA

Просмотр полной версии : {mdm}Zinc


alexcon314
14.06.2006, 14:59
Привет все! Кто как и при каких обстоятельствах использовал mdm zinc?
Недавно ознакомился с мануалом, есть конкретный проект, где зинк-навороты были бы оочень кстати... Реализовал проект на Perl+Apache+AS+MySQL, но хочется большего особенно в области работы с файловой системой и запуском из флеша win-приложений. Простая компиляция готового swf че-то не то выдает, точнее все вроде работает но не до конца как было ..В swf-e идет переключение между кадрами по кнопкам, а в exe-шнике при запуске все кадры прокручиваются до конца и данные не обновляются динамически после коннекта с сервером, только после перезапуска видны изменения в записях в базе. Но в swf-e все как по маслу...Кто-нибудь понимает в чем дело?
Простенькие приложения на зинке вроде работают что и манит..

KUZEN
14.06.2006, 21:29
Так сказать мало что можно, нужно смотреть файлы да и собственно знать как что и для чего было сделано, вот только разгребать большие проэкты нет не времени ни желания , выкладывай может кто нибудь посоветует, что нибудь полезное ...

alexcon314
15.06.2006, 02:01
В swf-е работает а в Цинке нет: по щелчку вызывается функция обновления таблицы с данными после редактирования(включает .sendAndLoad() ..ни больше ни меньше.. вопрос почему так может быть в принципе? Или перед компиляцией в Цинке код надо как-то "подготовить"? Может его (Цинка) родные классы использовать для передачи данных? С прокруткой разгреб уже..

alexcon314
16.06.2006, 01:56
В Цинке есть встроенный дебуггер: трейсит переменные при запуске экзешника что твой флэш ..приятно, только в код надо вставить
mdm.Exeption.trace(); в нужном месте как с функцией флэша trace()...Неплохо вобщем, но до флэшевского дебуггера конечно далеко..
Расколол я запару с обновлением таблицы данных, короче. Если интересно, докладаю: AS-класс LoadVars, который использовался в скрипте имеет метод load() и метод sendAndLoad(). Так вот в скрипте в том месте где был баг стоял load()...когда писал там не было нужды использовать sendAndLoad()(неточно выразился когда формулировал вопрос ранее). При первом прогоне участка кода уже в экзешнике все работает строка с сервера подгружается а потом как будто работает кэш: функция где вызывается load() повторно работает но данные почему-то не обновляются .. причем в самом массиве свойств прнимающего объекта ( for ..in..) все остается как прежде хоть он и инициализируется заново... вобщем надо еще подумать и покрутить.. Заменил на sendAndLoad() просто с фиктивной строкой запроса на сервер (принимаемая строка осталась без изменений) и все стало как надо ..уфф!
Чем дальше тем интереснее..
Кстати, облазил некоторое количество тематических форумов - про Цинк глухо, так кое-где кое-как не интересно...Неужто невостребован такой продукт? Или просто труден или просто лажа? Насчет лажи я конечно не думаю что так..

iNils
16.06.2006, 02:02
А на родном форуме был?

alexcon314
16.06.2006, 12:07
В смысле MDM Support Forum (http://www.mdmforum.com/forum/)? Был .. я имею в виду в рунете .. пообщаться толком не найду с кем.. Думаю тема интересная, можно ее развить.

iNils
16.06.2006, 12:15
В смысле MDM Support Forum (http://www.mdmforum.com/forum/)? Был .. я имею в виду в рунете .. пообщаться толком не найду с кем.. Думаю тема интересная, можно ее развить.Полгода назад у меня было много вопросов по зинку в плане работы с файловой системой. Половину ответов нашел сам, половину на их форуме. В России ничего нужного мне не попадалось, но может плохо искал.

alexcon314
16.06.2006, 17:37
По ходу и правда глухо... Ты не пропадай:)) Я тут проект на Цинке завернул.. может совет какой спрошу

alexcon314
27.06.2006, 11:56
Открыл новый ресурс по цинку http://mdm-zinc.narod.ru

alexcon314
07.07.2006, 09:43
iNils, у меня вопрос по работе с файловой системой в цинке. При вызове mdm.FileSystem.deleteFolder(); папака успешно удаляется, только если она пустая. Ты с этим сталкивался?

alexcon314
07.07.2006, 12:08
c удалением файлов проблем нет ..т.е. папку надо удалять рекурсией что-ли?:(
пробовал дополнить цинк соответствующим методом через mdm.Extensions выбрав функцию в kernel32.dll ... тест проходит но в триале нет экспорта:((

iNils
07.07.2006, 12:18
iNils, у меня вопрос по работе с файловой системой в цинке. При вызове mdm.FileSystem.deleteFolder(); папака успешно удаляется, только если она пустая. Ты с этим сталкивался?Главное что бы ни одно приложение не использовало эту папку. Если ты в проводнике заходишь в нее и пытаешь флешкой(+зинк) папку удалить, то у тебя это не получится.

alexcon314
07.07.2006, 14:33
да..была ведь такая мысль..щас попробую..

alexcon314
07.07.2006, 15:23
попробовал.. чего-то не работает..может все-таки в триале дело? по идее расширить цинк несложно если доступна опция экспорта расширений а в триал заложили чтоб помучились, чего попроще..

alexcon314
07.07.2006, 15:32
вообще я пытаюсь файловый менеджер сваять:) ..для малого предприятия с сетью дабы автоматизировать стандартные действия юзеров ну и контроль за их действиями наладить в духе систем документооборота.. есть исходник небольшой может глянешь?:) Хочу прицепить туда методы mdm.FIleSystem для начала .. и вот на первой же такая запара... хотя copy make вроде работают ничего..

alexcon314
12.07.2006, 17:07
выяснил, что удаляется папка только если она пустая, независимо от того работает с ней еще какая программа или нет. пришлось удалять рекурсивно:) помедленнее, чем в проводнике но в разумных пределах...

alexcon314
16.07.2006, 02:36
в триальном цинке есть возможность обойти некоторые трудности с созданием расширений:
btn.onPress = function() {
myDLL = new mdm.DLL("C:\\WINDOWS\\system32\\kernel32.dll");
var frequency = myDLL.addParameter("integer", "1000");
var duration = myDLL.addParameter("integer", "1000");
myDLL.call("boolean", "Beep");
};
или..
btn.onPress = function() {
myDLL = new mdm.DLL("C:\\WINDOWS\\system32\\kernel32.dll");
var in_file = myDLL.addParameter("string", "c:\\myfile.log");
var out_file = myDLL.addParameter("string", "c:\\var\\filemy.log");
myDLL.call("boolean", "MoveFileA");
};
все пищит и перемещается :)
или даже
btn.onPress = function() {
myDLL = new mdm.DLL("C:\\WINDOWS\\system32\\kernel32.dll");
var deleteDir = myDLL.addParameter("string", "c:\\myDir");
myDLL.call("boolean", "RemoveDirectoryA");
};
однако, эта виндовая функция удаляет опять же только пустые папки!!! :)

iNils
16.07.2006, 02:56
У меня папки и не пустые удалялись.

alexcon314
17.07.2006, 00:34
еще вопрос (не сочти за нахальство:)): ты пользовательский интерфейс какой-нибудь делал для работы с файлами ( во флэше само собой)? Цинковые объекты mdm.FileExplorer(); меня не совсем устраивают из-за их ярко выраженной "виндовости" и с функционалом у них что-то не то...
на пример, drag'n'drop не работает и не только это.. у меня есть наработки по использованию mx.controls.Tree для отображения дерева папок. На сайте Макромедии нашел расширенный вариант этого компонента с функционалом drag'n'drop, но... пока в раздумьях, есть проблемы. Ничего не посоветуешь?:) о креативном дизайне и исполнении речь не идет пока..

alexcon314
17.07.2006, 01:15
да..еще. Смотрел твое портфолио - понравилось:) . самопроигрывающийся сайт меня прямо вдохновил..:) своё показать не могу:(

alexcon314
01.10.2006, 01:16
Здравствуйте все. Долго отсутствовал - работал. С цинком. Поюзал много чего из его встроенных классов. Впечатление вполне положительное. Сетевой файл-менеджер сделал со всеми необходимыми функциями(copy,del,rename, recent,sendfile и т.д + общалка в стиле miranda + mysql -аккаунтинг). Начал делать под цинк dll-ки на VC++...:-)

Zone71
07.10.2006, 18:29
Уважаемые флешеры!!! подскажите, где можно раздобыть этот ***** (в смысле ****** версию). Trial версию нашел но **** на нее не идет. *****************************************

iNils
07.10.2006, 22:59
Zone71, читаем 3-ий пункт правил http://www.flasher.ru/forum/rules.php

Zone71
08.10.2006, 21:41
Не могу понять, чем я противоречу этой правиле?

Kyber Anton
08.10.2006, 23:40
Желание большой халявы возбраняется.

alexcon314
22.11.2006, 00:22
Здравствуйте. Нет ли у кого опыта использования Flash Communication Server? В паре с цинком, конечно. Неплохие перспективы вырисовываются как будто.. По-общаемся?

KUZEN
23.11.2006, 15:01
У меня тут другой вопросец ... как узнать координаты самого окошка в винде ... и можно ли программно управлять положением окошка?

Fl00r
23.11.2006, 15:25
Кузен в правильную сторону мыслишь. Хороший вопрос.

Очень уважаю мультидмедию за их некогда благородный жест по отношению ко мне. Они мне бесплатно выслали программу с ключами, так как мы никак не могли перевести деньги в доллары/евры. Очень адекватные люди оказались.

iNils
23.11.2006, 16:48
У меня тут другой вопросец ... как узнать координаты самого окошка в винде ... и можно ли программно управлять положением окошка?
******
Сорри, у меня был PDF файл с хелпом и данные я взял от туда, но потом заметил там странные вещи и потом решил перепроверить в хелпе на сайте, а там такого не нашел.

Fl00r
23.11.2006, 16:49
А как вернуть эти координаты?

KUZEN
23.11.2006, 16:51
Вопрос решён mdm.Forms.MainForm.x

alexcon314
23.11.2006, 18:38
Как же с темой Zinc + FCS? Я извиняюсь за возможную навязчивость.
В доках по FCS говорится, что server-side скрипты можно оформлять и как .asc и как .js файлы. Что это означает? С .asc понятно, а с .js - что это, файлы javascript? Тогда, далее, можно ли написав javascript-файл заставить сервак работать с его локальной файловой системой при помощи объектов javascript? Или я совсем не туда уперся? Про sharedObject я не говорю - тут ясно. Или если вернуться к .asc файлам: сработает ли fscommand в таком файле? И по встроенным as-классам - допускается ли их использование в .asc сценариях?
Понимаю, что все можно проверить и прочитать где надо самому, но на что тогда форумы :) ?

KUZEN
23.11.2006, 23:20
Я в этом вопросе не компетентен, подождём тех кто уже делал подобное

Dendroid
24.11.2006, 06:28
Как же с темой Zinc + FCS? Я извиняюсь за возможную навязчивость.
Тут главное понимать, что FCS - это просто сервер для realtime collaboration, поддержки асинхронных соединений между сервером и флэшем - очень нишевый продукт. Его нельзя рассматривать как "универсальное средство для написания серверных частей на AS".
В доках по FCS говорится, что server-side скрипты можно оформлять и как .asc и как .js файлы. Что это означает? С .asc понятно, а с .js - что это, файлы javascript? Тогда, далее, можно ли написав javascript-файл заставить сервак работать с его локальной файловой системой при помощи объектов javascript?
Очень странные выводы. Способность понимать какой-то скриптовый язык не переносит автоматически всю функциональность этого языка и его объекты работы с окружением на интрепретатор - это просто средство оформления потока исполнения. FCS не предназначен и не может работать с сервером и его файловой системой, для этого исплользуются getaways - шлюзы для вызова серверных приложений: Coldfusion, Amfphp, Flash Remoting. Нравится javascript - смотрите в сторону ASP.
Или я совсем не туда уперся? Про sharedObject я не говорю - тут ясно. Или если вернуться к .asc файлам: сработает ли fscommand в таком файле? И по встроенным as-классам - допускается ли их использование в .asc сценариях?
На самом деле .asc имеет весьма отдалённое сходство с .as (по большому счёту, это всего лишь типы данных, ключевые слова и объект Math). Даже вызовы к sharedObject оформляются по-другому, и работает он немного иначе, и формат на диске у него другой. Ни о каких fscommand и речи нет, чего там вызывать, и главное - у кого? А переделать .as в .asc - обычно задача нетривиальная, если там не просто абстрактные математические функции...
Понимаю, что все можно проверить и прочитать где надо самому, но на что тогда форумы :) ?
:bye:

alexcon314
24.11.2006, 08:31
Спасибо за исчерпывающий ответ. Вы сэкономили мне массу времени :) . Что-то подобное я и подозревал.
А почему флэш (macromedia) так чурается работы с файловой системой? (глупый вопрос)

alexcon314
26.11.2006, 21:11
К FCS думаю еще вернемся. А сейчас хотелось бы обсудить возможностей классов mdm Script таких как mdm.FTP() mdm.HTTP(), а также объектов класса mdm.Network(HTTPD, Mail, UDP, TCP, UDP.TFTP, UDP.Socket, TCP.FileServer). С сокетами я работал вполне успешно. А вот по серверам FTP, FTPD, HTTP, TCP.FileServer вопрос такой: насколько они надежны и стабильны в работе? как обстоят дела с количеством подключений, держат ли они нагрузку какую? Все применительно к локальной сети. Дело в том, что манит простота их организации, но не обманет ли? :)

alexcon314
26.11.2006, 23:24
C классами mdm.FTP и mdm.HTTP я пожалуй погорячился. С их помощью в приложение можно встроить соответствующих клиентов, не более, если верить документации. А вот по поводу объектов в классе mdm.Network вопрос остается открытам.. Меня, как вы, наверно, поняли, интересует возможность организации собственного сервера на этих объектах. Есть мысли по поводу mdm.Network.TCP.FileServer и mdm.Network.UDP.TFTP - использовать их для работы с файловой системой сервера или как дополнение к FCS для тех же целей.

alexcon314
28.11.2006, 17:04
Из приведенных выше классов и объектов mdm меня наиболее вдохновил
mdm.Network.HTTPD - на его основе реально поднять свой сервер приложений(!). По крайней мере, в принципе. Насколько это будет реальный сервак - нужно экспериментировать, а может кто уже и сталкивался? Отзовитесь :)! Кому интересно даю ссылку на топик в форуме mdm, где приводится кусок рабочего кода - заготовки для такого сервера: http://www.mdmforum.com/forum/index.php?showtopic=13492&hl=httpd. Интересный результат получится если его немного поправить:
getThis = "c:\\var\\Apache2\\htdocs\\index.htm";
mdm.Network.HTTPD.setResponse(mdm.FileSystem.loadFile(getThis), ASYNC);
Если ввести в адресную строку браузера http://127.0.0.1:8080/, то будет возвращена страница из htdocs апача! (путь к хтмл-у конечно может быть и другой :)). А если http://127.0.0.1:8080/<что-нибудь>?<par1=..&par2=..> можно видеть как "сервак" "парсит" строку запроса..
Не знаю как на остальных, а на меня это произвело неизгладимое впечатление :). Кроме того, в строке запроса можно напрямую отдавать команды свф-у внутри цинк-экзешника-сервера. Круто!

alexcon314
28.11.2006, 23:12
Здравствуйте еще раз. Если кто посмотрел скрипт в топике mdm форума (см. выше), возможно задался вопросом: что за константа ASYNC такая? В доках о ней вроде я ничего не видел (надо еще глянуть :)). Неожиданно быстро получил ответ на том же форуме:
"mdm.ASYNC is a switch, it should does not matter what value it has, it imply a constant that could be provided as last argument (additional to required arguments in given method) - if provided ZINC tries to execute invoked method in async way - that is wrapper return immadiately letting next line of flahs code to execute, it is appliable only for methods that are type of Void - that is they do not return anything, using it for methods
that are expected to provide results (say like mdm.Database.MSAccess.getData()) does not make sense - because there
is no other way to get results from {mdm} script v.2 methods in async way (unless explicitely introduced by "events" methods for some objects - say like mdm.Browser.onDocumentComplete)"
B еще :
"Synchronous API Considerations (When changing to {mdm}script v2)
While {mdm}script 2.0 by default is synchronous, in some cases you might want to make the calling of a method asynchronous. This allows the flash player to continue its playback and scripting while the Zinc method is busy.
To make any {mdm}script 2.0 call asynchronous, you must add one more parameter to the end which defines it as such:

Synchronous call: mdm.Dialogs.prompt(“Hello”);
Asynchronous call: mdm.Dialogs.prompt(“Hello”,mdm.ASYNC);
NOTE: {mdm}script 1.0 calls are Asynchronous."
А здесь http://www.mdmforum.com/forum/index.php?showtopic=18226&st=0&p=81773&#entry81773 есть отличный пример использования с progressbar'ом. Без ASYNC привязать процесс к progressbar'у в цинке наверно не получится..

alexcon314
15.01.2007, 17:17
Здравствуйте. Небольшое сообщение на тему "правая кнопка" (наверно, перемещать не стоит)
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 для цинка, но не сейчас..

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/developers/articles/?action=show&id=26

Alexandor1984
12.02.2007, 13:44
Здравствуйте. Небольшое сообщение на тему "правая кнопка" (наверно, перемещать не стоит)
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/scripts/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
Здравствуйте.
Продолжая эксперименты с цинком, я столкнулся с такой проблемой.
Есть клиентская программа (цинк+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
Вопрос: mdm.Dialogs.BrowseFile.ButtonText меняет текст кнопки "открыть/сохранить". А можно ли как-то поменять текст кнопки "отмена"?
Как менять текст на кнопке "отмена" не знаю - надо лезть в винду
Могу предложить изготовить собственное окно "Открыть файл" средствами цинка и делать с ним все что угодно :). Исходник я выкладывал на http://www.multidmedia.com/support/developers/exchange/?action=show&id=115 . 114 - то же только для "Открыть папку"

MyXus
28.04.2007, 18:37
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
Ну я же подсказывал - 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.php?showtopic=16342&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
К цинку можно подцепить 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
Подумал, почему бы не слить функции "изменить раскладку" и "узнать текущую раскладку" в одну 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
Если я Вам еще не надоел :), позволю себе привести пример работы с 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
Уточни: ты автоматическую транслитерацию задумал сделать? Или тебе нужно просто, чтобы принудительно всегда печаталось по русски? Или нужно печатать по русски при реально включенной английской раскладке? Не догоняю..
Работает только при включенной английской раскладке!!
При включенной русской зачем пропускать через массив? И так по русски все будет...Или я чего-то не понимаю? Поясни :)
А не работает до конца потому, что при смене раскладки Key.getAscii() может для некотрых кнопок возвращать разные значения в отличие от Key.getCode(), кстати, который возвращает код клавиши один и тот же не зависимо от раскладки.
В подмогу вложение.

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

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

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

alexcon314
03.05.2007, 18:23
Забыл "залипание" SHIFT'а сделать. Исправился.

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

alexcon314
04.05.2007, 08:31
код во .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 засечь не получается. Тупик.

udaaff
05.05.2007, 05:23
спасибо за помощь!!!

alexcon314
06.05.2007, 12:23
Предлагаю пример простого отлова события "изменилась раскладка".
Для работы нужна kbl.dll (см. вложения ранее в этой теме)

var dll = new mdm.DLL("kbl.dll");
function GetKBL():Number {
dll.clear();// <- В ОТСУТСТВИЕ ЭТОЙ СТРОЧКИ ЦИНК МОЖЕТ УПАСТЬ
var parameter = dll.addParameter("string", "");
var res:Number = dll.call("string", "GetKBL") * 1;
return res;
}
currentKBL = GetKBL();
function CheckKBL() {
var gkbl = GetKBL();
if (currentKBL != gkbl) {
mdm.Dialogs.prompt("KeyBoard Layout changed to " + gkbl);
currentKBL = gkbl;
}
}
var interval = setInterval(CheckKBL, 10);




dll.clear() очищает список параметров dll, который в цинке имеет, кстати, "сквозной" характер. Например. добавленный ранее параметр попадает в аргументы при следующем вызове уже другой функции. Поэтому, если вызывается несколько функций из одной dll слдедует непосредственно перед вызовом делать dll.clear(). А так, конечно можно установить единственный параметр сразу по загрузке и вызывать одну и ту же функцию сколько хочешь, в этом случае dll.clear() просто ни к чему.
Такой способ отслеживания изменения раскладки заметно грузит процессор.
Недавно я выявил возможность ставить хуки (HOOK'S) из цинка прямо в систему. Это более рациональный подход, к тому же хуки позволяют отслеживать еще много чего. Будет рабочий пример - выложу.

udaaff
07.05.2007, 23:15
После того как я пытаюсь открыть флэшку с этим кодом в цинке (pls select an input file), он виснет (v2.5.0.23).
Все равно вариант слишком жесткий, если учитывать, что раскладка в большенстве случаев вообще даже меняться не будет или будет меняться от силы несколько раз. Вариант с отловом shift+alt и shift+ctrl, тоже между прочим не всегда срабатывал бы, раскладку всетаки можно поменять и другими сочетаниями... Так что тупик плотный.

alexcon314
07.05.2007, 23:44
Для __etc
На днях нашел время и просмотрел темы форума выданные поиском по ключу "zinc". Нашел несколько интересных (тема Hak'a вне конкуренции, дай бог ему здоровья).
Уважаемый __etc, поправь меня, если ошибаюсь. По-моему, в твоих нескольких постах я прочитал примерно следующее: Zinc коннектится к MySql, но только ЛОКАЛЬНО. Меня это несколько расстроило и я решил уточнить: это означает - коннект возможен только на 127.0.0.1 (что, gо-моему, неверно), или ты имел в виду локальную сеть. Проверялось ли кем-нибудь ли инетовское соединение цинка к MySql?
Сомнения обусловлены тем фактом, что я неоднократно использовал цинк в работе с MySql, в т.ч. и по локальной сети. Не обошлось без проблем, но они отнсятся к серверу, не к цинку. Хотелось бы проверить работу цинка с сервером в интернете.
Или мои сомнения напрасны и все будет работать?

alexcon314
08.05.2007, 00:02
Для udaaff.
Согласен. Последний пример из разряда "последняя надежда рухнула". Хотя у меня с ним цинк не падает. Только процессор грузится на 50-60%.
С хуками есть подвижки. Ставить несложно. На ту же клавиатуру. Пробовал - работает, на уровне "нажал кнопку - раздался писк". Alt, да что там Alt - все клавиши цепляются железно. Но все это бесполезно, пока нет обратной связи. Т.е. нужно сообщать цинку о событии, которое системнй хук поймал. Как? Хотелось бы понять...Есть варианты, но громоздкие уж очень.. Будем думать. Понятное дело, клавиатурным хуком мысли не ограничиваются.
P.S. Вот, блин, а когда-то я мечтал стать флэшером :).

etc
08.05.2007, 11:41
Для __etc
На днях нашел время и просмотрел темы форума выданные поиском по ключу "zinc". Нашел несколько интересных (тема Hak'a вне конкуренции, дай бог ему здоровья).
Уважаемый __etc, поправь меня, если ошибаюсь. По-моему, в твоих нескольких постах я прочитал примерно следующее: Zinc коннектится к MySql, но только ЛОКАЛЬНО. Меня это несколько расстроило и я решил уточнить: это означает - коннект возможен только на 127.0.0.1 (что, gо-моему, неверно), или ты имел в виду локальную сеть. Проверялось ли кем-нибудь ли инетовское соединение цинка к MySql?
Сомнения обусловлены тем фактом, что я неоднократно использовал цинк в работе с MySql, в т.ч. и по локальной сети. Не обошлось без проблем, но они отнсятся к серверу, не к цинку. Хотелось бы проверить работу цинка с сервером в интернете.
Или мои сомнения напрасны и все будет работать?
Скорее всего будет работать. Что-то я не помню, чтобы я это писал вообще :D

alexcon314
09.05.2007, 01:27
createTextField("test", 1, 20, 20, 200, 200);
test.type = "input";
test.border = true;
test.multiline = true;
test.wordWrap = true;
go.label = "EN";
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][0] != "(some caption)") {
i++;
}
var hwnd = wList[i][1];
//mdm.Dialogs.prompt(hwnd + " " + wList[i][0]);
var kblName = 0x04190419;
go.onRelease = function() {
mdm.System.postMessage(hwnd, 0x0050, 1, kblName);
switch (kblName) {
case 0x04190419 :
kblName = 0x04090409;
go.label = "RU";
break;
case 0x04090409 :
kblName = 0x04190419;
go.label = "EN";
break;
}
};

Вот так можно обойтись без dll. В поле test можно проверять язык ввода.
(some caption) - Название формы приложения (form title). Окно самому себе шлет message - запрос на изменение раскладки WM_INPUTLANGCHANGEREQUEST(0x0050)

alexcon314
16.05.2007, 09:24
Здравствуйте.
Хочу привести рабочий пример с отловом событий "изменение раскладки" и "правый клик мыши" в цинке с помощью хука (hook):

mdm.Network.UDP.Socket.startServer(4000);
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.";
createTextField("out3", 3, 250, 250, 250, 20);
change_kbl.onRelease = FollowKBL;
get_kbl.onRelease = GetKBL;
hook.onRelease = function() {
Hook(true, "Enable hook result is ");
};
unhook.onRelease = function() {
Hook(false, "Disable hook result is ");
};
function GetKBL():Number {
dll.clear();
var parameter = dll.addParameter("string", "");
var res:Number = dll.call("string", "GetKBL") * 1;
if (res != 0) {
out1.text = "Keyboard layout name is " + res;
} else {
out1.text = "Error has occured.";
}
return res;
}
function FollowKBL() {
dll.clear();
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.";
}
Selection.setFocus(out2);
}
function Hook(bSet:Boolean, str:String) {
dll.clear();
var parameter = dll.addParameter("boolean", bSet);
var res:Number = dll.call("integer", "SetHook") * 1;
out3.text = str + res;
// если res не 1, то хук не установился (не удалился)
}
mdm.Network.UDP.Socket.onData = function(myObject) {
out2.text += newline + myObject.data;
};
var dll = new mdm.DLL("kblhook.dll");

dll-ка здесь: http://mdm-zinc.narod.ru/docs/kblhook.rar.(размер rar ~113кБ, здесь почему-то не выкладывается даже по-частям))
В ней зашиты ранее использовавшиеся функции "изменить раскладку", "получить имя текущей раскладки" (FollowKBL(), GetKBL()). Функция Hook ставит хук (при bSet=false соответственно убирает хук), отслеживающий сообщения WM_INPUTLANGCHANGEREQUEST и WM_RBUTTONUP в потоке приложения и передает в цинк результат через сокет. Для этого в коде присутствует "mdm.Network.UDP.Socket.startServer(4000);". Порт 4000 зашит в dll, поэтому его менять не следует. Так же выводятся абсолютные координаты курсора в момент прихода WM_RBUTTONUP: "mouse:rclick:x:y".
P.S. файл kblhook.dll надо положить рядом с .exe

alexcon314
04.06.2007, 18:51
Здравствуйте.
При записи на диск файла .xml в цинке получается кодировка ANSI. Чтобы передать .xml в Excel требуется кодировка UTF-8.
Иначе файл не открывается. В остальном формат файла правильный.
Т.е. после пересохранения созданного файла в блокноте с опцией UTF-8 все работает.
Как можно обойти эту проблему?

MyXus
04.06.2007, 22:10
Попробуй поковырять винапи.. Я сам щас посмотрел бегло - не нашел. Но мне кажется должно быть.
Ну и спроси на форуме цынка.
Я перешел на SWFKit - мне там ребята активно помогают.

alexcon314
05.06.2007, 13:49
Кажется, проблема решена.
<?xml version=\"1.0\" encoding=\"windows-1251\"?>
добавил в выгружаемый файл (было <?xml version=\"1.0\"?>). Заработало.
P.S. Нужно было сделать данные доступными в таблицах OpenOffice.org
В MS Excel выгрузить и так можно скриптом vbs.

alexcon314
06.06.2007, 08:52
Простенький пример выгрузки данных из цинк-.ехе в MS Excel

function Export() {
var vbs:String = "";
vbs += "Set objExcel = CreateObject(\"Excel.Application\")\r";
vbs += "objExcel.Visible = True\r";
vbs += "Set objDoc = objExcel.Workbooks.Add()\r";
vbs += "objDoc.Sheets(1).Activate\r";
mdm.FileSystem.saveFile(mdm.System.Paths.appData + "toExcel.vbs", vbs);
vbs = "";
var i = 0;
while (ds[i][0]) {
vbs = "";
vbs += "objDoc.Sheets(1).Range(\"A" + (i + 1) + "\").Value=\"" + ds[i][0] + "\"\r";
vbs += "objDoc.Sheets(1).Range(\"B" + (i + 1) + "\").Value=\"" + ds[i][1] + "\"\r";
vbs += "objDoc.Sheets(1).Range(\"C" + (i + 1) + "\").Value=\"" + ds[i][2] + "\"\r";
vbs += "objDoc.Sheets(1).Range(\"D" + (i + 1) + "\").Value=\"" + ds[i][3] + "\"\r";
vbs += "objDoc.Sheets(1).Range(\"F" + (i + 1) + "\").Value=\"" + ds[i][4] + "\"\r";
mdm.FileSystem.appendFile(mdm.System.Paths.appData + "toExcel.vbs", vbs);
i++;
}
mdm.System.exec(mdm.System.Paths.appData + "toExcel.vbs");
}
ds - двухмерный массив с данными.

MaxD
06.06.2007, 12:57
Для alexcon314
Я точно не помню, но когда-то эту же проблему пытался решить добавлением в xml первого тега <?xml version="1.0"?> или какого-то еще. Вот получилось или нет - вспомнить не могу :-)

Loomy
06.06.2007, 17:23
вопрос по ZINC

он глотаетмои ссылки, которые я указываю во внешнем хтмл подгружаемом во флэш.
В хтмл файле содержатся ссылки на файлы, но когда я создаю ехе-прожект эти ссылки перестают работать. Что мне делать!!! ! Я в отчаянии прогу надо вечером сдать а у меня такой аврал!
Выручайте!

alexcon314
06.06.2007, 18:03
Не очень понял.
попробуй так: в html'e

<a href='asfunction:Run,path_to_file><u>ссылка</u></a>
в коде ехе:

function Run(path:String){
mdm.System.exec(path);
}

Только путь укажи так C:\\Folder\\<filename> - c двойным слэшем. И в html'e не заключай его в кавычки
<a href='asfunction:Run,с:\\Folder\\myfile.txt'><u>ссылка</u></a>

Loomy
06.06.2007, 18:36
1. Я спрограмил (с горем пополам) флэшку.
2. Весь контент (текст) находится во внешнем хтмл файле - sample.html
3. В файле sample.html есть строки содержащие ссылки <a href blah blah blah>
4. Когда был SWF и даже ЕХЕ (стандартный флэшевый) ссылки работали
5. Как только я сделал ехе через ZINC ссылки работать перестали
6. Как мне заставить ссылки в файле sample.html работать? Надо менять HTML или что?
7. go to 1 while understand
8. if understand then go to 9
9. print "COOL"
10 stop

СПАСИБО!!!

ПС в коде ЕХЕ ничего не понимаю... может хтмл можно подработать?

alexcon314
06.06.2007, 18:43
Ссылки куда ведут? Что за программа?

Loomy
06.06.2007, 18:48
короче ))) ...

вот часть скрипта я гружу во флэш файл
story.load("txt/mp3h.html")

вот ссылки в mp3h.html
<a href="05 Idea_2006\Idea.m3u">Play all!</a>

SWF работает, а после обработки Цинком не работает...

Q: как это исправить?

alexcon314
06.06.2007, 20:30
Все равно не понял структуру проекта твоего, но если по-простому объяснить сам принцип, то так.
Делай новый .fla, в первый кадр вствь этот код, опубликуй ролик (Shift+F12):
this.createTextField("out", 1, 220, 180, 100, 40);
out.html = true;
var a:XML = new XML();
a.load("ref.html");
a.onLoad = function() {
out.htmlText = a;
};
function Run(path) {
mdm.System.exec(path);
}

рядом с ним положи ref.html:
<a href='asfunction:Run,calc'><u>Calc</u></a>
скомпилируй в цинке. по нажатию на ссылку должен запуститься калькулятор.
Надо, чтобы запускались твои файлы? - замени ссылки в своих html'ax по образцу в этом и предыдущем посте. и добавь в код swf'a функцию Run. Иначе, это вопрос не по цинку.

Loomy
06.06.2007, 22:29
Спасибо Alex! Ты настоящий друг!!!
Напряг моск поеб№;%я с заменой путей к файлам и все получилось!
Ещё бы zinc найти ломаный, чтоб мое искусство своими триальными глупостями!

Огромное спасибо! Ты лучший!!!

HUGS AND KISSES!!!

alexcon314
06.06.2007, 22:59
Ещё бы zinc найти ломаный
Лучше заработать и купить. Что по нашим временам <$300? Инерция - привыкли к лому, а лом то и не в моде ныне...

etc
06.06.2007, 23:17
Loomy получает плюс.

Loomy
07.06.2007, 14:17
Снова проблема!!!

Проект пропущенный через ЦИНК безупречно работает, но как только я записал его на CD работать он перестал!
говорит:

ACCESS VIOLATION AT ADDRESS 40540000. READ OF ADDRESS 40540000
и далее:
ACCESS VIOLATION AT ADDRESS 0045A1D7 IN MODULE 'мояпрограмма.ехе'. READ OF ADDRESS 00000180

Компилировал ехе в MDM ZINC v.2.5.0.23 TRIAL EDITION
Писал на CD-RW при помощи NERO

Помогиет кто может! Моя жизнь на волоске!!!

Loomy
07.06.2007, 14:22
Loomy получает плюс.

Не мне надо плюс а alexcon'у (хотя ему наверное их уже некуда вешать)
Но черт возьми все равно приятно!

alexcon314
07.06.2007, 14:29
Не мне надо плюс а alexcon'у (хотя ему наверное их уже некуда вешать)

Ну, спасибо! Удружил! :D :D :D

Loomy
07.06.2007, 15:10
Повторюсь...
Проект пропущенный через ЦИНК безупречно работает, но как только я записал его на CD работать он перестал!
говорит:

ACCESS VIOLATION AT ADDRESS 40540000. READ OF ADDRESS 40540000
и далее:
ACCESS VIOLATION AT ADDRESS 0045A1D7 IN MODULE 'мояпрограмма.ехе'. READ OF ADDRESS 00000180

Пробовал запускать проект на CD, на флэшке, на другом компе... работать нивкакую не хочет... работает только на родном компе... что за лаг не могу никак понять!! есть способы его исправить?

помигите кто-нибудь!!!

alexcon314
07.06.2007, 15:59
Это не простая проблема. Если хочешь ее решить - приготовься...( без шуток)
Для начала попробуй сделать как можно меньшей длины названия: Form Caption, Application Title в проекте цинка, уменьши имя .ехе, никаких русских букв, пробелов - только делай все последовательно, а не все сразу меняй и пиши, я пока на связи... Да, какая у тебя операционка? Впрочем, это для интереса..

etc
07.06.2007, 16:33
Loomy, плюс — это не предупреждение, а не повышение репутации.

alexcon314
07.06.2007, 16:35
Loomy, плюс — это не предупреждение, а не повышение репутации.
Ну все, запутали парня!

Loomy
07.06.2007, 17:22
Loomy, плюс — это не предупреждение, а не повышение репутации.

Тогда... ВСЕ ВЫ АДМИНЫ ОДИНАКОВЫЕ!!! АААААА НЕНАВИЖУ НЕНАВИЖУ!!!... а за что плюс то? да как так то? фашисты! :mosking:

alexcon314:
сел по-удобнее я честно говоря на что-то подобное думал но не мог поверить в реальность... окей ща попробуем.

спасибо!

etc
07.06.2007, 17:59
alexcon314, Loomy, первому из вас я могу поставить плюс за флейм в 109-ом посте, а Loomy может получить помимо плюса за флейм, ещё и +5 и отправится в бан. Loomy получил плюс за ломаный Zinc.
На этом посте флейм прекращается.

Loomy
07.06.2007, 18:05
Это не простая проблема. Если хочешь ее решить - приготовься...( без шуток)
Для начала попробуй сделать как можно меньшей длины названия: Form Caption, Application Title в проекте цинка, уменьши имя .ехе, никаких русских букв, пробелов - только делай все последовательно, а не все сразу меняй и пиши, я пока на связи... Да, какая у тебя операционка? Впрочем, это для интереса..

Все поправил все работает!
Есть кое-какие косяки, но они из-за моей невнимательности :wacko:

Спасибо большое!

alexcon314
07.06.2007, 23:43
Loomy, будет очень хорошим тоном, если ты опишеш здесь свой баг и то, как ты с ним справился. Помогли тебе - помоги другим.

alexcon314
06.07.2007, 11:48
небольшая фича, которая позволяет запустить программно скринсэйвер, установленный в системе по умолчанию

go.label = "screensaver";
mdm.Application.doEvents();
formTitle = mdm.Forms.MainForm.title = "form";
appTitle = mdm.Application.title = "app";
var wList = mdm.System.getWindowList();
var i = 0;
while (wList[i][1]) {
if (wList[i][0] == formTitle || wList[i][0] == appTitle) {
hwnd = wList[i][1];
}
i++;
}
go.onRelease = function() {
mdm.System.postMessage(hwnd, 0x0112, 0xF140, 0);
};

go - это кнопка, title у формы устанавливается программно, чтобы получить хэндл окна приложения через getWindowsList, но можно устанвить титле и вручную. Важно только чтоб фактический титле совпал со строкой сравнения в цикле while.
Далее окно само себе шлет системное сообщение на запуск скринсейвера.

MaxD
17.08.2007, 13:14
Здравствуйте!
Такой вопрос: необходимо реализовать с помощью Zinc функцию импорта-экспорта файлов. Для этого необходимо загнать эти файлы в один архив (можно без сжатия). Я так понимаю, что сделать это можно только с помощью внешней dll. Так вот: можно ли для этого использовать какую-нибудь библиотеку windows? Какие есть еще варианты?

alexcon314
20.08.2007, 09:19
Если речь идет об архивации/разархивации файлов из под цинка, то рекомендую воспользоваться каким-нибудь архиватором, поддерживающим работу с ним из командной строки.
Пример - бесплатный архиватор 7-Zip. Скачивай http://www.7-zip.org/, устанавливай и проверяй код. Само собой, пути к файлам должны быть реальными :).

var path7z = "c:\\Program Files\\7-Zip\\7z.exe";
var pathFile = "D:\\blabla\\somefile.txt";
var pathArch = "c:\\blabla\\somefile.zip";
var StdOut = mdm.System.execStdOut(path7z + " a -tzip " + pathArch + " " + pathFile);
out.text = StdOut;

В текстовое поле out получается вывод о работе команды. Создается архив .zip из соотв. файла.
Список доступных для использоваения команд 7-Zip смотри в мануале программы, который поставляется вместе с дистрибутивом. Команд разных там достаточно для организации полноценной работы.
Что касается dll, то их здесь использовать ни к чему.

MaxD
20.08.2007, 11:50
Спасибо. А как насчет виндового zip-архиватора?

alexcon314
20.08.2007, 14:00
А как насчет виндового zip-архиватора?
Просвети, что это такое?
В поставку к винде (в дистрибутив в смысле) включен zip-архиватор?
Насколько я знаю, нет. Все за денежку покупается. Или 7-Zip юзай, он бесплатный.

MaxD
20.08.2007, 15:25
Да есть вроде в винде стандартный ZIP-архиватор.

DarkLight
20.08.2007, 15:37
есть, но только в XP и выше

alexcon314
20.08.2007, 16:55
Подскажите, где он - виндовый ZIP-архиватор?

udaaff
20.08.2007, 22:33
Код в кадре:
var loader:LoadVars = new LoadVars();
loader.onData = function(src:String):Void {
if (src != undefined) {
my_txt.text = src;
} else {
my_txt.text = "Unable to load external file.";
}
};
loader.load("src.txt");
На сцене единственное текстовое поле my_txt.

Компелирую флэшку, все нормально работает, выводит текст. Компелирую цинком, src == undefined, соответственно выводит -- Unable to load external file. Хотя в превью все нормально (в маленьком экранчике в правом верхнем углу)
Почему src == undefined? :confused:

alexcon314
20.08.2007, 23:34
У меня твой код работает и под цинком. Все грузится и отображается. Проверь пути. Для этого кода src.txt должен лежать в той же папке, что и цинковый ехе. Возможно, ты его (.ехе) в цинк-проекте сохраняешь в другую папку, отличную от той, где лежит .swf исходника.

udaaff
21.08.2007, 00:07
Нет, сохраняю там же, где и проект. Возможно, это из-за цинка)

alexcon314
21.08.2007, 00:41
Хм.. странно. А так:

var mySavedData = mdm.FileSystem.loadFile("src.txt");
my_txt.text = mySavedData;

только сохраняй .txt в ANSI, а не в UTF8.

udaaff
21.08.2007, 01:25
Если грузить цинковскими скриптами то все нормально.
Файл сохранен в UTF-8 (Я уже все кодировки перепробовал, хотя ясно что это не из-за этого). Добавил еще одно текстовое поле. После компиляции цинком, первом поле -- "Unable to load external file.", во втором, собственно, текст нормально отображается.
var loader:LoadVars = new LoadVars();
loader.onData = function(src:String):Void {
if (src != undefined) {
my_txt1.text = src;
} else {
my_txt1.text = "Unable to load external file.";
}
};
loader.load("src.txt");

//var mySavedData = mdm.FileSystem.loadFile("src.txt");
var mySavedData = mdm.FileSystem.loadFileUnicode("src.txt")
my_txt.text = mySavedData;
З.ы. Это не из-за цинка точно, скачал только что последнию триал версию с оф. сайта, все равно не пашет.


:yahoo: Нашел решение:
var loader:LoadVars = new LoadVars();
loader.onData = function(src:String):Void {
if (src != undefined) {
my_txt1.text = src;
} else {
my_txt1.text = "Unable to load external file.";
}
};
loader.load(mdm.Application.path+"src.txt");

Странно все таки, все это)

udaaff
21.08.2007, 08:35
Пишу в кадре тестовый скрипт:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
mdm.Dialogs.prompt("Zinc Rocks!")
};
Key.addListener(keyListener);
Все, в принципе, нормально работает, но немного странно все же.

Если запустить SWF, то она сразу начинает отлавливать событие onKeyDown, если же цинковкий EXE, то пока мышью не тыркнешь в него, он ничего не отлавливает. Т.е. получается так, что фокус на нем есть, но его нету на флэшке, которая в нем находится.
Можно ли сделать, чтобы события нажатия клавишь отлавливались сразу при запуске? :wacko:

udaaff
21.08.2007, 08:52
Блин, сидел мучался столько времени, только пост написал, сразу решение нашел)), но все же не знаю, есть ли более лучший способ :mosking:

Собственно мое решение: добавил субФорму в проект, назвал ее "asdf", разместил в ней следующий код:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
mdm.Dialogs.prompt("Zinc Rocks!")
};
Key.addListener(keyListener);
mdm.Forms.asdf.show();

Таким образов все работает, по другому никак не получается.

alexcon314
21.08.2007, 09:27
А у меня работает ... Что у тебя за глюки? Все ж просто вроде...
Когда окно приложения в фокусе - происходит обработка кейдаун, безо всяких тырканий мышью... причем тут субформы не понял...

udaaff
21.08.2007, 20:15
Создай флэшку, в ней размести код:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
mdm.Dialogs.prompt("Zinc Rocks!")
};
Key.addListener(keyListener);
Скомпелируй приложение цинком, запусти его и не прикосайся к нему мышью :) (т.е. просто его включи и не трогай его совсем) и проверь выведится ли у тебя окошко "Zinc Rocks!" при нажатии на какую либо клавишу на клавиатуре.
Если у тебя все нормально, то я тогда хз, почему цинк у меня ведет себя подобным образом.

MyXus
21.08.2007, 20:19
всякое бывает
можно еще послать флешке событие мышиное - через send/postMessage.

alexcon314
21.08.2007, 23:33
Создай флэшку, в ней размести код:
var keyListener:Object = new Object();
keyListener.onKeyDown = function() {
mdm.Dialogs.prompt("Zinc Rocks!")
};
Key.addListener(keyListener);
Скомпелируй приложение цинком, запусти его и не прикосайся к нему мышью :) (т.е. просто его включи и не трогай его совсем) и проверь выведится ли у тебя окошко "Zinc Rocks!" при нажатии на какую либо клавишу на клавиатуре.
Если у тебя все нормально, то я тогда хз, почему цинк у меня ведет себя подобным образом.
Именно так я и сделал. О чем и написал в своем последнем посте.
У меня не было таких глюков, ни с загрузкой файла, ни листенерами всех мастей...
А MyXus дело говорит. Не мытьем, так катаньем. Я бы еще попробовал mdm.Application.doEvents() вставить в начало кода. Или принудительно фокус ставить mdm.Forms.MainForm.setFocus(). Действительно - хз.

iNils
25.08.2007, 15:16
Новый вопрос == Новая тема.