не помогло
» Autoplay Media Studio
ubian
сравнивать шрифты по имени получается не очень хорошая идея, потому что попадаються разные файлы с одинаковым именем шрифта
вот код со сравением, удаляются шрифты с одинаковым именем файла и именем шрифта
Код:
-- #FUNCTION# ============================================================
-- Name...........: System.GetFontName
-- Description....: Возвращает индексированную числами таблицу
-- Syntax.........: System.GetFontName (tFontsPath)
-- Parameters.....: tFontsPath - таблица, содержащая полные пути шрифтов
-- Return values..: tRet[i].Name - Название шрифта.
-- tRet[i].Path - Путь к шрифту.
-- ==================================================================
System.GetFontsName = function (tFontsPath)
local tFontsName = {};
local tFontsLink = {};
if type(tFontsPath) ~= "table" then return nil; end
Memory.OpenLibrary(0, _SystemFolder.."\\kernel32.dll");
Memory.OpenLibrary(1, _SystemFolder.."\\gdi32.dll");
local nF1 = Memory.OpenFunction(0, "MultiByteToWideChar", DLL_CALL_STDCALL, DLL_RETURN_INT);
local nF2 = Memory.OpenFunction(1, "GetFontResourceInfoW", DLL_CALL_STDCALL, DLL_RETURN_INT);
for i = 1, #tFontsPath do
local pTmp, pTmp2 = Memory.Allocate(4), Memory.Allocate(4);
if DLL.CallFunction("gdi32.dll", "AddFontResourceExA", "\""..tFontsPath[i].."\",32,0", 0, 1) ~= "0" then
local nBuffersize = Memory.CallFunction(nF1, 0, 1, tFontsPath[i], -1, 0, 0);
local pWideString = Memory.Allocate(2 * nBuffersize);
Memory.CallFunction(nF1, 0, 1, tFontsPath[i], -1, pWideString, nBuffersize);
---------------------------------------------------
Memory.CallFunction(nF2, pWideString, pTmp, 0, 1);
local pBuffer = Memory.Allocate(2 * Memory.GetInt(pTmp));
Memory.PutLong(pTmp2, Memory.GetInt(pTmp));
Memory.CallFunction(nF2, pWideString, pTmp2, pBuffer, 1);
local key = String.Mid(tFontsPath[i], String.ReverseFind(tFontsPath[i], "\\") + 1, -1).."_"..Memory.GetString(pBuffer, -1, "Unicode");
tFontsName[Table.Count(tFontsName) + 1] = {Name = Memory.GetString(pBuffer, -1, "Unicode"), Path = tFontsPath[i], Key = key};
tFontsLink[key] = Table.Count(tFontsName); -- сохраняем в таблице индексы таблицы tFontsName
Memory.Free(pTmp); Memory.Free(pTmp2); Memory.Free(pBuffer); Memory.Free(pWideString);
DLL.CallFunction("gdi32.dll", "RemoveFontResourceEx", "\""..tFontsPath[i].."\",32,0", 0, 1);
end
end
Memory.CloseLibrary(1);
Memory.CloseLibrary(0);
return tFontsName, tFontsLink; -- возвращаем две таблицы tFontsName - свойствва шрифтов, tFontsLink - ключ (имя файла) = индексу tFontsName
end
-- Sample
local tSystemFonts = File.Find(Shell.GetFolder(SHF_FONTS), "*.*", false, false, nil, nil);
if tSystemFonts then
tFonts = System.GetFontsName(tSystemFonts);
for i = 1, #tFonts do
ListBox.AddItem("ListBox1", i..". "..tFonts[i].Name.." - "..tFonts[i].Path, tFonts[i].Path);
end
end
Debug.ShowWindow(true);
local tUserFont = File.Find("Fonts", "*.*", false, false, nil, nil);
if tUserFont then
local tFontsUser, tFontsCompare = System.GetFontsName(tUserFont);
for i=1, #tFonts do
if tFontsCompare[tFonts[i].Key] then
--File.Delete(tFontsUser[tFontsCompare[tFonts[i].Key]].Path, false, false, true, nil);
Debug.Print(i..". Удалены: "..tFontsUser[tFontsCompare[tFonts[i].Key]].Path.."\r\n");
end
end
end
сравнивать шрифты по имени получается не очень хорошая идея, потому что попадаються разные файлы с одинаковым именем шрифта
вот код со сравением, удаляются шрифты с одинаковым именем файла и именем шрифта
Код:
-- #FUNCTION# ============================================================
-- Name...........: System.GetFontName
-- Description....: Возвращает индексированную числами таблицу
-- Syntax.........: System.GetFontName (tFontsPath)
-- Parameters.....: tFontsPath - таблица, содержащая полные пути шрифтов
-- Return values..: tRet[i].Name - Название шрифта.
-- tRet[i].Path - Путь к шрифту.
-- ==================================================================
System.GetFontsName = function (tFontsPath)
local tFontsName = {};
local tFontsLink = {};
if type(tFontsPath) ~= "table" then return nil; end
Memory.OpenLibrary(0, _SystemFolder.."\\kernel32.dll");
Memory.OpenLibrary(1, _SystemFolder.."\\gdi32.dll");
local nF1 = Memory.OpenFunction(0, "MultiByteToWideChar", DLL_CALL_STDCALL, DLL_RETURN_INT);
local nF2 = Memory.OpenFunction(1, "GetFontResourceInfoW", DLL_CALL_STDCALL, DLL_RETURN_INT);
for i = 1, #tFontsPath do
local pTmp, pTmp2 = Memory.Allocate(4), Memory.Allocate(4);
if DLL.CallFunction("gdi32.dll", "AddFontResourceExA", "\""..tFontsPath[i].."\",32,0", 0, 1) ~= "0" then
local nBuffersize = Memory.CallFunction(nF1, 0, 1, tFontsPath[i], -1, 0, 0);
local pWideString = Memory.Allocate(2 * nBuffersize);
Memory.CallFunction(nF1, 0, 1, tFontsPath[i], -1, pWideString, nBuffersize);
---------------------------------------------------
Memory.CallFunction(nF2, pWideString, pTmp, 0, 1);
local pBuffer = Memory.Allocate(2 * Memory.GetInt(pTmp));
Memory.PutLong(pTmp2, Memory.GetInt(pTmp));
Memory.CallFunction(nF2, pWideString, pTmp2, pBuffer, 1);
local key = String.Mid(tFontsPath[i], String.ReverseFind(tFontsPath[i], "\\") + 1, -1).."_"..Memory.GetString(pBuffer, -1, "Unicode");
tFontsName[Table.Count(tFontsName) + 1] = {Name = Memory.GetString(pBuffer, -1, "Unicode"), Path = tFontsPath[i], Key = key};
tFontsLink[key] = Table.Count(tFontsName); -- сохраняем в таблице индексы таблицы tFontsName
Memory.Free(pTmp); Memory.Free(pTmp2); Memory.Free(pBuffer); Memory.Free(pWideString);
DLL.CallFunction("gdi32.dll", "RemoveFontResourceEx", "\""..tFontsPath[i].."\",32,0", 0, 1);
end
end
Memory.CloseLibrary(1);
Memory.CloseLibrary(0);
return tFontsName, tFontsLink; -- возвращаем две таблицы tFontsName - свойствва шрифтов, tFontsLink - ключ (имя файла) = индексу tFontsName
end
-- Sample
local tSystemFonts = File.Find(Shell.GetFolder(SHF_FONTS), "*.*", false, false, nil, nil);
if tSystemFonts then
tFonts = System.GetFontsName(tSystemFonts);
for i = 1, #tFonts do
ListBox.AddItem("ListBox1", i..". "..tFonts[i].Name.." - "..tFonts[i].Path, tFonts[i].Path);
end
end
Debug.ShowWindow(true);
local tUserFont = File.Find("Fonts", "*.*", false, false, nil, nil);
if tUserFont then
local tFontsUser, tFontsCompare = System.GetFontsName(tUserFont);
for i=1, #tFonts do
if tFontsCompare[tFonts[i].Key] then
--File.Delete(tFontsUser[tFontsCompare[tFonts[i].Key]].Path, false, false, true, nil);
Debug.Print(i..". Удалены: "..tFontsUser[tFontsCompare[tFonts[i].Key]].Path.."\r\n");
end
end
end
"Любой дурак может написать код, который поймет компилятор. Только программист напишет код, который поймет человек"
Но все равно спасибо.
Т.е. придется на Java писать модуль сторонний от программы. Хотя может кто сделает. Вся работа опять висит)
Но все равно спасибо.
Т.е. придется на Java писать модуль сторонний от программы. Хотя может кто сделает. Вся работа опять висит)
ubian
непонятно с чем у тебя проблемы? Выше работающий код,
раскоментируй строчку
Код:
File.Delete(tFontsUser[tFontsCompare[tFonts[i].Key]].Path, false, false, true, nil);
непонятно с чем у тебя проблемы? Выше работающий код,
раскоментируй строчку
Код:
File.Delete(tFontsUser[tFontsCompare[tFonts[i].Key]].Path, false, false, true, nil);
Robby
Цитата:
В цикле нужно перебирать не с первого индекса по последний, а наоборот. Например:
Код: for i = #t1, 1, -1 do
Table.Remove(t1, i);
end
Цитата:
Проблема в том что после первого удаления все индексы во второй таблице смещаются и уже не соответсвуют индексам из первой. Как можно это скомпенсировать?
В цикле нужно перебирать не с первого индекса по последний, а наоборот. Например:
Код: for i = #t1, 1, -1 do
Table.Remove(t1, i);
end
tavria2
да уж решение то на поверхности лежало. Спасибо.
Если у тебя есть время может поможешь с этим http://forum.ru-board.com/topic.cgi?forum=5&topic=33745&start=2780#21 ?
Сделал пока так, но это слишком грубый метод - большая погрешность останавливается как сумма набрата не выбирая оптимальный вариант.
Код: function sum(tSize, nMax)
local function sorter(v1,v2)
if (v1 > v2)then
return true;
else
return false;
end
end
Table.Sort(tSize, sorter);
w=0;
for i=1, #tSize do
if w+tSize[i]<=nMax then
w=w+tSize[i];
Debug.Print(tSize[i].."\r\n");
end
end
end
tSize={10, 150, 50, 40, 30};
nMax=110;
Debug.Clear();
Debug.ShowWindow(true);
sum(tSize, nMax);
да уж решение то на поверхности лежало. Спасибо.
Если у тебя есть время может поможешь с этим http://forum.ru-board.com/topic.cgi?forum=5&topic=33745&start=2780#21 ?
Сделал пока так, но это слишком грубый метод - большая погрешность останавливается как сумма набрата не выбирая оптимальный вариант.
Код: function sum(tSize, nMax)
local function sorter(v1,v2)
if (v1 > v2)then
return true;
else
return false;
end
end
Table.Sort(tSize, sorter);
w=0;
for i=1, #tSize do
if w+tSize[i]<=nMax then
w=w+tSize[i];
Debug.Print(tSize[i].."\r\n");
end
end
end
tSize={10, 150, 50, 40, 30};
nMax=110;
Debug.Clear();
Debug.ShowWindow(true);
sum(tSize, nMax);
Добрый вечер. Подскажите возможно ли как то получить дату снимка из jpeg файла?
Robby
Цитата:
Извини, со временем большой напряг.
Цитата:
Если у тебя есть время может поможешь с этим
Извини, со временем большой напряг.
tavria2
понятно, может хотя бы на словах по шагам, типа сделать то, потом то и т.д. Нужен сам алгоритм. То что есть в интернете никак не помагает
понятно, может хотя бы на словах по шагам, типа сделать то, потом то и т.д. Нужен сам алгоритм. То что есть в интернете никак не помагает
Блин. Я чего-то туплю. Можете сделать рабочий проект...
ubian
по тому алгоритму, что ты раньше написал? Или напишешь как нужно полностью.
по тому алгоритму, что ты раньше написал? Или напишешь как нужно полностью.
Мне нужно.
Page 1.
страница с кнопкой по которой проходит сравнение и удаление шрифтов из папки _SourceFolder.."\\System\\Fonts"
Далее страница 2
Page 2.
Установка шрифтов, которые в папку System/Fonts с Progress Bar
При завершении на стр. 3
Page 3.
пустая страница
Page 1.
страница с кнопкой по которой проходит сравнение и удаление шрифтов из папки _SourceFolder.."\\System\\Fonts"
Далее страница 2
Page 2.
Установка шрифтов, которые в папку System/Fonts с Progress Bar
При завершении на стр. 3
Page 3.
пустая страница
ubian
на вот пока посмотри пример (на скорую руку) получение и удаление шрифтов
http://rghost.ru/35518695
Потом сделаю проверку файлов по CRC, там сейчас старый код сравнения
Шрифты нужно чтоб все ставились сразу или по одному?
на вот пока посмотри пример (на скорую руку) получение и удаление шрифтов
http://rghost.ru/35518695
Потом сделаю проверку файлов по CRC, там сейчас старый код сравнения
Шрифты нужно чтоб все ставились сразу или по одному?
Stalkersof, спасибо, вроде бы получилось. Буду разбираться дальше.
Robby, не принципиально. И еще к этому проекту хотелось бы вывод шрифтов установленных в системе на ComboBox. И при выборе чтобы на этот шрифт менялся шрифт в Label1.
Кто знает как сделать серверную и клиентскую программу по типу клиент скачивает с сервера файл, а потом опять на сервер загружает, но без FTP т.к. будет дырка.
И еще. Как сделать например. Я пишу в Input
Код:
login
И еще. Как сделать например. Я пишу в Input
Код:
login
ubian
Цитата:
Код: local sText = 'login';
local sReverse = '';
for i = #sText, 1, -1 do
sReverse = sReverse .. String.Mid(sText, i, 1);
end
Dialog.Message("Notice", sReverse);
Цитата:
т.е. текст задом на перед.
Код: local sText = 'login';
local sReverse = '';
for i = #sText, 1, -1 do
sReverse = sReverse .. String.Mid(sText, i, 1);
end
Dialog.Message("Notice", sReverse);
Цитата:
т.е. текст задом на перед.
еще один вариант - использовать библиотеки LUA для работы со строками
Код: string.reverse (s)
Большое спасибо. А как на счет логина из файлов. Типа
в logins.INS
Код:
admin
user
в logins.INS
Код:
admin
user
Добрый вечер. Господа подскажите как можно сделать функцию форматирования флешки или съемного hdd? Заранее спасибо
dallas page -- могу предложить функу, которая открывает стандартное диалоговое окно форматирования диска.
Код: if not WinAPI then WinAPI = {}; end
SHFMT_OPT_FULL = 0;
SHFMT_OPT_QUICKFORMAT = 1;
SHFMT_OPT_SYSONLY = 2;
--[[ Opens the Shell's Format dialog.]]
WinAPI.FormatDriveDlg = function (sDrive, iOption, hParent)
iOption = iOption or 0;
hParent = hParent or 0;
if String.Left(String.Upper(String.TrimLeft(sDrive, nil)), 1) == "" then return false; end
local nDrive = String.Asc(sDrive) - 65;
if (nDrive < 0) or (nDrive > 25) then return false; end
local Ret = DLL.CallFunction("shell32.dll", "SHFormatDrive", hParent..","..nDrive..",65535,"..iOption, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
local error = Application.GetLastError();
if (error ~= 0) then
return false;
else
if tonumber(Ret) < 0 then
return false;
end
end
return true;
end
-- Системный диалог форматирования диска D:
-- Форматирование автоматически не начинается.
WinAPI.FormatDriveDlg('D', SHFMT_OPT_QUICKFORMAT);
Код: if not WinAPI then WinAPI = {}; end
SHFMT_OPT_FULL = 0;
SHFMT_OPT_QUICKFORMAT = 1;
SHFMT_OPT_SYSONLY = 2;
--[[ Opens the Shell's Format dialog.]]
WinAPI.FormatDriveDlg = function (sDrive, iOption, hParent)
iOption = iOption or 0;
hParent = hParent or 0;
if String.Left(String.Upper(String.TrimLeft(sDrive, nil)), 1) == "" then return false; end
local nDrive = String.Asc(sDrive) - 65;
if (nDrive < 0) or (nDrive > 25) then return false; end
local Ret = DLL.CallFunction("shell32.dll", "SHFormatDrive", hParent..","..nDrive..",65535,"..iOption, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL);
local error = Application.GetLastError();
if (error ~= 0) then
return false;
else
if tonumber(Ret) < 0 then
return false;
end
end
return true;
end
-- Системный диалог форматирования диска D:
-- Форматирование автоматически не начинается.
WinAPI.FormatDriveDlg('D', SHFMT_OPT_QUICKFORMAT);
Zloy_Gelud
Цитата:
лучше в функцию добавить дискрептор окна проекта!для более корректного вызова!
Цитата:
Системный диалог форматирования диска
лучше в функцию добавить дискрептор окна проекта!для более корректного вызова!
Цитата:
Stalkersof
Цитата:
На скорую руку. Попробуй http://narod.ru/disk/34978104001/Project.apz.html
Все равно при просмотре происходит прокрутка предыдущей "траектории". На все страницы в ПреЛоад поставил ваш скрипт - не помогает.
lerik2703
Цитата:
При hParent = 0, будет использоваться дескриптор приложения, из которого вызывается функция. Имхо. Но похоже, что так оно и есть.
Цитата:
лучше в функцию добавить дискрептор окна проекта!для более корректного вызова!
При hParent = 0, будет использоваться дескриптор приложения, из которого вызывается функция. Имхо. Но похоже, что так оно и есть.
Бодрого времени суток, парни. Полистал форум, полазил по сайтам но не нашел ответа на вопрос. Как подгрузить в проект комбобоксы и прочие элементы со своим цветовым оформлением?
Madbounce
Этих настроек не хватает?
Этих настроек не хватает?
Да. маловато. Я имел в виду возможность поменять кнопку и границы выпадающего списка, чекбоксов, радиобаттонов и т.д. Кроме того маловато настроек управления таблицами.
Madbounce
Цитата:
Это меняется в зависимости от скина.
Цитата:
А здесь чего не хватает?
Цитата:
Я имел в виду возможность поменять кнопку и границы выпадающего списка, чекбоксов, радиобаттонов и т.д.
Это меняется в зависимости от скина.
Цитата:
Кроме того маловато настроек управления таблицами.
А здесь чего не хватает?
Цитата:
Это меняется в зависимости от скина.
Спасибо. Понял.
Цитата:
А здесь чего не хватает?
Не нашел возможности изменения цвета выделенной ячейки и выбора только одной ячейки
Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
Предыдущая тема: Media Player Classic - Home Cinema (MPC-HC)
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.