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

Оконная тень   Найти похожие ветки 

 
Antonn ©   (2005-12-14 14:54) [0]

Проблемка наметилась, как решить не знаю.
Делаю тень у окна, но в течении работы ее нужно убрать. С этим уже проблемы.
Вот код, при щелчке на Чекбоксе устанавливается /сбрасывается флаг 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;

При установке тени проблем нет, она сразу появляется у окна, а вот при удалении она "отправляется в свободный полет на задний фон", т.е. висит себе в пространстве, не затирается и не исчезает. Собственно вопрос - как эту тень убить?

ЗЫ Причем при повторной установке флага, эта самая тень опять приклеивается к окну, и делает вид, что так и было...


 
Antonn ©   (2005-12-15 04:36) [1]

up?


 
TUser ©   (2005-12-15 16:42) [2]

Скажи InvalidateRect.


 
Antonn ©   (2005-12-15 17:28) [3]

TUser ©   (15.12.05 16:42) [2]
не помогает...


 
clickmaker ©   (2005-12-15 17:50) [4]

RedrawWindow(Self.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW)


 
Antonn ©   (2005-12-15 18:22) [5]

clickmaker ©   (15.12.05 17:50) [4]
все равно остается...

может я чего не понял? где писать
RedrawWindow(Self.Handle, nil, 0, RDW_FRAME or RDW_INVALIDATE or RDW_UPDATENOW) ?
поместил в тот же обработчик клика до/после/вместо RecreateWnd, все равно тень остается.


 
Antonn ©   (2005-12-15 18:47) [6]

хм, походу ее вообще никак нельзя убить...
и используется она "для маленьких и недолгоживущих окон", и, соответственно, помирает только с ними.
Ну не через задницу-ли сделано?..


 
Zeqfreed ©   (2005-12-15 21:28) [7]

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;



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

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



Память: 0.46 MB
Время: 0.026 c
6-1128457045
Out
2005-10-05 00:17
2006.01.22
определение ip адреса


2-1136449174
JOYMAN
2006-01-05 11:19
2006.01.22
Поверх всех окон сделать


2-1136524602
Paslei
2006-01-06 08:16
2006.01.22
Работа с полями MEMO


2-1136027458
GuAV
2005-12-31 14:10
2006.01.22
if Assigned(Self) then Result := FList else Result := EmptyList;


14-1136063298
Игорь Шевченко
2006-01-01 00:08
2006.01.22
С новым годом!




   Наверх