![]() |
eXeL@B —› Вопросы новичков —› Про программирование на асме |
Посл.ответ | Сообщение |
|
Создано: 04 декабря 2006 01:08 · Личное сообщение · #1 Привет всем! У меня вопрос по программированию на асме. Может стоило его запостить в подфорум "Программирование", но я постеснялся. Он, скорее всего, ламерский. Вопрос такой как создать в окне кнопку черного цвета с белым текстом? Я с этим вопросом обошел почти весь интернет, начиная от WASM`а и заканчивая AsmCommunity. Мне везде советовали очень много, но либо не в тему, либо что-то непонятное. Ковырялся в исходниках на том же WASM`е, в частности "XXControls" (это оказалось для диалогового окна), Iczelion`овские "Buttons" (более похоже на то что мне надо, но очень перегружено информацией и я не понял ничего ![]() Вопрос скорее к тем, кто кодит патчи и кейгены. С моей стороны может быть это нахальство просить таких разъяснений, но я все же надеюсь, что кто-нибудь не посчитает за труд и расскажет как это сделать. Прикрепляю свои потуги. Там я пытался изменить цвет кнопки через WM_CTLCOLORBTN, как мне советовали на WASM`е. ![]() ![]() |
|
Создано: 04 декабря 2006 02:19 · Личное сообщение · #2 |
|
Создано: 04 декабря 2006 02:29 · Личное сообщение · #3 |
|
Создано: 04 декабря 2006 11:25 · Личное сообщение · #4 Sturgeon Отвечу на твой вопрос, почему не работает это сообщение WM_CTLCOLORBTN и заодно в каком направлении копать BS_OWNERDRAW и WM_DRAWITEM. Нужно установить этот стиль (пример ниже) и то, что ты возвращаешь в eax, будет работать, как надо, но тебя будет ждать сюрприз! INVOKE CreateWindowEx,WS_EX_LEFT,ADDR ClassButName,ADDR ButtonText, WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or WS_CLIPCHILDREN or BS_OWNERDRAW, 250,100,180,50,hWnd, NULL, hInstance, NULL mov hButton,eax и еще обязательно установи ret после: mov eax, hbrBtnBrush ret объяснять, почему не буду. PE_Kill пишет: Руками рисовать надо, много кода. Как альтернатива можно юзать обычный батон с натянутой картинкой, но тогда при обнавлении будет беспантова мигать. На ASM никогда кода много не бывает в отличии от ЯВУ, мерцание убирается легко при помощи WM_PRINT, регионов и т. д. ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 04 декабря 2006 21:43 · Личное сообщение · #5 |
|
Создано: 06 декабря 2006 15:34 · Поправил: Sturgeon · Личное сообщение · #6 Извините, что на три дня забросил тему. Запарки на работе. Так, стиль добавил, убрал стиль BS_PUSHLIKE, потому как "Buttons with these styles are always drawn with the default system colors.(с)". Добавил ret. ret для того, чтобы еах не изменялся до выхода из функции. Правильно? И все равно результат ноль... из-за сюрприза, наверное... Вместо кнопки просто черный прямоугольник. Про "нормальный темплэйт" я пока даже и не заикаюсь. Demon666, если там не очень много править, не мог бы ты обработать напильником мой "исходник"? ![]() |
|
Создано: 12 декабря 2006 07:07 · Личное сообщение · #7 Sturgeon пишет: если там не очень много править, не мог бы ты обработать напильником мой "исходник"? Sturgeon пишет: С моей стороны может быть это нахальство просить Угу! Demon666 пишет: заодно в каком направлении копать BS_OWNERDRAW и WM_DRAWITEM. canterwood.online.fr архив BlazeDVD_v3.5_Pro.keygen.incl.source-CW.zip (keygen.asm) код оттуда: .IF uMsg == WM_DRAWITEM push esi mov esi, lParam assume esi:ptr DRAWITEMSTRUCT ; change the control background color if pushed .IF [esi].itemState & ODS_SELECTED INVOKE SelectObject, [esi].hdc, hBgColor INVOKE SetTextColor, [esi].hdc, CR_TEXT .ELSEIF [esi].itemState & ODS_DISABLED INVOKE SelectObject, [esi].hdc, hMiddleColor INVOKE SetTextColor, [esi].hdc, CR_TEXT .ELSE INVOKE SelectObject, [esi].hdc, hInbgColor INVOKE SetTextColor, [esi].hdc, CR_INTEXT .ENDIF INVOKE SelectObject, [esi].hdc, hEdge INVOKE FillRect, [esi].hdc, ADDR [esi].rcItem, hBgColor INVOKE Rectangle, [esi].hdc, [esi].rcItem.left, [esi].rcItem.top, [esi].rcItem.right, [esi].rcItem.bottom .IF [esi].itemState & ODS_SELECTED INVOKE OffsetRect, ADDR [esi].rcItem, 1, 1 .ENDIF ; write the text INVOKE GetDlgItemText, hWnd, [esi].CtlID, ADDR sBtnText, SIZEOF sBtnText INVOKE SetBkMode, [esi].hdc, TRANSPARENT INVOKE DrawText, [esi].hdc, ADDR sBtnText, -1, ADDR [esi].rcItem, DT_CENTER or DT_VCENTER or DT_SINGLELINE .IF [esi].itemState & ODS_SELECTED INVOKE OffsetRect, ADDR [esi].rcItem, -1, -1 .ENDIF ; change the position of the text .IF [esi].itemState & ODS_FOCUS INVOKE InflateRect, ADDR [esi].rcItem, -4, -4 INVOKE DrawFocusRect, [esi].hdc, ADDR [esi].rcItem .ENDIF assume esi:nothing pop esi … не забудь присвоить в ресурсах кнопке стиль BS_OWNERDRAW настраиваем цвет и т. д.: .ELSEIF uMsg == WM_INITDIALOG INVOKE LoadIcon, hInstance, IDI_KEYGEN INVOKE SendMessage, hWnd, WM_SETICON, ICON_BIG, eax INVOKE CreateSolidBrush, CR_BG mov hBgColor, eax INVOKE CreateSolidBrush, CR_MIDDLE mov hMiddleColor, eax INVOKE CreateSolidBrush, CR_INBG mov hInbgColor, eax INVOKE CreatePen, PS_INSIDEFRAME, 1, CR_TEXT mov hEdge, eax … P. S. Качай архивы там внутри исходники на ASM, думаю, поможет тебе разобраться во всем, там их много и в тем… Ну, если опять напишешь что там чего-то нет, то тогда юзай Delphi, легче жить будет!!! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Про программирование на асме |