Вниз
Скачать: CL | DM;

Не очищается окно при вводе текста   Найти похожие ветки 

← →
Aleksandr ©   (2003-05-13 15:43) [0]

У меня в апишном окошке выводится текст (довольно быстро меняющийся). Вывод его осуществляется следующим образом:

function WindowProc(wnd:HWND; Msg : Integer; Wparam:Wparam; Lparam:Lparam) : Lresult; stdcall;
var
R : TRect;
DC : HDC;
rgn : HRGN;
begin
case msg of
wm_SetUserText : begin
Result:=0;
R.Left:=0;
R.Top:=10;
R.Right:=300;
R.Bottom:=70;
DC:=GetDC(WaitFormHandle);
rgn:=CreateRoundRectRgn(0,0,300,70,15,15);
SetWindowRgn(WaitFormHandle,rgn,true);
FillRgn(DC,rgn,COLOR_BTNText+1);
FrameRgn(DC,rgn,COLOR_BTNTEXT+1,300,70);
DrawText(DC,PChar(WParam),Length(String(WParam)),R,dt_Center+dt_VCenter)
end;

То есть при вводе новой надписи остаются следы предыдущей. Вроде делаю заполнение фоном... Что тут не так?


← →
Aleksandr ©   (2003-05-13 15:46) [1]

Кстати, прямоугольник заполняю вручную, потому что при заполнении его таким вот образом:
GetRgnBox(Rgn,R)
текст вообще непонятно куда рисовался (а бывало, и не рисовался).


← →
MBo ©   (2003-05-13 15:54) [2]

после SetWindowRgn строки, работающие с регионом, срабатывают???


← →
Aleksandr ©   (2003-05-13 16:05) [3]

Ну я думаю, что да, потому как черный текст на белом фоне все же рисуется...


← →
MBo ©   (2003-05-13 16:08) [4]

подозреваю, что эти строки:
FillRgn(DC,rgn,COLOR_BTNText+1);
FrameRgn(DC,rgn,COLOR_BTNTEXT+1,300,70);

не срабатывают из за недействительности региона - прочитай примечание в хелпе по SetWindowRgn


← →
clickmaker ©   (2003-05-13 16:10) [5]

SetBkColor(DC, COLOR_BTNText);
DrawText(...


← →
Aleksandr ©   (2003-05-13 16:11) [6]

Ну, возвращают они true. А описания по SetWindowRgn у меня ни в одном хелпе нет :(


← →
Aleksandr ©   (2003-05-13 16:25) [7]

Попробовал
SetBkColor(DC, COLOR_BTNText);
Рисует просто черный прямоугольник по размеру текста :(


← →
MBo ©   (2003-05-13 16:28) [8]

другой цвет подложи, например, COLOR_btnface


← →
clickmaker ©   (2003-05-13 16:30) [9]

> Aleksandr © (13.05.03 16:11)
Ну, возвращают они true. А описания по SetWindowRgn у меня ни в одном хелпе нет :(

Да ты чё! В win32 SDK reference нет?

Вот здесь точно есть: http://www.msdn.microsoft.com/library/default.asp

А может всет-ки весь этот код выложить в WM_PAINT, а в ответ на WM_SetUserText говорить RedrawWindow ?


← →
Aleksandr ©   (2003-05-13 16:41) [10]

Знаете, я так и начал сперва. Но она почему-то заклинилась - что-то из того кода автоматом вызывает WM_Paint...


← →
clickmaker ©   (2003-05-13 17:02) [11]

что-то из того кода автоматом вызывает WM_Paint...

SetWindowRgn(WaitFormHandle,rgn, true);

Может сменить на false, а то похоже это флажок вызывает перерисовку окна после применения региона


← →
Aleksandr ©   (2003-05-13 17:06) [12]

Кстати, SetBkColor тоже не помогает... До него истчо как-то зачищалась, а с ним вообще все накладывается :(


← →
Aleksandr ©   (2003-05-13 17:23) [13]

установка в false тоже не дает эффекта.


← →
Aleksandr ©   (2003-05-13 17:31) [14]

Гм... вообще круто. Сделал вместо SendMessage PostMessage этому окну, несколько секунд она рисовала все красиво и качественно... После чего выдала длинный ряд эксепшнов и отвалила....



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.014 c
1-44659
Tornado
2003-07-02 13:46
2003.07.14
SELF


8-44767
JC
2003-03-22 01:38
2003.07.14
Engine


4-44945
Aleksandr
2003-05-13 15:43
2003.07.14
Не очищается окно при вводе текста


1-44633
killer
2003-07-02 00:03
2003.07.14
Как фотку перевести в строку?


3-44570
DevMaster
2003-06-20 12:09
2003.07.14
dxMasterView




   Наверх