Перейти к содержанию

Полупрозрачный Фон Формы.


Рекомендуемые сообщения

Привет всем!

Есть ли возможность создать трейнер с полупрозрачным окном?

Убрать полностью рамку, заголовок, оставить толькосамо содержимое.

Вобще есть. На чем пишешь?

Ссылка на комментарий
Поделиться на другие сайты

Сорри. забыл указать, что нужно на трейнер СЕ в том то и дело.

На счет формы, в свойствах самой формы, пункт BorderStyle --> bsNone окно станет без рамки, на счет прозрачности пункт AlphaBlend -- > True и AlphaBlendValue --> 150, а вобще по факту лучше написать свою оболочку на С# или С++ и радоватся жизни.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, тоже нашел эти стили. И эта прозрачность действует сразу на всю форму, можно ли у отдельных элементов менять это свойство?

-----------------------------------------------------------------

Оболочку не вопрос, но как её прикрутить к СЕ?

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, тоже нашел эти стили. И эта прозрачность действует сразу на всю форму, можно ли у отдельных элементов менять это свойство?

-----------------------------------------------------------------

Оболочку не вопрос, но как её прикрутить к СЕ?

На счет отдельных элементов не вкурсе. Про оболочку я имел ввиду написать трейнер с 0 не используя конструктор СЕ, вот в этой теме я скидывал шаблон на патч байтов из СЕ на С++

Ссылка на комментарий
Поделиться на другие сайты

Мне через СЕ легче реализовать, тк на С++ функции сешные нужно выдумывать, в частности дебаггинг сделал, но недоработал, чтобы по таймеру шло, а СЕшный луа вроде знаю.

Ссылка на комментарий
Поделиться на другие сайты

Чтобы в CE сделать прозрачную форму, то без гемора не получится - нужно

1) Бросить на форму картинку, на которой не видимый фон будет белым цветом. У картинки поставить свойство Транспарент в true

2) Форме отправить сообщения


SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(Handle,clWhite,255,LWA_COLORKEY);

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

В противном случае форму с прозрачными областями на CE не сделать - увы (это вопрос к разработчикам Lazarus или Дарк Байту). На Lazarus-e на котором собран CE увы простыми средствами не сделать прозрачные области кроме как через Win-API. Я пришёл к этому выводу давно, когда разбирался с этим вопросом. Но потом я отказался от прозрачных областей по другим причинам и на асм не переписывал.

Так что берёшь среду разработки (любую)... пишешь код на Win-API, ставишь бряк на SetWindowLong, подсматриваешь дизасм-код, копируешь. Добавлешь код поиска дескриптора формы, если надо. Ну и применяешь этот код в как исполняемую инъекцию кода, котоаря делает белый цвет на окне трейнера прозрачным.

Ещё можешь поискать готовое решение на официальном форуме CE - мало ли уже есть готовое решение.

Ссылка на комментарий
Поделиться на другие сайты

В инициализации достаточно сделать так:

invoke  SetLayeredWindowAttributes,hWnd,0,180,LWA_ALPHA

Подробнее - в [MSDN].

Т.е.:

push 0x2	//LWA_ALPHA
push 0xB4 //180 из 255
push 0 //COLORREF = 0
push hWnd //Хэндл окна
call SetLayeredWindowAttributes

Перед этим можно дёрнуть нужную функцию из User32.dll:


push 'user32.dll'
call LoadLibrary

И затем - нужную функцию:


push 'setlayeredwindowattributes'
push eax
call GetProcAddress

Итого:


push hWnd
pop ebx //Запихиваем хэндл окна в ebx, т.к. этот регистр не используется WinAPI-функциями


push 'user32.dll'
call LoadLibrary //Подгружаем нужную dll


push 'setlayeredwindowattributes'
push eax //В eax - хэндл подгруженной user32.lib*
call GetProcAddress //Получаем адрес SetLayeredWindowAttributes



push 0x2 //LWA_ALPHA
push 0xB4 //180 из 255
push 0 //COLORREF = 0
push ebx //Хэндл окна
call eax //Вызываем найденную функцию


* Если функция не найдётся - возвратит 0 в eax и всё накроется тазиком, так что тут надо быть аккуратнее.

Вот, типа того. Возможно, ещё надо что-то нахимичить в RC-файле диалога, но я точно не помню. Опять же, проще через отладчик проверить, грузит ли трейнер себе user32.dll (наверняка грузит).

PS: Да, можно или в RC выставить, или через SetWindowLong.

PPS: Я не знаю, сработает ли это с любым элементом окна, т.к. все элементы по сути - окна разного типа, так что поиграться можно, передавая разные хэндлы.

Проще, имхо, на C# своих контролов набросать.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо, ребята за подробные раз"яснения. Но я так понимаю тут если и вытяну прозрачность, то она будет на статичную облась окна, а если элемент (кнопка)

будет постоянно в движении ?

Ссылка на комментарий
Поделиться на другие сайты

Я тут нагуглил, что кнопку можно сделать и вручную (это ведь тоже окно):

CreateWindow(L"BUTTON", L"hello", WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, 100, 100, 100, 100, h, 0, hInst, 0);

При этом советуют поиграться со стилем WS_EX_TRANSPARENT, а совсем уж извращенцы создают null-brush и рисуют:

SetBkMode(HDC, TRANSPARENT)

Предварительно указав кнопку в качестве области рисования. Ящитаю, что такие вещи лучше по-возможности делать на более HLL, вроде плюсов\шарпа\дельфи, но попытаться можно, конечно. Сам я пошёл чуток другим путём - у меня вообще нет кнопок - есть области, клик по которым эти самые кнопки символизирует. Т.е. изначально в качестве фона висит полупрозрачная картинка, на которой нарисована кнопка. Кликаешь в области этой кнопки - область рисуется другим цветом (выделяется) и происходит нужное действие. Всё это висит на обработке WM_LBUTTONDOWN и расчёте координат курсора из wParam и lParam. Не то, чтобы дофига удобно, но я привык.

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

Ссылка на комментарий
Поделиться на другие сайты

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

то кнопку я в пример написал. а так,я хочу создать мини-карту для игры, на ней в режиме реального времени будут перемиещаться враги и союзники. Вот они будут как раз непрозрачными, а остальную форум хочу сделать 50% прозрачности, чтобы играть было удобнее.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.