Сейчас на форуме: _MBK_, ut2004, vsv1 (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Про программирование на асме
Посл.ответ Сообщение

Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 04 декабря 2006 01:08
· Личное сообщение · #1

Привет всем!
У меня вопрос по программированию на асме. Может стоило его запостить в подфорум "Программирование", но я постеснялся. Он, скорее всего, ламерский.
Вопрос такой как создать в окне кнопку черного цвета с белым текстом?
Я с этим вопросом обошел почти весь интернет, начиная от WASM`а и заканчивая AsmCommunity. Мне везде советовали очень много, но либо не в тему, либо что-то непонятное. Ковырялся в исходниках на том же WASM`е, в частности "XXControls" (это оказалось для диалогового окна), Iczelion`овские "Buttons" (более похоже на то что мне надо, но очень перегружено информацией и я не понял ничего)
Вопрос скорее к тем, кто кодит патчи и кейгены. С моей стороны может быть это нахальство просить таких разъяснений, но я все же надеюсь, что кто-нибудь не посчитает за труд и расскажет как это сделать.
Прикрепляю свои потуги. Там я пытался изменить цвет кнопки через WM_CTLCOLORBTN, как мне советовали на WASM`е.

fe12_04.12.2006_CRACKLAB.rU.tgz - win.rar




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 декабря 2006 02:19
· Личное сообщение · #2

Руками рисовать надо, много кода. Как альтернатива можно юзать обычный батон с натянутой картинкой, но тогда при обнавлении будет беспантова мигать.

-----
Yann Tiersen best and do not fuck




Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 04 декабря 2006 02:29
· Личное сообщение · #3

В принципе я решил пользовать BmpButton, как в примерах к MASM`у. Но просто на том же ВАСМе вроде все так просто расписали, а толку ноль.
А со "static text" тоже много геморроя? Или с ним можно проделать такую штуку? Через WM_CTLCOLORSTATIC?



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 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





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 04 декабря 2006 21:43
· Личное сообщение · #5

Demon666 пишет:
На ASM никогда кода много не бывает в отличии от ЯВУ

Ну ну, хотел бы я посмотреть на нормальный темплэйт без "много" кода

-----
Yann Tiersen best and do not fuck




Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 06 декабря 2006 15:34 · Поправил: Sturgeon
· Личное сообщение · #6

Извините, что на три дня забросил тему. Запарки на работе.
Так, стиль добавил, убрал стиль BS_PUSHLIKE, потому как "Buttons with these styles are always drawn with the default system colors.(с)". Добавил ret. ret для того, чтобы еах не изменялся до выхода из функции. Правильно?
И все равно результат ноль... из-за сюрприза, наверное... Вместо кнопки просто черный прямоугольник.
Про "нормальный темплэйт" я пока даже и не заикаюсь.
Demon666, если там не очень много править, не мог бы ты обработать напильником мой "исходник"?



Ранг: 213.5 (наставник)
Активность: 0.120
Статус: Участник
забанен

Создано: 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 —› Вопросы новичков —› Про программирование на асме
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати