![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Несколько вопросов по WinApi программированию... [D5, Win95/98, WinXP]
TankMan © (2004-07-30 23:40:00)Я решил опять воссазоздать свою мелкую прожку на WinApi :), написанную мной, но ужастно давно :), после смерти винта ничего вспомнить не могу :)... вот сейчас начал свое "воссоздание" и улучшение :), и у меня появилось несколько вопросов, на которые я так и не нашел ответов в яндексе :)...да и на этом форуме впринципе тоже...:(
Вобщем искал искал, но не нашел, вопросов у меня несколько:
1. Хотелось бы поменять бекграунд, шрифт и цвет шрифта у edit-а.
2. Необходимо наложить bitmap на кнопку.
3. Также необходимо знать, когда мыша наводится на какой либо компонент, т.е. аналог mouseleave/enter...
Едит я создаю просто:CreateWindowEx(0,'edit', 'Пока', WS_CHILD+WS_VISIBLE,150,20,120,25,WndHandle,0,hinstance,nil);
А кнопку еще проще :) :CreateWindowEx(0,'button', 'Пока', WS_CHILD+WS_VISIBLE,150,70,120,25,WndHandle,0,hinstance,nil);
Вот вобщем то и все что я хотел узнать...
nikkie (2004-08-08 02:57:00) [1]>В Delphi сделано так.
сделано как? не мешало бы заглянуть в исходники, прежде, чем делать такие заявления.
GrayFace (2004-08-05 12:27:00) [2]nikkie © (31.07.04 19:08) [2]
> при реализации, как предложено в [1], глюк обеспечен...
> можешь посмотреть как MouseEnter/MouseLeave реализован в VCL
В Delphi сделано так.
> но вот что делать с рамкой... :)
WS_EX_CLIENTEDGE
TankMan (2004-08-01 00:31:00) [3]АА...й заработало все нормально, просто
Я вообще делал так с WM_CTLCOLOREDIT
WM_CTLCOLOREDIT:
begin
SetBkMode(Wparam,TRANSPARENT);
SetBkColor(Wparam,RGB(0,$FF,100));
SetTextColor(wparam,rgb(0,0,255));
Result:=bkgColorEdit;
end;
а bkgColorEdit это кисть, которая создавалась в WM_Create, но дело в том что переменная была описана у меня в моем WndProc и поэтому все решилось переносом декларации bkgColorEdit на глобальный "уровень" :)... но вот что делать с рамкой... :)
TankMan (2004-08-01 00:15:00) [4]...эх...Попробовал я...
Вобщем WM_ErraseBkgnd..мне не понятен, я им ниразу не пользовался, а вот WM_SETFONT нормально работает - спасибо.
На счет WM_CTLCOLOREDIT - я просто замучался но ничего так и не добился от него :)...
WM_CTLCOLOREDIT:
begin
SetBkMode(Wparam,TRANSPARENT);
SetBkColor(Wparam,RGB(0,$FF,100));
Result:=CreateSolidBrush(RGB($0,$FF,000));
end;
Как я понял из описания этого сообщения, я должен возвращать кисть, которой буду красить,но... никакого результата :(...
а вот WM_CTLCOLORSTATIC я смог использовать нормально для label-ов...
На счет 2го еще не смотрел... мучаюсь с Edit-ом :)
А кстати, хотел спросить, как сделать эдиту нормальный 3d бордер, а то WS_BORDER дает только лишь рамочку маленькую :(
TankMan (2004-07-31 19:23:00) [5]ОО я уж думал что не найдется человека, кто хоть чего-нибудь ответит... :) ...все на счет 1го и 2го я еще попробую, а вот на счет 3го я хотел уточнить задачу для которой мне нужно знать когда и над каким компонентом находится мышь - хотелось бы при наведение например на кнопку (не нажимая), менять картинку на другую :) вот и все, что мне нужно :)...
nikkie (2004-07-31 19:08:00) [6]1. для установки цвета ловить WM_CTLCOLOREDIT, WM_CTLCOLORSTATIC
2. установить BS_OWNERDRAW и ловить WM_DRAWITEM
3. при реализации, как предложено в [1], глюк обеспечен - не будет срабатывать MouseLeave, когда контроль расположен близко к краю окна. есть вариант использовать SetCapture, но не знаю насколько этобудет хорошо в твоей ситуации. можешь посмотреть как MouseEnter/MouseLeave реализован в VCL.
GrayFace (2004-07-31 18:00:00) [7]1. Обрабатывать WM_ErraseBkgnd. Слать WM_SETFONT.
2. Обрабатывать WM_Paint и WM_NCPaint.
3. Если WM_MouseMove посылается другому контролу - у него MouseEnter, а у этого - MouseLeave.