Сейчас на форуме: hgdagon (+5 невидимых)

 eXeL@B —› Программирование —› WM_SETFONT в API прилогах
Посл.ответ Сообщение


Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 25 июля 2007 01:34
· Личное сообщение · #1

вообщем проблема такая:
создаю STATIC, ect через CreateWindowEx
котторый выглядит как GroupBox, и потом
пытаюсь послать по handle полученной компаненты
WM_SETFONT, с созданным заранее шрифтом через CreateFont
Но при запуске получается что программа иногда корректно всё прорисовывает
а иногда запинается на первом компаненте которому я посылаю это сообщение,
и как мне обойти это ГГГГ.
Самое обидное что программа уже дописанан только эта радость не даёт спокойно жить




Ранг: 104.9 (ветеран), 47thx
Активность: 0.040.02
Статус: Участник

Создано: 25 июля 2007 10:13
· Личное сообщение · #2

ты лучше код покажи как ты реализуешь
создаю STATIC, ect через CreateWindowEx
котторый выглядит как GroupBox, и потом
пытаюсь послать по handle полученной компаненты
WM_SETFONT, с созданным заранее шрифтом через CreateFont





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 25 июля 2007 10:26
· Личное сообщение · #3

SelectObject

-----
invoke OpenFire





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 25 июля 2007 11:36
· Личное сообщение · #4

через RegisterClassEx создаю окно
через CreateWindowEx компаненты

var info:hwnd

info:=CreateWindowEx
(0,'BUTTON',info',
WS_CHILD or BS_GROUPBOX,
2,1,341,99,MainWnd,86,
Hinstance,nil
);ShowWindow(info,CmdShow);
sendmessage(info,WM_SETFONT,font,1);

вот так




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 25 июля 2007 11:39
· Личное сообщение · #5

Ice-T, что за SelectObject,
как я понял это тоже процедура установки
фонта, только hwnd это hdc
font-hglob..., да?




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 25 июля 2007 13:02
· Личное сообщение · #6






Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 25 июля 2007 23:18
· Личное сообщение · #7

народ посоветуйте ещё что-нибудь пожалуйста



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 26 июля 2007 00:37 · Поправил: v0id2k
· Личное сообщение · #8

Как я понял переменная info это кнопка.

Делай так:

var
info: Integer;
font: Integer;
...
begin
...
// создаем кнопку
info := CreateWindow('Button', 'info', WS_VISIBLE or WS_CHILD or BS_PUSHLIKE or BS_TEXT or BS_FLAT, 2, 1, 341, 99, MainWnd, 86, Hinstance, nil);
...
// создаем шрифт
font := CreateFont(-11, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, LIP_DEFAULT_PRECIS, EFAULT_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');
...
// теперь присваиваем шрифт всему тому, что насоздовале
if font <> 0 then
begin
...
SendMessage(info, WM_SETFONT, font, 0);
...
end;


Что не понятно, пиши.

-----
xchg dword [eax], eax





Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 26 июля 2007 00:38 · Поправил: Executioner
· Личное сообщение · #9

Это должно выглядеть примерно так:
hFont:=CreateFontIndirect(pFont);
hDc:=GetDc(info);
ret:=SelectObject(hDc,hFont);
ret:=ReleaseDC(info,hDc);


-----
Уважайте других и пишите грамотно.





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 03 августа 2007 16:30
· Личное сообщение · #10

щас попробую о результатах обязательно отпишу




Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 05 августа 2007 07:52
· Личное сообщение · #11

v0id2k, у меня вообще-то всё так
и было сделано, только что через
CreateWindowEx.

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




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 05 августа 2007 14:57
· Личное сообщение · #12

Почему у меня работает, а у тебя - нет?
Попробуй CreateCompatibleDC сделать и закрыть хэндл старого контекста.
P.S.
Не стоит ли у тебя какой-нить Brico Pack или что-то в этом духе? А то у меня была подобная проблема. Грохнул упаковку, поставил нормальный скин, и все заработало.


-----
Уважайте других и пишите грамотно.





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 05 августа 2007 15:36
· Личное сообщение · #13

NicknamES к слову т.с... когда что-то не получаецца, надо пробовать на пустом приложении тоже самое ;) если в нем вдруг получиццо, то... что тогда? =)

-----
invoke OpenFire




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 05 августа 2007 17:30
· Личное сообщение · #14

NicknamES
Если ты все пишешь так как у меня в примере, то у тебя никакой запарки не должно быть.
ЗЫ: приаттачь полную процедуру создания окна и компонентов на нем(кнопки, лэйбля, etc)

-----
xchg dword [eax], eax





Ранг: 251.8 (наставник), 17thx
Активность: 0.120
Статус: Участник
Seeker

Создано: 05 августа 2007 18:18
· Личное сообщение · #15

v0id2k
Там ошибки в параметрах, поправь

-----
DREAMS CALL US




Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 05 августа 2007 18:27
· Личное сообщение · #16

=TS=
Блин, точно ведь ошибка была, щас поправил.

-----
xchg dword [eax], eax





Ранг: 81.2 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 10 августа 2007 01:12
· Личное сообщение · #17

вообщем я проблему решил посмотрев функцию SetFont в
Api Component Library.
там было так:

font:=CreateFontIndirect(fstruct);
...
sendmessage(info,WM_SETFONT,Wparam(font),MAKELPARAM(Word(TRUE),0));

в конце концов проблема решена.

большое всем спасибо!!!


 eXeL@B —› Программирование —› WM_SETFONT в API прилогах
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати