![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оконная тень
Antonn © (2005-12-14 14:54:00)Проблемка наметилась, как решить не знаю.
Делаю тень у окна, но в течении работы ее нужно убрать. С этим уже проблемы.
Вот код, при щелчке на Чекбоксе устанавливается /сбрасывается флаг CS_DROPSHADOW, окно пересоздается.
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW)
else
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) and not CS_DROPSHADOW);
RecreateWnd;
end;
При установке тени проблем нет, она сразу появляется у окна, а вот при удалении она "отправляется в свободный полет на задний фон", т.е. висит себе в пространстве, не затирается и не исчезает. Собственно вопрос - как эту тень убить?
ЗЫ Причем при повторной установке флага, эта самая тень опять приклеивается к окну, и делает вид, что так и было...
Zeqfreed (2005-12-15 21:28:00) [1]Antonn © (15.12.05 18:47) [6]
Если мерцание не смущает, то:
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
ShowWindow(Handle, SW_HIDE);
if CheckBox1.Checked then
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) or CS_DROPSHADOW)
else
SetClassLong(Handle, GCL_STYLE, GetClassLong(Handle, GCL_STYLE) and not CS_DROPSHADOW);
RecreateWnd;
ShowWindow(Handle, SW_NORMAL);
end;
Antonn (2005-12-15 18:47:00) [2]хм, походу ее вообще никак нельзя убить...
и используется она "для маленьких и недолгоживущих окон", и, соответственно, помирает только с ними.
Ну не через задницу-ли сделано?..
Antonn (2005-12-15 18:22:00) [3]clickmaker © (15.12.05 17:50) [4]
все равно остается...
может я чего не понял? где писать
RedrawWindow(Self.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW)?
поместил в тот же обработчик клика до/после/вместо RecreateWnd, все равно тень остается.
clickmaker (2005-12-15 17:50:00) [4]RedrawWindow(Self.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW)
Antonn (2005-12-15 17:28:00) [5]TUser © (15.12.05 16:42) [2]
не помогает...
TUser (2005-12-15 16:42:00) [6]Скажи InvalidateRect.
Antonn (2005-12-15 04:36:00) [7]up?