![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не очищается окно при вводе текста [D7, WinXP]
Aleksandr © (2003-05-13 15:43:00)У меня в апишном окошке выводится текст (довольно быстро меняющийся). Вывод его осуществляется следующим образом:
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 17:31:00) [1]Гм... вообще круто. Сделал вместо SendMessage PostMessage этому окну, несколько секунд она рисовала все красиво и качественно... После чего выдала длинный ряд эксепшнов и отвалила....
Aleksandr (2003-05-13 17:23:00) [2]установка в false тоже не дает эффекта.
Aleksandr (2003-05-13 17:06:00) [3]Кстати, SetBkColor тоже не помогает... До него истчо как-то зачищалась, а с ним вообще все накладывается :(
clickmaker (2003-05-13 17:02:00) [4]что-то из того кода автоматом вызывает WM_Paint...
SetWindowRgn(WaitFormHandle,rgn, true);
Может сменить на false, а то похоже это флажок вызывает перерисовку окна после применения региона
Aleksandr (2003-05-13 16:41:00) [5]Знаете, я так и начал сперва. Но она почему-то заклинилась - что-то из того кода автоматом вызывает WM_Paint...
clickmaker (2003-05-13 16:30:00) [6]> Aleksandr © (13.05.03 16:11)
Ну, возвращают они true. А описания по SetWindowRgn у меня ни в одном хелпе нет :(
Да ты чё! В win32 SDK reference нет?
Вот здесь точно есть: http://www.msdn.microsoft.com/library/default.asp
А может всет-ки весь этот код выложить в WM_PAINT, а в ответ на WM_SetUserText говорить RedrawWindow ?
MBo (2003-05-13 16:28:00) [7]другой цвет подложи, например, COLOR_btnface
Aleksandr (2003-05-13 16:25:00) [8]Попробовал
SetBkColor(DC, COLOR_BTNText);
Рисует просто черный прямоугольник по размеру текста :(
Aleksandr (2003-05-13 16:11:00) [9]Ну, возвращают они true. А описания по SetWindowRgn у меня ни в одном хелпе нет :(
clickmaker (2003-05-13 16:10:00) [10]SetBkColor(DC, COLOR_BTNText);
DrawText(...
MBo (2003-05-13 16:08:00) [11]подозреваю, что эти строки:
FillRgn(DC,rgn,COLOR_BTNText+1);
FrameRgn(DC,rgn,COLOR_BTNTEXT+1,300,70);
не срабатывают из за недействительности региона - прочитай примечание в хелпе по SetWindowRgn
Aleksandr (2003-05-13 16:05:00) [12]Ну я думаю, что да, потому как черный текст на белом фоне все же рисуется...
MBo (2003-05-13 15:54:00) [13]после SetWindowRgn строки, работающие с регионом, срабатывают???
Aleksandr (2003-05-13 15:46:00) [14]Кстати, прямоугольник заполняю вручную, потому что при заполнении его таким вот образом:
GetRgnBox(Rgn,R)
текст вообще непонятно куда рисовался (а бывало, и не рисовался).