Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: CL | DM;

Вниз

Как действует функция SetWindowLong ? Никак не пойму   Найти похожие ветки 

 
Top Gun   (2003-05-01 00:06) [0]

Хочу изменить стиль собственного окна, пишу:

SetWindowLong(handle,GWL_STYLE,WS_SYSMENU or WS_MINIMIZEBOX or ws_maximizebox);

Черт знает что происходит, окно вообще становится неправильным, не реагирует на кнопки закрыть, свернуть, восстановить. Хотя щелчок на форме обрабатывается. Что за лажа ?


 
Suntechnic ©   (2003-05-01 00:19) [1]

Ты вообщем то получаешь то, что хотел. А именное: окно всего лишь с тремя стилями: WS_SYSMENU, WS_MINIMIZEBOX, ws_maximizebox. Но вообще-то говоря у окна их то побольше будет (взгляни хотя бы на описание ф-ции CreateWindow). Так что надо писать что-то типа вот этого:

SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or WS_SYSMENU or WS_MINIMIZEBOX or ws_maximizebox);


 
SPeller ©   (2003-05-01 01:04) [2]

Можно применить обобщенные стили типа WS_OVERLAPPEDWINDOW.


 
Top Gun   (2003-05-01 13:22) [3]

взгляни хотя бы на описание ф-ции CreateWindow

БЛИН ! Ну ведь я писал до этого:

CreateWindowEx(0,PChar(NewClassName),PChar(FCaption), WS_SYSMENU or ws_maximizebox or WS_MINIMIZEBOX,FLeft ,FTop,FWidth,FHeight,0,0,instance,nil)

И все работало !!! Никаких доп. стилей не указано как видно, а вот в SetWindowLong надо почему-то указывать ! Почему так ?


 
Song ©   (2003-05-01 13:32) [4]

Потому что до твоих WS_ окно ведь обладало другими стилями? Правильно? Ну вот, а ты их за раз все убрал, а поставил только свои.


 
Top Gun   (2003-05-01 13:43) [5]

Ну блин ! Как я их мог убрать ? Song, ты читал, что я написал выше ?

Ведь при СОЗДАНИИ окна я указывал ТОЛЬКО три стиля WS_SYSMENU or ws_maximizebox or WS_MINIMIZEBOX. Когда я указываю эти три стиля в SetWindowLong получается совсем другой результат !


 
nikkie ©   (2003-05-01 17:22) [6]

Window Styles
The following styles can be specified wherever a window style is required. After the control has been created, these styles cannot be modified, except as noted.

WS_DISABLED ... To change this after a window has been created, use EnableWindow.

WS_GROUP ... You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use SetWindowLong.

WS_TABSTOP ... You can turn this style on and off to change dialog box navigation. To change this style after a window has been created, use SetWindowLong.

WS_VISIBLE ... This style can be turned on and off by using ShowWindow or SetWindowPos.

Резюме: согласно документации, кроме этих 4 стилей, все остальные не могут быть изменены. Видимо следует разрушить окно и создать его заново с нужными стилями.


 
Top Gun   (2003-05-03 18:30) [7]

Ага, тогда какого рожна TForm.BorderStyle в Дельфи доступен во время выполнения ? И дельфи то все корректно отрабатывает...

Повторюсь:

Ведь при СОЗДАНИИ окна я указывал ТОЛЬКО три стиля WS_SYSMENU or ws_maximizebox or WS_MINIMIZEBOX. Когда я указываю эти три стиля в SetWindowLong получается совсем другой результат !


 
nikkie ©   (2003-05-03 23:35) [8]

procedure TCustomForm.SetBorderStyle(Value: TFormBorderStyle);
begin
if FBorderStyle <> Value then
begin
FBorderStyle := Value;
AutoScroll := FBorderStyle in [bsSizeable, bsSizeToolWin];
if not (csDesigning in ComponentState) then RecreateWnd;
end;
end;


 
Top Gun   (2003-05-04 12:39) [9]

А где почитать что такое CM_RECREATEWND ? По названию одно, а вдруг оно делает другое ? И где, вообще, это CM_RECREATEWND обрабатывается ?!

P.S. А что значит директива компилятора deprecated; ? Встетил при просмотре Application


 
Top Gun   (2003-05-05 13:45) [10]

up


 
nikkie ©   (2003-05-05 13:54) [11]

>А где почитать что такое CM_RECREATEWND ?
Sources\Vcl

>А что значит директива компилятора deprecated;?
F1



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

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.043 c
3-83397
JazzzMaster
2003-05-06 16:40
2003.05.26
Почему DBGrid не цепляется к компонентам DB Express??


6-83644
Bosh
2003-03-26 08:09
2003.05.26
RasDial


14-83730
iNew
2003-05-07 10:53
2003.05.26
Кто какими пользуется антивирусами для win2k adv server?


6-83631
P4
2003-03-27 08:34
2003.05.26
MB


14-83653
Aga
2003-05-04 11:46
2003.05.26
Opera!