Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 27.11.2007, 23:40
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 11  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Запрет на запуск второго экземпляра приложения 1

Код:
//заставляем окно приложения реагировать 
// на системные сообщения
mdm.Application.doEvents();
mdm.Application.enableExitHandler();
mdm.Application.onAppExit = exit;
mdm.Forms.MainForm.title = "form";
hwnd = mdm.System.Registry.load("AppHwnd");
if (hwnd && hwnd != "none") {
	// шлем WM_SYSCOMMAND с wParam = SC_RESTORE и lParam = 1
	mdm.System.sendMessage(hwnd, 0x0112, 0xF120, 1);
	// ставим фокус
	mdm.System.setWindowFocus(hwnd);
	flag = false;
	exit();
} else {
	var wList = mdm.System.getWindowList();
	var i = 0;
	while (wList[i][0] != "form") {
		i++;
	}
	mdm.System.Registry.save("AppHwnd", wList[i][1]);
	flag = true;
}
function exit() {
	if (flag) {
		mdm.System.Registry.save("AppHwnd", "none");
	}
	mdm.Application.exit();
}
При запуске пример пишет в реестр хэндл своего окна. Второй экземляр при запуске читает из реестра этот хэндл и шлет мессаги на ресторе и сетфокус первому экземпляру, а сам отваливает. Первый экземпляр при закрытии вытирает из реестра хэндл.
Конечно, сохранять хэндл необязательно в реестр, просто это в данной ситуации удобно.
В случае нештатного завершения работы приложения эта схема не работает.
ПОЭТОМУ ДРУГОЙ ПРИМЕР.

Запрет на запуск второго экземпляра приложения 2

Код:
mdm.Application.doEvents();
formTitle = mdm.Forms.MainForm.title = "form";
appTitle = mdm.Application.title = "app";
var wList = mdm.System.getWindowList();
var appList:Array = new Array();
var i = 0;
while (wList[i][1]) {
	if (wList[i][0] == formTitle || wList[i][0] == appTitle) {
		appList.push(wList[i][1]);
	}
	i++;
}
hwnd = appList[1];
if (hwnd) {
	mdm.System.sendMessage(hwnd, 0x0112, 0xF120, 1);
	mdm.System.setWindowFocus(hwnd);
	mdm.Application.exit();
}
Здесь все основано на том факте, что в списке окон wList окно второго экземпляра приложения находится выше чем окно ранее запущенного экземпляра. и при добавлении в массив appList хэндл уже запущенного окна (если таковое присутствует) оказывается под номером 1, а хэндл второго под номером 0, если запускать их подряд. В случае запуска не подряд можно применить сортировку массива appList. Действительно, должен признать, что в этом случае нужно проверять наличие в списке wList и титла на кнопке приложения в таскбаре: когда оно свернуто принудительно только так его можно найти. Поэтому присутствует строчка mdm.Application.title="...", где устанавливается титл на этой кнопке.
FormTitle и ApplicationTitle можно указать статически в самом компиляторе. Но в этом случае к ним не получишь доступ так просто. И придется писать в условии сравнения титлов сам титл. Не поручусь, что это всегда работает, особенно когда титл русский или необычные символы там есть. Поэтому, лучше назначать их динамически в коде.


Последний раз редактировалось alexcon314; 29.11.2007 в 09:20.
Старый 28.11.2007, 18:16
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 12  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Zinc: Access violation at ...

Ошибка при запуске приложения

Иногда при разработке приложения на Zinc возникает такая ситуация, что приложение при запуске выдает ошибку
вида

Код:
"Access violation at address 7C93426D in module 'ntdll.dll. Read of address 003a0043."
и, соответственно, стартовать не хочет. возможны варианты, когда в сообщении об ошибке ntdll.dll не упоминается.
Данная проблема может возникнуть при попытке переноса приложение на другой компьютер простым копированием исполняемого файла, а так же при запуске с CD. И даже при переносе исполняемого файла в другую папку на той же машине, что я наблюдал сам.
На mdm-форуме эта прблема обсуждалась довольно долго.

http://www.mdmforum.com/forum/index.php?showtopic=13421

Кратко изложу суть обсуждения.
По непонятым причинам один и тот же .ехе файл нормально запускается на одной машине и отказывается
стартовать на другой. Речь шла именно о запуске с CD.
Эксперименты разработчиков показали, что возникновение ошибки происходит непредсказуемо.
Например, производились проверки на разных OC (семейства Windows), на разных аппаратных конфигурациях.
Никакой закономерности отследить не удалось и баг был помещен в WishList.
Тем не менее, было найдено несколько приемов устранения этой специфической ошибки.

1. Запуск в режиме совместимости с Win98.
2. Внесение изменений в реестр, таких, что программа принудительно стартует в режиме совместимости с Win98.
3. Сокращение имени исполняемого файла до 3-х - 4-х символов (или даже до 1-ого).

В моей практике эта неприятная ситуация возникала несколько раз.
Всякий раз сокращение имени файла мне помогало. Видимо, о чем свидетельствуют и сведения из указаного топика
на mdm-форуме, этот прием наиболее эффективен.
В целом у участников обсуждения сложилось мнение, что проблема возникает из-за внутренних политик безопасности
Windows XP. В чем конкретно состоит причина выяснить не удалось. Будем надеяться, что производители Zinc
смогут разрешить этот вопрос.

[добавлено]

М-да... сокращение имени файла не панацея, как оказалось.
После некоторого количества собственных экспериментов складывается такая картина.

1. "непредсказуемость" возникновения бага обусловлена на самом деле текущим сосотоянием профиля пользователя, который пытается приложение запустить. пересоздание профиля устраняет баг. где сидит затык в профиле до конца не выяснил, но установлено, что сидит он в той его части, которая хранится на компе, не выгружается на сервак (в случае использования сетвого входа). поэтому, на одних компах баг проявляется, на других может и не проявляться.
даже если установить точную причину затыка, вряд ли это будет иметь практическое значение, т.к. править профиль перед запуском все равно никто не будет.

2. баг с "хорошей" вероятностью возникает, если в Zinc IDE вручную указывать заголовок формы и приложения (поля Form Caption и Application title). Application title скорее приводит к ошибке. при этом "плохо" себя ведут символы вроде точки, пробела, русских букв, но не всегда, почему - смотри п.1. если задавать эти параметры программно, оставляя соответствующие поля в IDE пустыми, даже с использованием этих символов, баг не возникает.

3. баг не проявляется независимо от других факторов, если запускать приложение в режиме совместимости с Win98, Win2000.
это может оказаться полезным при создании собственного инсталлятора приложения (см. NSIS, Inno Setup из бесплатных). В алгоритме установки можно указать команду записи в реестр ХР соответствующего ключа типа
Код:
ключ:         HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
значение:   "D:\\Start.exe"="WIN98"
что и заставит приложение стартовать в режиме совместимости с указанной версией Windows.

4. судя по трэйсам, стоп с ошибкой происходит на стадии обращения к системной библиотеке ntdll.dll, которая подключается при запуске, как раз перед первой прорисовкой окна приложения.

Официальное описание проблемы

http://www.multidmedia.com/support/t...n=detail&id=19


Последний раз редактировалось alexcon314; 20.06.2008 в 14:39.
Старый 27.12.2007, 15:15
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 13  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Подгрузка внешних .swf

Можно ли использовать {mdm}Script во внешних .swf, подгружаемых в основное приложение?

Да, можно.
mdm-классы инициализируются в основном приложении, точнее в мувике основного приложения при компиляции в цинке. К ним можно обращаться из подгружаемых мувиков точно так же как к обычным AS-классам.

Пример.
Код:
// основной клип main.swf, компилируемый в цинке
this.createEmptyMovieClip('cont',0);
var mc:MovieClipLoader= new MovieClipLoader();
mc.loadClip('loaded.swf',cont);
Код:
// подгружаемый клип loaded.swf. это обычный .swf, скомпилированный 
// во Flash IDE, без какого-либо участия цинка.
mdm.prompt("Swf is loaded and says 'Hello!'");
после запуска main.exe подгруженный клип выведет сообщение. Точно так же можно обращаться и к другим mdm-классам из подгружаемых клипов. Например, использовать методы работы с файловой системой, базами данных и т.д..
Тем не менее, при использовании ActiveX, mdm.FileExplorer и т.п., окна этих элементов все равно будут привязываться к окну основного приложения.
...
в загружемом клипе не будет выполняться mdm-скрипт, если он загружен c урл, начинающегося как "http://".
т.е. такая схема сработает только при локалной загрузке. оно и хорошо.
...


Последний раз редактировалось alexcon314; 04.05.2008 в 11:55.
Старый 06.05.2008, 00:09
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 14  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Универсальная схема цинк-приложения.

вырисовывается интересная схема построения цинк-приложения:

1. Основной swf, который ЕДИНОЖДЫ компилируется в цинк-IDE - это очень простой универсальный загрузчик, конфигурируемый файлом настроек (что и от куда грузить).

2. Весь основной код, включая mdm-скрипты, хранится во внешних swf-модулях, которые в свою очередь так же могут выступать в роли загрузчиков других модулей.

3. Все вышесказанное в полной мере относится к дочерним формам, которых по-сути нужна всего одна, даже если вам нужно их несколько разновидностей. просто в качестве основного swf для дочерней формы указывается все тот же простой загрузчик. (Конечно, если вы планируете ОДНОВРЕМЕННО показывать несколько дочерних форм, их количество придется увеличить)
Одна тонкость.
Чтобы дочерняя форма нормально инициализировалась при старте приложения и не мелькала при этом на экране - в IDE при компиляции задать ей отрицательную x- или y-координату и свойство visible=true.
Дело в том, что обращаться к функциям дочерней формы из основной формы можно только после первого появления дочерней формы на экране. до этого момента ее "как бы" нет.
При задании отрицательных координат при visible=true формально при старте форма будет "показана" (но не буквально), что и устраняет указанное препятствие. Далее, можно оперировать с ее координатами или с ее свойством visible из основной формы, показывая ее когда необходимо, предварительно подгрузив в нее нужный swf.

4. Приложение легко переносится, масштабируется, достраивается, дебажится.


Схема опробована на верси цинка 2.5. Обсуждение можно посмотреть здесь. По поводу версии 3 тоже.

http://www.flasher.ru/forum/showthread.php?t=111623

Старый 20.06.2008, 14:25
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 15  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
По умолчанию Zinc и flash cs3 с update 9.0.3 (AIR)

Настройка CS3 под работу с Zinc. Удачный опыт связки.

Для AS 3.0:

http://flasher.ru/forum/showthread.php?t=113163

Файл mdm.swc, о котром идет речь поставляется с дистрибутивом Zinc и находится в папке (по умолчанию)

"c:\Program Files\MDM\MDM Zinc 3.0\swc\cs3\" для версии 3.0

Настройка CS4 под работу с Zinc. Удачный опыт связки.

http://www.flasher.ru/forum/showthread.php?t=121906

AS 2.0:

Настройка CS3/4 на работу с Zinc 2.5.0.34. (Собственно, никакой настройки не требуется, главное, чтобы проект был AS 2.0 и версия плеера 8).


Последний раз редактировалось alexcon314; 17.09.2009 в 17:29.
Старый 01.08.2008, 07:02
cassius вне форума Посмотреть профиль Отправить личное сообщение для cassius Найти все сообщения от cassius
  № 16  
Ответить с цитированием
cassius

Регистрация: Jan 2006
Сообщений: 72
Цитата:
Сообщение от alexcon314 Посмотреть сообщение
Ошибка при запуске приложения
Скорее всего, дело не в цинке. Такая же проблема (без отображения сообщения) появляется и с использованинем стандартного прожектора на 8-м флеше. Решается запуском в режиме совместимости с предыдущими версиями windows.

Старый 13.01.2011, 14:15
Azo вне форума Посмотреть профиль Отправить личное сообщение для Azo Найти все сообщения от Azo
  № 17  
Ответить с цитированием
Azo
 
Аватар для Azo

Регистрация: Nov 2004
Адрес: Архангельская область
Сообщений: 492
Отправить сообщение для Azo с помощью ICQ Отправить сообщение для Azo с помощью AIM Отправить сообщение для Azo с помощью Yahoo
Экспорт в Excel из .mdb базы

Основываясь на примере alexcon314 делал себе программу которая выгружает не из фоеша а из базы... Это полезно тем что мы можем не заморачиваясь с кодировкай Юникода выгружат в Excel русские слова...

Код:
var telephoneDBUrl:String="\\\\10.23.123.11\Folder\base.mdb"// Адрес нашей базы , расположенной на нашем сервере 10.23.123.11
var SQLString:String="Select * from table1"// SQL запрос

// Создаем строковую переменную vbs и вписываем туда команды

var vbs="";
vbs+="Option Explicit\r"
vbs+="Dim ZAGOLOVOK\r"
vbs+="ZAGOLOVOK=\"GENSER | Kotlas\"\r"
vbs+="Dim SQLZAPROS\r"
vbs+="SQLZAPROS = \""+SQLString+"\"\r"
vbs+="Dim MDBADRESS\r"
vbs+="MDBADRESS=\""+telephoneDBUrl+"\"\r"


vbs+="Dim mcn\r"
vbs+="Set mcn = CreateObject(\"ADODB.Connection\")\r"
vbs+="mcn.CursorLocation = 3 'adUseClient\r"
vbs+="mcn.CommandTimeout = 300\r"
vbs+="mcn.ConnectionString = \"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"&MDBADRESS&\";Persist Security Info=False\"\r"
vbs+="mcn.Open\r"
vbs+="Dim rs\r"
vbs+="Set rs = mcn.Execute(SQLZAPROS)\r"
vbs+="Dim ddd\r"
vbs+="Dim i\r"
vbs+="i=0\r"
vbs+="DIM objExcel\r"
vbs+="DIM objDoc\r"
vbs+="DIM oSheet\r"
vbs+="	Set objExcel = CreateObject(\"Excel.Application\")\r"
vbs+="		objExcel.Visible = True\r"
vbs+="	Set objDoc = objExcel.Workbooks.Add()\r"
vbs+="	Set oSheet = objExcel.ActiveSheet\r"
vbs+="	\r"
vbs+="		objExcel.Caption = ZAGOLOVOK\r"
vbs+="Do While Not rs.EOF\r"
vbs+="		objDoc.Sheets(1).Range(\"A\" & (i + 1)).Value= rs.fields(\"Dates\")\r"
vbs+="		objDoc.Sheets(1).Range(\"B\" & (i + 1)).Value= rs.fields(\"Type\")\r"
vbs+="		objDoc.Sheets(1).Range(\"C\" & (i + 1)).Value= rs.fields(\"Manager\")\r"
vbs+="		objDoc.Sheets(1).Range(\"D\" & (i + 1)).Value= rs.fields(\"Istok\")\r"
vbs+="		objDoc.Sheets(1).Range(\"E\" & (i + 1)).Value= rs.fields(\"Marka\")\r"
vbs+="		objDoc.Sheets(1).Range(\"F\" & (i + 1)).Value= rs.fields(\"Model\")\r"
vbs+="		objDoc.Sheets(1).Range(\"G\" & (i + 1)).Value= rs.fields(\"Adder\")\r"
vbs+="i=i+1\r"
vbs+="rs.MoveNext\r"
vbs+="Loop\r"
vbs+="	objDoc.Sheets(1).Columns(1).ColumnWidth = 20\r"// ширины колонок
vbs+="	objDoc.Sheets(1).Columns(2).ColumnWidth = 20\r"
vbs+="	objDoc.Sheets(1).Columns(3).ColumnWidth = 20\r"
vbs+="	objDoc.Sheets(1).Columns(4).ColumnWidth = 20\r"
vbs+="	objDoc.Sheets(1).Columns(5).ColumnWidth = 20\r"
vbs+="	objDoc.Sheets(1).Columns(6).ColumnWidth = 20\r"
vbs+="	objDoc.Sheets(1).Columns(7).ColumnWidth = 20\r"

vbs+=" With oSheet.Range(\"A1\", \"A1111\")\r"
vbs+="         .Font.Bold = True\r"   //жирность
vbs+="         .NumberFormat = \"dd/mm/yyyy\"\r" // формат даты
vbs+="      End With\r"

vbs+="mcn.Close\r"
vbs+="Set mcn = Nothing\r"

mdm.FileSystem.saveFileUnicode(mdm.System.Paths.appData + "toExcel.vbs", vbs);// сохраняем файл
mdm.System.exec(mdm.System.Paths.appData + "toExcel.vbs");// запускаем файл
__________________
-------------------------------
FLASH FLASH FLASH FLASH FLASH


Последний раз редактировалось Azo; 13.01.2011 в 14:21.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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