ARM4ND0 Опубликовано 20 сентября, 2011 Поделиться Опубликовано 20 сентября, 2011 Есть идеи как сделать кнопку Music on/off ,еще конечности "Panel"-я чтобы не были острыми и "Game not Found.." ? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 сентября, 2011 Поделиться Опубликовано 21 сентября, 2011 В дизайнере форм создаёшь форму. Бросаешь на неё компоненты 3 Image и 5 Label-ов. Делаешь по три иконки для первого и второго Image (это будут кнопки). Пишешь поведения смены иконок в зависимости от работы курсора: курос над картинкой, удерживание и отпускание.Для третьего Image делаешь задний фон с панелью. Если хочешь можешь делать панель отдельно.Пишешь обработчики для игры музыки/остановки и показа InfoДелаешь окно с InfoДелаешь главную форму нужного типа и размера.Дописываешь нужные свойства в лайблы.Пишешь ещё какие-то свои поведения для работы трейнера по горячим клавишам и поиска процесса игры.Вот и всё. Более подробно смотри учебники по Дельфи или Лазаря по работе с визуальными компонентами (VCL) Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 сентября, 2011 Автор Поделиться Опубликовано 22 сентября, 2011 Ок спасибо. А какой lua скрипт для кнопки music on/off ? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 22 сентября, 2011 Поделиться Опубликовано 22 сентября, 2011 А что сложного? В "документации" всё написано ( все функции написаны в main.lua, который лежит в папке с CE )Предполагается, что фай музыки добавлен в ресурсы.Создана форма и на форме есть кнопка, у которой есть событие CEButton1ClickmusicName = 'music.xm' XMFILE=findTableFile(musicName) if (XMFILE==nil) then print('Er.: File '..musicName..' is not found!') setProperty(CEButton1, "Caption", "Er.") else xmplayer_playXM(XMFILE) setProperty(CEButton1, "Caption", "Music On") endfunction CEButton1Click(sender) if xmplayer_isPlaying() then xmplayer_pause() setProperty(CEButton1, "Caption", "Music Off") else xmplayer_resume() setProperty(CEButton1, "Caption", "Music On") endend Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 22 сентября, 2011 Автор Поделиться Опубликовано 22 сентября, 2011 Oк спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 29 сентября, 2011 Автор Поделиться Опубликовано 29 сентября, 2011 MasterGH а какой lua скрипт написать в TrainerForm-OnClick ,чтобы можно было перемещать трейнер если BorderStyle = None ? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 сентября, 2011 Поделиться Опубликовано 30 сентября, 2011 Данную функцию нужно писать.Простой способ 1: перемещать форму за курсором когда нажата левая кнопка мышки. Это способ можно найти в Интернете задав запрос "перемещение формы за курсором"Самый красивый способ 2 это сделать инъекцию кода в процесс CE с помощью АА-скрипта на обработку любых поступающих сообщений в форму трейнера с выполнением следующего условия. Если было сообщение о нажатии левой кнопки мышкив окне трейнера, то выполнить внутриНовая память:WM_SYSCOMMAND = 0x0112;SC_DRAGMOVE = 0xF012;ReleaseCapture();SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);Возврат назадЕстественно этот код нужно написать на автоассемблере и это надо сделать на Lua-Engine открыв процесс CE и на том же Lua коде использовать функцию выполнения скрипта автоассемблера. Сделав инъекцию кода можно спокойно отключиться от процесса CE. Если это автономный трейнер, то нужно делать инъекцию в процесс этого трейнера и затем отключиться от него. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 сентября, 2011 Поделиться Опубликовано 30 сентября, 2011 Да вы чего? Нужна обработка сообщения WM_LBUTTONDOWN. В этом обработчике форме трейнера посылается сообщение:SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0)И все. Пока будет нажата левая кнопка мыши в области формы трейнера, окно трейнера можно будет таскать сколько угодно. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 сентября, 2011 Поделиться Опубликовано 30 сентября, 2011 Если было бы именно так просто, то я бы наверняка написал бы готовый ответ Речь идёт о Lua-Engine поддержке, а не о полноценном языке программирования под Windows.1) Lua-engine явно не поддерживает посылку сообщений: SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0)2) Явно не поддерживает поиск дескриптора окна.3) Мелочь, но все же, имхо, некрасиво эмулировать HTCAPTION, когда заголовка в окне не видно. Если делаем перетаскивание, то делаем его через WM_SYSCOMMAND и SC_DRAGMOVE.Первый и второй пункт означают, что нужно изворачиваться с автоассемблером совместно с Lua-Engine. Вижу несколько способов решения с таймером/потоком или тот способ который я описал. Да, ещё один способ написать Даркб Байту чтобы ввел поддержу работу с дескрипторами форм. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 30 сентября, 2011 Автор Поделиться Опубликовано 30 сентября, 2011 A по точнее можно ?Этот код писать в АА или в Lua и инжектить в СЕ что ли ?Новая память:WM_SYSCOMMAND = 0x0112;SC_DRAGMOVE = 0xF012;ReleaseCapture();SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);Возврат назад Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 сентября, 2011 Поделиться Опубликовано 30 сентября, 2011 По точнее не могу объяснить Как я писал используй первый способ. Цитата Простой способ 1: перемещать форму за курсором когда нажата левая кнопка мышки. Это способ можно найти в Интернете задав запрос "перемещение формы за курсором" Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 сентября, 2011 Поделиться Опубликовано 30 сентября, 2011 Пример, который я предложил Дарк Байту.function FormMouseDown(sender, button, x, y) ReleaseCapture() // новая функция frmHandle = wincontrol_getHandle(UDF1) // новая функция if frmHandle==nil then return WM_SYSCOMMAND = 274 SendMessageA(frmHandle,WM_SYSCOMMAND,0xF012,0) // новая функция endНадеюсь он введёт поддержку. Ну а до тех пор, проще всего сделать движение формы за мышкой по текущим и новым её координатм обрабатывая события удерживания и отпуска.--------Я всё-таки решил тебе чуть помочь, потому что понял, что по первому способу у тебя трудности. Тем не менее тебе ещё предстоит написать dx и dy работу для того чтобы курсор мышки был там где он должен быть а не в левом верхнем углу при перетаскивании.На форме UDF1 есть картинка. Когда на картинку нажали или был клик, то ставим булевы переменные. Таймер работает по логике этих переменных. В данном коде курсор всегда будет в верхнем левом углу и только при клике на картинку. Остальное предоставляю тебе доработать самому.form_show(UDF1)isMouseDown = false;isMouseUp = false;--dx = 0--dy = 0function OnTimerDrag() if isMouseDown then mx,my = getMousePos() --dx = dx - mx --dy = dy - my --x, y = control_getPosition(UDF1) control_setPosition(UDF1, mx, my) endendtimer1 = createTimer(UDF1)timer_setInterval(timer1, 50)timer_onTimer(timer1, OnTimerDrag)function CEImage1MouseDown(sender, button, x, y) isMouseDown = true isMouseUp = falseendfunction FormClick(sender) isMouseDown = false isMouseUp = trueendНу и на всякий случай, таблица в формате .CT. DragWindow.rarОткроешь таблицу. Согласишься запустить Lua -скрипт.Удерживаем левую кнопку мышки на картинке и тянем куда-нибудь и видим перемещение. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 30 сентября, 2011 Автор Поделиться Опубликовано 30 сентября, 2011 Спасибо.Вот что Dark Byte написал Цитата use control_setPosition to set the position or temporarily set borderstyle back to normalЧто за control_setPosition ? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 октября, 2011 Поделиться Опубликовано 1 октября, 2011 control_setPosition() - устанавливает позицию объекта TControl или объекта, который наследует класс TControl.Файл примера:DragWindow.rarСтатья:Перетаскиваемая форма на Lua.rarКод из статьи: Показать контент dragTimer = nilfunction OnTimerDrag() mx,my = getMousePos() control_setPosition(UDF1, mx+dx, my+dy)endfunction CEImage1MouseDown(sender, button, x, y) if dragTimer == nil then dragTimer = createTimer(UDF1, false) timer_setInterval(dragTimer, 10) timer_onTimer(dragTimer, OnTimerDrag) mx,my = getMousePos() x, y = control_getPosition(UDF1) dx = x - mx dy = y - my timer_setEnabled(dragTimer, true) return end if not timer_getEnabled(dragTimer) then mx,my = getMousePos() x, y = control_getPosition(UDF1) dx = x - mx dy = y - my timer_setEnabled(dragTimer, true) endendfunction CEImage1Click(sender) if dragTimer == nil then return end if timer_getEnabled(dragTimer) then timer_setEnabled(dragTimer, false) object_destroy(dragTimer) dragTimer = nil endendfunction CEButtonExitClick(sender) closeCE() return caFreeendform_show(UDF1)Пока не могу выделить время на публикацию статьи на главном сайте. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 2 октября, 2011 Поделиться Опубликовано 2 октября, 2011 Цитата Мелочь, но все же, имхо, некрасиво эмулировать HTCAPTION, когда заголовка в окне не видно.Указанный мной метод применяется во всех программах, в которых отсутсвует заголовок. К тому же, сообщение WM_NCLBUTTONDOWN предназначено как раз для обработки нажатия мыши на окне без заголовка. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 октября, 2011 Поделиться Опубликовано 2 октября, 2011 В 02.10.2011 в 09:59, Xipho сказал: К тому же, сообщение WM_NCLBUTTONDOWN предназначено как раз для обработки нажатия мыши на окне без заголовка.Такого предназначения в MSDN не указано. И вообще формулировки о том, что это сообщение предназначено для чего-то нет. Есть описание в связи с чем это сообщение появляется. И появляется по клику по не рабочей клиентской области и это не только заголовок. Никакой речи не может быть чтобы рекомендовалось или только использовалось WM_NCLBUTTONDOWN с HTCAPTION. Есть только одна рекомендация, где-то я её видел. Использовать только документированные функции и константы. В примере который я привёл одна из "переменных" не документирована в winuser.h. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dison Опубликовано 10 июля, 2014 Поделиться Опубликовано 10 июля, 2014 Почему выдает ошибку Er.: File Music is not found! Что я не правильно делаюmusicName = 'Music.xm' XMFILE=findTableFile(musicName) if (XMFILE==nil) then print('Er.: File '..musicName..' is not found!') setProperty(CEButton1, "Caption", "Er.") else xmplayer_playXM(XMFILE) setProperty(CEButton1, "Caption", "Music On") endfunction CEButton1Click(sender) if xmplayer_isPlaying() then xmplayer_pause() setProperty(CEButton1, "Caption", "Music Off") else xmplayer_resume() setProperty(CEButton1, "Caption", "Music On") endend В 10.07.2014 в 13:13, Dison сказал: Почему выдает ошибку Error:attempt to call a nil value Что я не правильно делаюmusicName = 'Music.xm' XMFILE=findTableFile(musicName) if (XMFILE==nil) then print('Er.: File '..musicName..' is not found!') setProperty(CEButton1, "Caption", "Er.") else xmplayer_playXM(XMFILE) setProperty(CEButton1, "Caption", "Music On") endfunction CEButton1Click(sender) if xmplayer_isPlaying() then xmplayer_pause() setProperty(CEButton1, "Caption", "Music Off") else xmplayer_resume() setProperty(CEButton1, "Caption", "Music On") endend Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения