-
Как узнать положение рабочей части окна на экране?
GetWindowRect возвращает положение всего окна, с загаловком, а он бывает разной высоты...
-
GetClientRect
-
GetClientRect вернет размеры рабочей части, но не её положение на экране.
-
> demon (23.11.2008 22:04:02) [2]
Тебе что абсолютные координаты нужны, тогда ClientToScreen
-
То что нужно, спасибо
-
К сожалению ClientToScreen плохо работает с SetCapture/ReleaseCapture.
-
> К сожалению ClientToScreen плохо работает с SetCapture/ReleaseCapture.
это как?
-
Ну, когда ставлю SetCapture при нажатии клавиши мыши, то ClientToScreen возвращиет слишком большие координаты (по х больше нескольки тысяч), незнаю почему.
Но все исправил: вызываю ClientToScreen раньше чем SetCapture.
-
> Ну, когда ставлю SetCapture при нажатии клавиши мыши, то
> ClientToScreen возвращиет слишком большие координаты (по
> х больше нескольки тысяч), незнаю почему.
покажи код
-
-
Может еще подскажите как задать цвет фона у листбокса?...
-
> Может еще подскажите как задать цвет фона у листбокса?..
> .
самый надежный и универсальный способ задать цвет фона для любых контролов это сделать обработчик WM_ERASEBKGND и заливать там нужным цветом.
По поводу кода, я по моему уже тебе говорил, что в оконной функции надо всегда возвращать результат обработки сообщения. Иначе возможны проблемы. WM_ERASEBKGND в том числе.
-
> как задать цвет фона у листбокса?
WM_CTLCOLORLISTBOX у формы
-
Неполучаеть не через WM_CTLCOLORLISTBOX не через WM_ERASEBKGND.
Не через setbkcolor, не через заливку ректа, незнаю в чем тут загвоздка...
возвращать результат обработки сообщения
Result:=0; это грамотно?
-
> Неполучаеть не через WM_CTLCOLORLISTBOX
мда? а как пытаешься?
-
> Result:=0; это грамотно?
где 0, где 1, где еще что-то, зависит от сообщения. Для того же WM_ERASEBKGND 1 возвращать надо.
-
WM_CTLCOLORLISTBOX:
begin
SetTextColor(wParam, RGB(255, 255, 255));
SetBkColor(wParam, RGB(0, 200, 0));
end;
-
> demon © (24.11.08 18:38) [16]
сколько раз тебе повторять!!!!!!
Return Values
If an application processes this message, it must return the handle of a brush. Windows uses the brush to paint the background of the list box.
-
А как это сделать? :-[
-
> А как это сделать? :-[
а что непонятно то?
-
сделал так result:= CreateSolidBrush($000000);
работает!
-
> [20] demon © (25.11.08 08:06)
> сделал так result:= CreateSolidBrush($000000);
лучше один раз создать кисть, сохранить хэндл и его возвращать
Result := FListBoxBrush;
а при завершении убить DeleteObject(FListBoxBrush);
а так будет утечка ресурсов GDI
-
Но мне эта кисть будет нужна на протяжении всей работы программы, разве после завершения программы windows не очисти все незакрытые хэндлы?
В любом случае сделал по вашему, выглядит грамотнее.
-
> разве после завершения программы windows не очисти все незакрытые
> хэндлы?
Очистит, очистит, но так делать все равно не надо. За собой мусор надо удалять ВСЕГДА.