Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.01 c
1-83592
dimon1979
2003-05-14 14:36
2003.05.26
Canvas(CopyRect)


3-83361
prof
2003-05-06 09:00
2003.05.26
Переменные в SQL


3-83336
Nikos
2003-05-03 23:10
2003.05.26
Не могу организовать поиск методом Locate


3-83376
Belkova
2003-05-05 21:23
2003.05.26
Выделение в DBGrid


14-83694
Дмитрий К.К.
2003-05-06 06:26
2003.05.26
Именинники 6 мая





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский