Ru-Board.club
← Вернуться в раздел «Программы»

» Autoplay Media Studio

Автор: lorents
Дата сообщения: 13.11.2008 17:49

Код: function Callback(strSource, strDestination, nCopied, nTotal, nFileCopied, nFileTotal)
    nPercent = Math.Round(nCopied / nTotal * 100, 0);
    StatusDlg.SetMeterRange(0, 100);
    StatusDlg.SetTitle("");
    StatusDlg.SetMessage("Копирование");
    StatusDlg.SetStatusText(strDestination);
    StatusDlg.SetMeterPos(nPercent);
    StatusDlg.ShowCancelButton(true, "Cancel");
    if (StatusDlg.IsCancelled()) then
        Input.SetText("Input1", tblFiles[1]);
        return false;
    else
        return true;
    end
end
function SaveAs(strOutDir, strOutFileName)
    strFileToCopy = "AutoPlay\\Videos\\data01.avi";
    local strFiles = CommonDialogs.File(false, "Сохранить",strOutDir, "Видео файл (*.avi)|*.avi|", strOutFileName, "avi", false);
    if (strFiles ~= "CANCEL") then
        local tblFiles = WinApi.DelimitedStringToTable(strFiles, "|");
        if (tblFiles) then
             if (File.DoesExist(tblFiles[1])) then
                local cBut = Dialog.Message("Сохранить как", tblFiles[1].."\r\nУже существует.\r\nЗаменить существующий файл?", MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1);
                if (cBut == 6) then
                    strOutFile = tblFiles[1];
                    StatusDlg.Show(MB_ICONNONE, false);
                    File.Copy(strFileToCopy, tblFiles[1], true, true, false, true, Callback);
                    StatusDlg.Hide();
                else
                    local strOutDir = String.SplitPath(tblFiles[1]).Drive..String.SplitPath(tblFiles[1]).Folder;
                    local strOutFileName = String.SplitPath(tblFiles[1]).Filename
                    SaveAs(strOutDir, strOutFileName);
                end
            else
                strOutFile = tblFiles[1];
                StatusDlg.Show(MB_ICONNONE, false);
                File.Copy(strFileToCopy, tblFiles[1], true, true, false, true, Callback);
                StatusDlg.Hide();
            end
        end
    end
end
local strOutDir = Shell.GetFolder(SHF_MYDOCUMENTS);
local strOutFileName = "Глобальный передел";
SaveAs(strOutDir, strOutFileName);
Автор: Crazy_Snake
Дата сообщения: 13.11.2008 17:51
Zloy_Gelud

Код:
mySourceFolder = GetSFXPath();
LB = "ListBox1";
ListBox.DeleteItem(LB, LB_ALLITEMS);

                tFiles = File.Find(mySourceFolder.."AutoPlay\\Docs\\;", "*.mht", false, false, nil);
    if tFiles then
                for nIndex, sFilePath in tFiles do
                        sData = sFilePath;
                        sText = String.SplitPath(sFilePath).Filename;
                        ListBox.AddItem(LB, sText, sData);
        end
    end
Автор: Zloy_Gelud
Дата сообщения: 13.11.2008 18:06
lorents
Убери параметр local в строке

Цитата:
local tblFiles = WinApi.DelimitedStringToTable(strFiles, "|");

или сделай так:

Код: Input.SetText("Input1", strOutFile);
Автор: Crazy_Snake
Дата сообщения: 13.11.2008 18:31
Zloy_Gelud
У меня абсолютно всё находится в папк AutoPlay! А при загрузке готового проекта работают только переходы по страницам и всё. Все ссылки, проги, музыка, картинки и т.п. ругается что нету такого...

Добавлено:
Zloy_Gelud

Есть такая функция Dependencies...
Типа автоустановка прграмм по умолчанию, как я понял. Можно ли свои проги туда воткнуть для начальной установки, типа кодеков, если их нет и т.п...
Автор: Zloy_Gelud
Дата сообщения: 13.11.2008 18:43
Crazy_Snake
Ну дык а я что написал? Конешно не будет.
Если у тебя все находится в папке 'AutoPlay', то смысла в функе GetSFXPath() нету!
Совет. Располагай папки с музыкой, картинками (если они только не используются для создания интерфейса проекта), прогами рядом с автораном и тогда используй функу GetSFXPath() (как в посте выше).
И ради интереса..сколько у тебя скомпилированный проект весил (SFX-архив) и запускался?


Добавлено:
Dependencies - скорее это такая фича, которая позволяет определять в системе установлено то или иное ПО с указанной версией. Если не установленно указанное ПО, то выводится диалоговое окно с вариантами продолжить запуск проекта или прервать, также существует выбор перейти на оф. сайт разработчика и скачать оттуда это ПО.
Можно создавать и свои файлы .DET для конкретного ПО.
Автор: Crazy_Snake
Дата сообщения: 13.11.2008 19:01
Zloy_Gelud
Вешает 613 Мб, запускался конечно, секунд 30 грузится и запускается, но на всех объектах которые связаны с внутренними ресурсами папки AutoPlay выдает ошибку:
Отказано... Не найден путь к файлу: AutoPlay\Docs\Folder\name...

Добавлено:

Код:
-- будет работать
strPath = _SourceFolder.."Soft";
-- НЕ будет работать
strPath = _SourceFolder.."AutoPlay\\Docs\\Soft";
Автор: Zloy_Gelud
Дата сообщения: 13.11.2008 19:46
Crazy_Snake
Ну сделай по моему рецепту, и сам проект (SFX) будет весить ~ 3мб и ошибок не должно быть.

Добавлено:

Код: -- будет работать
strPath = _SourceFolder.."\\Soft";
Автор: Crazy_Snake
Дата сообщения: 13.11.2008 20:05
Zloy_Gelud
Делаю...
Когда двойной слэш, не загружается ListBox, он просто пустой...
Автор: Zloy_Gelud
Дата сообщения: 13.11.2008 20:11
Crazy_Snake

Цитата:
А архив создает из все папки СД_Рут видимо...

Именно так. Перед компиляцией проекта перемести все второстепенные папки из каталога CD_Root в какое-нибудь другое место. После компилирования помести эти папки обратно рядом с автораном. Толк должен быть, если ты нигде с путями не накосячил.
Автор: Crazy_Snake
Дата сообщения: 13.11.2008 20:26
Zloy_Gelud
Спасибо за совет, я их все вместе компилировал, щас переделаю.
Всё сделала, работатет. Вот жаль что файлы все нельзя закадировать в один Было бы типа *.Cab файлика всё и без попытки взлома!!! Очень жаль!
Автор: tavria2
Дата сообщения: 13.11.2008 21:51
Zloy_Gelud

Цитата:
Хотелось, чтобы шрифт текста 'Text', можно было изменить.

Код: hWnd = WinApi.CreateWindowEx(0, "BUTTON", "Text", BS_GROUPBOX.."|"..WS_CHILD, 0, 0, 100, 100, Application.GetWndHandle(), 0, 0, 0);
DC = WinApi.GetDC(hWnd);
hFont = WinApi.CreateFont(DC, "Arial", 14, FW_NORMAL, false, false, false, RUSSIAN_CHARSET);
WM_SETFONT = 48;
DLL.CallFunction("user32.dll", "SendMessageA", hWnd..","..WM_SETFONT..","..hFont..",0", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
Window.Show(hWnd);
Автор: Zloy_Gelud
Дата сообщения: 13.11.2008 22:05
tavria2
Спасибо за пример!
Оказывается я тоже копал в правильную сторону ..имею ввиду в сторону API'шной SendMessageA, только что-то у меня с параметрами не заладилось тогда.
Автор: lorents
Дата сообщения: 13.11.2008 22:24
парни может кто знает как запустить через плагин WinAPI вот это окно



вопрос чисто из интереса
Автор: Zloy_Gelud
Дата сообщения: 13.11.2008 22:44
lorents

Цитата:
парни может кто знает как запустить через плагин WinAPI вот это окно

С помощью плагина WinAPI такого не сделать бо нет там такой функи. Средствами самого API такое тоже не сделать бо там необходимо описывать структуру OPENFILENAME, а AMS пока не умеет этого делать. Так что, если это не чисто академический интерес, то пользуй плагин CommonDialogs.
Автор: lorents
Дата сообщения: 15.11.2008 16:13
у меня проблема с этим кодом очередная


Код: function Callback(strSource, strDestination, nCopied, nTotal, nFileCopied, nFileTotal)
    nPercent = Math.Round(nCopied / nTotal * 100, 0);
    StatusDlg.SetMeterRange(0, 100);
    StatusDlg.SetTitle("");
    StatusDlg.SetMessage("Копирование");
    StatusDlg.SetStatusText(strDestination);
    StatusDlg.SetMeterPos(nPercent);
    StatusDlg.ShowCancelButton(true, "Cancel");
    if (StatusDlg.IsCancelled()) then
        return false;
    else
        return true;
    end
end
function SaveAs(strOutDir, strOutFileName)
    strFileToCopy = "AutoPlay\\Videos\\data01.avi";
    local strFiles = CommonDialogs.File(false, "Сохранить",strOutDir, "Видео файл (*.avi)|*.avi|", strOutFileName, "avi", false);
    if (strFiles ~= "CANCEL") then
        local tblFiles = WinApi.DelimitedStringToTable(strFiles, "|");
        if (tblFiles) then
             if (File.DoesExist(tblFiles[1])) then
                local cBut = Dialog.Message("Сохранить как", tblFiles[1].."\r\nУже существует.\r\nЗаменить существующий файл?", MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1);
                if (cBut == 6) then
                    strOutFile = tblFiles[1];
                    StatusDlg.Show(MB_ICONNONE, false);
                    File.Copy(strFileToCopy, tblFiles[1], true, true, false, true, Callback);
                    StatusDlg.Hide();
                else
                    local strOutDir = String.SplitPath(tblFiles[1]).Drive..String.SplitPath(tblFiles[1]).Folder;
                    local strOutFileName = String.SplitPath(tblFiles[1]).Filename
                    SaveAs(strOutDir, strOutFileName);
                end
            else
                strOutFile = tblFiles[1];
                StatusDlg.Show(MB_ICONNONE, false);
                File.Copy(strFileToCopy, tblFiles[1], true, true, false, true, Callback);
                StatusDlg.Hide();
            end
        end
    end
end
local strOutDir = Shell.GetFolder(SHF_MYDOCUMENTS);
local strOutFileName = "Глобальный передел";
SaveAs(strOutDir, strOutFileName);
Автор: Zloy_Gelud
Дата сообщения: 15.11.2008 18:08
tavria2
Можно ли получить текст определенной строки (абзаца) в объекте Параграф при наведенни на эту строку курсором мышки? Может как-нить через API?

Добавлено:
Хотя скорей всего нечего нельхя будет сделать, ведь Параграф не имеет дескриптора
Автор: tavria2
Дата сообщения: 15.11.2008 20:18
Zloy_Gelud
IMHO маловероятно...
Автор: Zloy_Gelud
Дата сообщения: 15.11.2008 20:28
tavria2
Понятно . А можно ли как-то тоже самое только с объектом Input? И можно ли работать с этим объектом (средствами API), если параметр Enabled = false?
Автор: tavria2
Дата сообщения: 16.11.2008 10:52
Zloy_Gelud
Не знаю, а ListBox не подходит - кажется в нем можно узнать какая item находится под курсором.

Если не секрет, что ты строишь?
Автор: alfonser
Дата сообщения: 16.11.2008 18:21
Подскажите, пожалуйста! Как мне указать путь к приводу, если авторан запущен с жесткого диска. Ведь путь _SourceDrive используется (если я правильно понимаю) если с него запущен авторан?
Автор: Zloy_Gelud
Дата сообщения: 17.11.2008 00:27
tavria2
Сорри за поздний ответ..прост некада было ответить.
Я значит строю слежующее ..Имеется база данных (XML, SQL..тут впринципе неважно), так вот, она (БД) имеет два поля (Name и Description). Данные поля 'Name' необходимо (предполагалось по крайне мере так) вывести в объект Параграф, и при наведении на абзац (строку) которого, происходило считывание данных из поля 'Description' в другой Параграф. Проблема именно стоит в считывании текста абзаца в Параграфе при наведении на него курсором.
С Листбоксом такое я уже реализовал , но мне не нравися сам факт того, что по итемам можно кликать, а с неактивным объектом работать нельзя.


alfonser
_SourceDrive укажет букву диска, с которого был запущен авторан. Будь то хард или привод.
А если приводов несколько, а авторан запущен с харда, как узнать, который тебе привод нужен?
Автор: tavria2
Дата сообщения: 17.11.2008 09:14
Zloy_Gelud

Цитата:
С Листбоксом такое я уже реализовал , но мне не нравися сам факт того, что по итемам можно кликать, а с неактивным объектом работать нельзя.

Если тебя раздражает подсветка item, то просто можешь запретить перерисовку объекта послав ему соответственное сообщение:

Код: hWnd = ListBox.GetProperties("ListBox1").WindowHandle;
WM_SETREDRAW = 11;
bRedraw = 0; -- 0 - запретить перерисовку объекта; 1 - разрешить перерисовку объекта
DLL.CallFunction("user32.dll", "SendMessageA", hWnd..","..WM_SETREDRAW..","..bRedraw..",0" , DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
Автор: Zloy_Gelud
Дата сообщения: 17.11.2008 10:05
tavria2
Отлично .
Остановлюсь все-таки на Листбоксе.
Автор: alfonser
Дата сообщения: 17.11.2008 11:24
Zloy_Gelud

Цитата:
А если приводов несколько, а авторан запущен с харда, как узнать, который тебе привод нужен?

Понятно! Короче гемор.
Спасибо!
Автор: Zloy_Gelud
Дата сообщения: 17.11.2008 17:40
alfonser
Если ты задавал этот вопрос, потому что компилировал проект как Web/Email Executable, а _SourceDrive в этом случае укажет букву диска, куда распаковался SFX-архив (т.е. папка системная папка %TEMP%), то возможно такое тебе поможет:

Код: function GetSFXPath()
    strPath = "";
    strArg = _CommandLineArgs[1];
    if strArg then
        strPath = String.Right(strArg, String.Length(strArg) - 10);
    end
    if (String.Length(strPath) > 0) then
        tblPath = String.SplitPath(strPath);
        strPath = tblPath.Drive..String.Left(tblPath.Folder, String.Length(tblPath.Folder) - 1);
    end
    return strPath;
end

_SourceFolder = GetSFXPath();
_SourceDrive = String.Mid(_SourceFolder, 1, 2);
Автор: alfonser
Дата сообщения: 17.11.2008 21:57
Zloy_Gelud

Цитата:
Если ты задавал этот вопрос, потому что компилировал проект как Web/Email Executable

Спасибо!
Нет, я скопировал авторан с диска на хард, прибил тот который на диске и работаю с харда. Но мне надо запустить установку файлов , которые находятся на диске( болванке) и как указать к ним путь не соображу.Копировать их на хард не реально (большой объем).
Извини, что нагрузил.
Автор: sp3d
Дата сообщения: 17.11.2008 21:58
Доброе время суток форумчане!
Вопрос, можно подключить файл *.dll флеш плеера?
Например: Юзер запускает проект, в который вставлен флеш ролик. Но у него не установлен флеш плеер т.е. юзер неувидит ролик. Возможно ли реализовать, просмотр ролика с помощью плагина( без установки флеш плеера). У кого какие идеи?
Автор: Zloy_Gelud
Дата сообщения: 17.11.2008 23:01
alfonser

Цитата:
Извини, что нагрузил.

На то и форум, чтоб задавать вопросы.


sp3d

Цитата:
Возможно ли реализовать, просмотр ролика с помощью плагина( без установки флеш плеера).

Без установки ActiveX объекта, имхо, врядли возможно.
Но ты перед запуском проекта можешь проверять, установлен ли ActiveX или нет с помощью вкладки Applications в меню Dependencies.
Автор: Lexua
Дата сообщения: 18.11.2008 11:12
alfonser
В шапке - Таблица дисков системы от Lexua посмотри, может поможет.
Автор: Zloy_Gelud
Дата сообщения: 18.11.2008 16:24
alfonser
Может использование маркерного файла поможет.

Код: --[[ Функция: Определяет букву cdrom-а с рабочими
    файлами/каталогами по маркерному файлу]]

function GetSourceDrive()
    local strResult = "";                        -- переменная, содержащая букву cdrom-а
    local tblDrives = Drive.Enumerate();        -- таблица дисков системы
    local nError = Application.GetLastError();    -- проверка на ошибки
    if (nError ~= 0) then                        -- если имеются
     Dialog.Message("Error", _tblErrorMessages[nError], MB_OK, MB_ICONEXCLAMATION, MB_DEFBUTTON1);
    else                                        -- если отсутствуют
        for n, strDriveLetter in tblDrives do    -- перебираем все диски в цикле
            -- если диск - cdrom, и в корне его присутствует маркерный файл (например, autorun.exe)
            if (Drive.GetType(strDriveLetter) == DRIVE_CDROM) and (File.DoesExist(strDriveLetter.."\\autorun.exe")) then    
                strResult = strDriveLetter;        -- устанавливаем букву cdrom-а
                break;                            -- прерываем цикл
            end
        end
    end
    return strResult;
end

_SourceDrive = GetSourceDrive();
if (_SourceDrive ~= "") then
    Dialog.Message("Drive", "Drive letter: ".._SourceDrive, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Symantec Endpoint Protection - SEP


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.