Форум: "Потрепаться";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];
ВнизКак действует функция 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c