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

» Autoplay Media Studio

Автор: lorents
Дата сообщения: 22.06.2009 22:33
Zloy_Gelud

Цитата:
Это не баг. Это так сказать недоделка.. :gig: Лениво делать, чтоб еще и на диалогах работало.

очень, очень плохо, мне это надо было как раз для диалоговых окон

если будет возможность доделай пожалуйста
Автор: Zloy_Gelud
Дата сообщения: 22.06.2009 23:48
Ребят, созрел вопрос такой: есть вордовский шаблон (DOT). Можно ли как-нить средствами АМС заполнять его содержимое (расчетами, формулами, текстами и т.п.). Видел в одной программе подобное..
З.Ы. Пробывал работать через плаг SendKeys - возможно, но не удобно.
Автор: AleksTrin
Дата сообщения: 23.06.2009 05:43
Mars803
Спасибо, очень помогло!
Автор: lorents
Дата сообщения: 23.06.2009 14:52
Не подскажите как можно сделать проверку соединения, если соединения нет, повторить попытку?

Код: IsConnected = HTTP.TestConnection("http://www.google.com", 20, 80, nil, nil);
if (IsConnected == false) then
    result = Dialog.Message("Ошибка", "Приложение не смогло получить доступ к интернету.\r\nВы хотите повторить попытку?", MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1);
    if (result == IDYES) then
    --Возвращаемся к первой строчке
    else
        Window.Close(DialogEx.GetWndHandle(), CLOSEWND_SENDMESSAGE);
        Window.Close(Application.GetWndHandle(), CLOSEWND_TERMINATE);
    end
else

end
Автор: UMode
Дата сообщения: 23.06.2009 16:46
lorents
Вроде бы так:

Код: while HTTP.TestConnection("http://www.google.com", 20, 80, nil, nil) == false do
result = Dialog.Message("Ошибка", "Приложение не смогло получить доступ к интернету.\r\nВы хотите повторить попытку?", MB_YESNO, MB_ICONQUESTION, MB_DEFBUTTON1);
if (result == IDNO) then
Window.Close(DialogEx.GetWndHandle(), CLOSEWND_SENDMESSAGE);
Window.Close(Application.GetWndHandle(), CLOSEWND_TERMINATE);
end
end
Автор: lorents
Дата сообщения: 23.06.2009 17:12
UMode
спасибо!
Автор: AleksTrin
Дата сообщения: 23.06.2009 20:21
Mars803
Конечно, чтение из таблицы это круто, но все рано не переводятся остальные страницы и диалоги, а переводится тока первая страница!
Люди подскажите пожалуйста, как сделать так, чтобы можно было заменять текст в объектах нажатием одной кнопки или меню, на всех страницах и диалогах?
Автор: Zloy_Gelud
Дата сообщения: 24.06.2009 00:28
AleksTrin 21:21 23-06-2009
Цитата:
Люди подскажите пожалуйста, как сделать так, чтобы можно было заменять текст в объектах нажатием одной кнопки или меню, на всех страницах и диалогах?

Времени особо нету, поэтому сваял на скорую руку. Вроде работает, правда комментариев практически нет. Надеюсь разберешься.
lng.apz ~ 10.59 kB
Не забудь про вкладку On Shutdown
Автор: AleksTrin
Дата сообщения: 24.06.2009 10:30
Zloy_Gelud
Это все канеш хорошо, но это как то муторно, а по проще нету? А как быть на счет диалогов?
Ведь в них тож надо менять текст

Добавлено:
и меню надо тоже менять с русского на английский и наоборот!
И мне больше нравится когда в языковом файле не просто идут друг за другом слова, а например, вот так:

MenuFile = "Файл"; - эта строчка находится в языковом файле Russian.ini
----
Application.LoadScript ("Lang\\Russian.ini")
tblMenu = {};
tblMenu[1] ={};
tblMenu[1].Text = MenuFile;

Добавлено:
Нужно сделать намного меньше кода, так как много страниц и много объектов и много разного текста!

Добавлено:
Вот код, который мне дали здесь, вот он малой и норм.
On Preload:
strText = TextFile.ReadToString("AutoPlay\\Docs\\lang.txt");
strMAC = String.Mid(strText, 1, 3);
if (strMAC == "rus") then
Application.LoadScript("Lang\\Russian.ini");
elseif (strMAC == "eng") then
Application.LoadScript("Lang\\English.ini");
end


On Menu:
if e_ID==2 then
Application.LoadScript("Lang\\Russian.ini");
TextFile.WriteFromString("AutoPlay\\Docs\\lang.txt", "rus", false);
elseif e_ID==3 then
Application.LoadScript("Lang\\English.ini");
TextFile.WriteFromString("AutoPlay\\Docs\\lang.txt", "eng", false);
end

Мож его можно как нибудь изменить, добавить, чтобы на всех страницах и диалогах заменялся текст!
Автор: lorents
Дата сообщения: 24.06.2009 15:47
Заметил одну интересную особенность связанная с HTTP.TestConnection, пока не выяснил причины, например идет проверка на соединение с интернетом и если интернета нет, то выводится сообщение через Dialog.Message, по идеи, появившееся, окно должно быть всегда поверх окна проекта, но почему-то так не проиходит

Добавлено:
Не подскажите, как можно сделать следующее:
сделать проверку наличие все ли файлы есть в проекте, если да то продолжить работы, если нет то выдать ошибку. сделал проверку на наличие фалов, но вот у меня появилась проблема, а если пользователь добавил какой-то файл в проект, просто так, то проект выдаст ложную ошибку. Как сделать, чтобы проект как бы сверял таблицу t2 с t1, и если он не нашел какую-ту строчку в t1, которая есть в t2, то только потом выдал бы ошибку.

Код: t1 = File.Find("AutoPlay", "*.*", true, false, nil, nil);
t2 = TextFile.ReadToTable("file.cdd")

if Table.Count(t1) == Table.Count(t2) then
equal = true;
Table.Sort(t1, nil);
Table.Sort(t2, nil);
for nIdx, sValue in t1 do
if sValue ~= t2[nIdx] then
equal = false;
break;
end
end
else
equal = false;
end

if equal then
Dialog.Message("", "Данные в таблицах не отличаются.");
else
Dialog.Message("", "Данные в таблицах отличаются.");
end
Автор: tavria2
Дата сообщения: 24.06.2009 16:52
lorents
Попробуй так:
Код: t1 = File.Find("AutoPlay", "*.*", true, false, nil, nil);
t2 = TextFile.ReadToTable("file.cdd")

-- if Table.Count(t1) == Table.Count(t2) then
equal = true;
Table.Sort(t1, nil);
Table.Sort(t2, nil);
for nIdx, sValue in t2 do
if sValue ~= t1[nIdx] then
equal = false;
break;
end
end
-- else
-- equal = false;
-- end

if equal then
Dialog.Message("", "OK");
else
Dialog.Message("", "Error");
end
Автор: lorents
Дата сообщения: 24.06.2009 17:05
tavria2
ааа, понял, спасибо, как всегда гениальное
Автор: lorents
Дата сообщения: 25.06.2009 15:28
Как можно сделать, чтобы объект Input имел тот стиль, который задает тема у пользователя?
и еще как сделать плавное появление и исчезание диалоговый окон, не используя таймер или плагин AMSWTimer?
Автор: tavria2
Дата сообщения: 28.10.2009 22:13
saavaage
Drive.GetFreeSpace возвращает значение, которое помещается в переменную, вот эту переменную и подставляй в Label.SetText. Еще раз внимательно посмотри справку по этим действиям, а также примеры к этим действиям - все станет понятным.

Добавлено:
Упс, не успел с ответом
Автор: tavria2
Дата сообщения: 25.06.2009 18:26
lorents

Цитата:
Как можно сделать, чтобы объект Input имел тот стиль, который задает тема у пользователя?

Код: function Sys_Input(ObjecName)
local GWL_STYLE = -16
local GWL_EXSTYLE = -20

local WS_CHILD = 1073741824;
local WS_VISIBLE = 268435456;
local WS_TABSTOP = 65536;
local WS_DISABLED = 134217728;
local WS_VSCROLL = 2097152;
local WS_HSCROLL = 1048576;

local WS_EX_NOPARENTNOTIFY = 4;
local WS_EX_CLIENTEDGE = 512;

local ES_AUTOVSCROLL = 64;
local ES_READONLY = 2048;
local ES_MULTILINE = 4;
local ES_WANTRETURN = 4096;

local nStyle = WS_CHILD.."|"..WS_TABSTOP.."|"..ES_AUTOVSCROLL;
local nExStyle = WS_EX_CLIENTEDGE.."|"..WS_EX_NOPARENTNOTIFY;
    
local tProp = Input.GetProperties(ObjecName); -- св-ва объекта
tProp.Border = BORDER_NONE; -- изменяем св-во рамки объекта
Input.SetProperties(ObjecName, tProp); -- применяем св-во к объекту
local hWnd = Input.GetProperties(ObjecName).WindowHandle; -- дескриптор объекта

if Input.GetProperties(ObjecName).Visible then nStyle = nStyle.."|"..WS_VISIBLE end
if not Input.GetProperties(ObjecName).Enabled then nStyle = nStyle.."|"..WS_DISABLED end
if Input.GetProperties(ObjecName).ReadOnly then nStyle = nStyle.."|"..ES_READONLY end
if Input.GetProperties(ObjecName).Multiline then
nStyle = nStyle.."|"..ES_MULTILINE.."|"..ES_WANTRETURN;
if Input.GetProperties(ObjecName).VScrollbar then nStyle = nStyle.."|"..WS_VSCROLL end
if Input.GetProperties(ObjecName).HScrollbar then nStyle = nStyle.."|"..WS_HSCROLL end
end
    
WinApi.SetWindowLong(hWnd, GWL_STYLE, nStyle, false);
WinApi.SetWindowLong(hWnd, GWL_EXSTYLE, nExStyle, false);
-- перерисовка объекта
local tSize = Input.GetSize(ObjecName); -- получаем размер объекта
Input.SetSize(ObjecName, tSize.Width+1, tSize.Height+1); -- изменяем размер объекта
Input.SetSize(ObjecName, tSize.Width, tSize.Height);    -- восстанавливаем размер объекта
end
-----------------------------------------------------------------------------------
Sys_Input("Input1"); -- установка системного стиля для объекта Input
Автор: saavaage
Дата сообщения: 28.10.2009 22:51
tavria2
кстати, где можно посмотреть в справке примеры? Я увидел только коротенькие инфо по командам и все...


Добавлено:
tavria2
с Ram и CPU тоже разобрался. Вопрос по выводe разрядности винды (32 или 64). Нигде не могу найти эту команду. Это возможно в принципе?

Все, вопрос закрыт. Справкой тоже пользоваться научился. tavria2, еще раз спасибо.
Автор: saavaage
Дата сообщения: 31.10.2009 00:26
Всем вечер добрый!
Опять нужна Ваша помощь. По ходу создания меню возник еще один вопрос:
необходимо, чтобы на титульный лист меню выводилась инфо следующего характера:
1. имя текущего юзера системы (не путать с именем хозяина машины)
2. аватар текущего юзера

Если не сложно, подскажите как это реализовать.
Форум просмотрел, мысли есть, но не знаю откуда и как брать конкретную информацию о текущем пользователе и его аватаре...

Так, пока нашел такое решение:

-- определение буквы системного раздела
system_drive = String.Left(_WindowsFolder, 2);

-- определение текущего пользователя и заполнение этой инфой Label8
Label.SetText("Label8","");
user_data = Registry.GetValue(HKEY_CURRENT_USER, "\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", "Logon User Name", false);
Label.SetText("Label8", user_data);

-- составление пути до аватара
path_parts = {Drive= system_drive,Folder="\\Documents and Settings\\All Users\\Application Data\\Microsoft\\User Account Pictures\\",Filename= user_data,Extension=".bmp"};
result_path = String.MakePath(path_parts);

-- загрузка картинки аватара в Image2
Image.Load("Image2", result_path);

-- этап проверки обладает ли текущий юзер правами администратора и сигнализация об этом
Label.SetText("Label9","");
Label.SetText("Label10","");
user_info = System.GetUserInfo();
if (not user_info.IsAdmin) then
Label.SetText("Label9","Нет!");
else
Label.SetText("Label10", "Есть!");
end

Вопрос по user_data остается открытым. Актуален ли такой путь в реестре для любой машины?
Автор: lorents
Дата сообщения: 25.06.2009 18:48
tavria2
Спасибо. Мне стыдно просить, но все-таки, а можно еще сделать, что объект Input мог принимал стиль выключенного состоянии?

Цитата:
ИМХО никак.

Понятно, просто я хотел использовать плагин AMSWTimer, но как оказалось он очень не стабильно работает с вистой
Автор: tavria2
Дата сообщения: 25.06.2009 19:36
lorents

Цитата:
Мне стыдно просить, но все-таки, а можно еще сделать, что объект Input мог принимал стиль выключенного состоянии?
А, что в состоянии disable пропадает системный стиль?
Автор: tavria2
Дата сообщения: 31.10.2009 20:59
saavaage

Код: function GetUserName()
local sUserName = "";
mem = Memory.Allocate(256)
len = Memory.Allocate(16)
Memory.PutLong(len, 256)

ret = tonumber(DLL.CallFunction("advapi32.dll", "GetUserNameA", mem..", "..len, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL))
if ret ~= 0 then
sUserName = Memory.GetString(mem, Memory.GetLong(len), "Ascii");
end
Memory.Free(mem)
Memory.Free(len)
return sUserName
end

-----------------------------------------------------------------
sUserName = GetUserName(); -- имя текущего пользователя в системе
if sUserName ~= "" then -- если есть имя текущего пользователя в системе
-- путь к пиктограмме текущего пользователя
sImagePath = Shell.GetFolder(SHF_APPLICATIONDATA_COMMON).."\\Microsoft\\User Account Pictures\\"..sUserName..".bmp";
end
Автор: lorents
Дата сообщения: 25.06.2009 19:44
tavria2

Цитата:
А, что в состоянии disable пропадает системный стиль?

нет, но просто не изменяется. Смотри про включенном состоянии объект Input выглядит так, как раз то что надо, и при выключенном состоянии так же выглядит, а хотелось бы так
по идеи здесь меняется просто задний фон. т.е. просто при выключенном состояния менять фон. через WinApi.GetSysColor получить нужный цвет, сейчас посмотрю как раз какой это цвет, и потом заменить. но это не удобно, можешь ты изменить в коде чтобы не приходилось это для каждого Input'а писать отдельно?

нашел. на счет WinApi.GetSysColor, можно использовать COLOR_BTNFACE

к сожалению мой способ не подходит если надо периодически включать и выключать объект Input.
Автор: saavaage
Дата сообщения: 31.10.2009 23:42
tavria2, спасибо, работает.
А не можете сказать, правильно ли я сделал первоначально и чем ваш вариант лучше? Дело в том, что проверил свой вариант уже на 3 разных машинах и все вроде правильно отображается, а опыта понять самостоятельно, какое решение и чем лучше пока нет. Прямо скажу, что из верхней части вашего скрипта, вообще, ничего не понял. Может есть где почитать по это плагину?

Еще один вопрос - если на машине памяти больше 2 Гб, штатный скрипт (см. ниже) позволит это увидеть или только до 2Гб?

Штатный скрипт:

Label.SetText("Label4","");
result = System.GetMemoryInfo().TotalRAM +1;
Label.SetText("Label4", result);
Автор: pavki
Дата сообщения: 01.11.2009 00:16
Привет всем, я тут первый день!
Ребята скиньте пожалуйста Русский HELP у кого есть!
На форуме находил help НО ТАМ БИТАЯ ССЫЛКА
Автор: tavria2
Дата сообщения: 25.06.2009 23:30
lorents
Мне не удалось привязать фон Input к схеме окна
Автор: saavaage
Дата сообщения: 01.11.2009 00:24
pavki, присоединяюсь к просьбе..
Автор: lorents
Дата сообщения: 26.06.2009 09:45
tavria2

Цитата:
Мне не удалось привязать фон Input к схеме окна

у меня есть только два способа решения проблемы:
1. найти то что отвечает за выключенное\включенное состояние объекта Input
2. изменять отдельно задний фон и окантовку объекта Input. Задний фон мы просто изменяем, а за окантовку будет отвечать плагин Shape
задний фон через COLOR_BTNFACE
окантовку через COLOR_BTNSHADOW
заодно можно и цвет текста поменять на COLOR_BTNTEXT
Второй способ я могу сам реализовать, но для каждого объекта Input отдельно. Можно я тебя попрошу написать функцию, чтобы не приходилось для каждого случая писать отдельно?

и еще один вопрос, как сделать, чтобы в объект Input можно было вводить только числа?
Автор: tavria2
Дата сообщения: 01.11.2009 00:39
saavaage

Цитата:
А не можете сказать, правильно ли я сделал первоначально? и чем ваш вариант лучше. Дело в том, что проверял уже на 3 разных машинах и все вроде правильно отображается,

Проверял на разных машинах под XP? Попробуй проверить в Висте.

Путь к пиктограммам пользователя XP:
C:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures

Путь к пиктограммам пользователя Vista:
C:\Users\All Users\Microsoft\User Account Pictures

Разницу улавливаешь?

Я привел пример с использованием API-функций (даже штатное действие Shell.GetFolder - является оберткой API-функции), т.е. используются библиотеки Windows, за счет чего достигается совместимость между различными версиями системы, хотя в данном случае Win9x - не поддерживается.

Цитата:
если на машине памяти больше 2 Гб штатный скрипт позволит это увидеть

Не знаю - не проверял.


pavki

Цитата:
Ребята скиньте пожалуйста Русский HELP у кого есть!
На форуме находил help НО ТАМ БИТАЯ ССЫЛКА

Русской справки не существует и врядли будет. Были только попытки русифицировать несколько пунктов справки и на этом все...
Автор: tavria2
Дата сообщения: 26.06.2009 11:30
lorents

Цитата:
Можно я тебя попрошу написать функцию, чтобы не приходилось для каждого случая писать отдельно?
Не получится отслеживать изменение активности Input.

Цитата:
еще один вопрос, как сделать, чтобы в объект Input можно было вводить только числа?

Код: GWL_STYLE = -16;
ES_NUMBER = 8192;
local hWnd = Input.GetProperties("Input1").WindowHandle; -- дескриптор объекта;
WinApi.SetWindowLong(hWnd, GWL_STYLE, ES_NUMBER, true); -- ввод только цифр
Автор: saavaage
Дата сообщения: 01.11.2009 00:50
tavria2, получается, что Ваш -более универсален. Тогда вопрос по штатным скриптам (см. ниже) - будут ли они работать и в висте/7? и если нет, то куда рыть для получения универсального результата?

Label.SetText("Label3","");
drive_free = Drive.GetFreeSpace(_WindowsFolder);
Label.SetText("Label3", drive_free);
-----------------------------------------------------------------------------------------
Label.SetText("Label5","");
result = System.GetOSName();
Label.SetText("Label5", result.." /");
-------------------------------------------------------------------------------------------
Label.SetText("Label4","");
result = System.GetMemoryInfo().TotalRAM +1;
Label.SetText("Label4", result);
----------------------------------------------------------------------------------------------
Label.SetText("Label2","");
cMHz = Registry.GetValue(HKEY_LOCAL_MACHINE, "Hardware\\Description\\System\\CentralProcessor\\0", "~MHz", true);
Label.SetText("Label2", cMHz.." /")
-------------------------------------------------------------------------------------------------
Label.SetText("Label6","");
tKernels = Registry.GetKeyNames(HKEY_LOCAL_MACHINE, "Hardware\\Description\\System\\CentralProcessor");
if (tKernels) then
-- количество ядер
KernelsNumber = Table.Count(tKernels);
end
Label.SetText("Label6", KernelsNumber);
-----------------------------------------------------------------------------------------------------
Label.SetText("Label1","");
-- Check if the OS is 64 bit
b64Bit = System.Is64BitOS();
if b64Bit then
Label.SetText("Label1", "64");
else
Label.SetText("Label1", "32");
end
-------------------------------------------------------------------------------------------------
Label.SetText("Label7","");
system_drive = String.Left(_WindowsFolder, 2);
Label.SetText("Label7", system_drive);
---------------------------------------------------------------------------------------------------
Label.SetText("Label8","");
function GetUserName()
local sUserName = "";
mem = Memory.Allocate(256)
len = Memory.Allocate(16)
Memory.PutLong(len, 256)
ret = tonumber(DLL.CallFunction("advapi32.dll", "GetUserNameA", mem..", "..len, DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL))
if ret ~= 0 then
sUserName = Memory.GetString(mem, Memory.GetLong(len), "Ascii");
end
Memory.Free(mem)
Memory.Free(len)
return sUserName
end
-----------------------------------------------------------------
sUserName = GetUserName(); -- имя текущего пользователя в системе
if sUserName ~= "" then -- если есть имя текущего пользователя в системе
-- путь к пиктограмме текущего пользователя
sImagePath = Shell.GetFolder(SHF_APPLICATIONDATA_COMMON).."\\Microsoft\\User Account Pictures\\"..sUserName..".bmp";
end
Label.SetText("Label8", sUserName);
Image.Load("Image2", sImagePath);
---------------------------------------------------------------------------------------
Label.SetText("Label9","");
Label.SetText("Label10","");
user_info = System.GetUserInfo();
if (not user_info.IsAdmin) then
Label.SetText("Label9","Нет!");
else
Label.SetText("Label10", "Есть!");
end
Автор: lorents
Дата сообщения: 26.06.2009 14:22
tavria2

Цитата:
Не получится отслеживать изменение активности Input.

тогда придется отдельно писать для каждого, ну это не сложно для мня
Спасибо за код , ты всегда меня выручаешь.

Добавлено:
tavria2
Не подскажешь. как сделать чтобы в input нельзя было бы вводить русский буквы?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: PHP RapidGet Pro V


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