Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Вниз

Как заставить все окна изменить свои размеры.....   Найти похожие ветки 

 
demonyator   (2003-06-15 02:15) [0]

<subj>... в соответствии с новыми параметрами рабочей области. Вот код, который я использую для установки новых параметров раб. области:

var R:TRECT
begin
r.Left:=0;
r.Top:=0;
r.Right:=Screen.Width;
r.Bottom:=Screen.Height-50;
( SPI_SETWORKAREA,0,@r,0)
<subj>... в соответствии с новыми параметрами рабочей области. Вот код, который я использую для установки новых параметров раб. области:

var R:TRECT
begin
r.Left:=0;
r.Top:=0;
r.Right:=Screen.Width;
r.Bottom:=Screen.Height-50;
SystemParametersInfo(SPI_SETWORKAREA,0,@r,0);
end;

Всё работает нормально, но хотелось бы чтобы все окна подравнялись под новые параметры, как это происходит после изменения размеров панели задач.


 
jonni   (2003-06-15 05:00) [1]

voobsche v dokumentacie k spi_setworkarea est" takoy parameter spi_sendchanges chto to tipa etogo tochno seychas ne pomnyu

SystemParametersInfo(SPI_SETWORKAREA,0,@r,spi_sendchanges);
budet chto to tipa takogo.......

a voobsche esli tebe nado sozdat" chto to tipa okoshko kotoroe vsegda potesnit vse okna (kak taskbar) ti sozdavay real"niy bar
togda winda vse za tebya sdelaet (podvinet okna itd)


 
DVM   (2003-06-15 15:02) [2]

В отсутствии эксплорера это все равно не будет работать.


 
jonni   (2003-06-15 16:19) [3]

chto ne budet rabotat"???
i pochemu?/


 
DVM   (2003-06-15 16:24) [4]

Да хрен его знает. Просто не будет и все. Я не знаю точно, это внутренняя кухня эксплорера. Если нет эксплорера это свойство теряют все подобные окна (панель офиса, все AppBar-ы). Хотелось бы самому узнать как с этим бороться.


 
demonyator   (2003-06-16 23:41) [5]

Это не есть хорошо... как раз без любимого explorer и необходимо это делать. Но есть одна особенность... если SystemParametersInfo(SPI_SETWORKAREA,0,@r,0) повесить на таймер и посылать постоянно, то после минимизации/максимизации окна будут принимать изменения.


 
Diamond Cat   (2003-06-18 02:01) [6]

когдато я такое проходил, и проходил это следующим образом, с помощью winsight32 посмотрел какое сообщение получает мое окно при изменении позиции\размера панели задачь (не помню сейчас какое ) и потом с помощью sendmessage(hwnd_broadcast... рассылал его когда мне надо


 
DVM   (2003-06-18 15:50) [7]

WM_WINDOWPOSCHANGING посылается окнам. Вобщем, я сделал.
Вот черновой вариант:

procedure SetWorkArea(rc:TRect);
var
Wnd:THandle;
begin
SystemParametersInfo(SPI_SETWORKAREA,0,@rc,SPIF_SENDCHANGE);
SystemParametersInfo(SPI_GETWORKAREA,0,@rc,SPIF_SENDCHANGE);
Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
while Wnd <> 0 do
begin
SetWindowPos(wnd,0,0,0,0,0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_FRAMECHANGED);
Wnd := GetWindow(Wnd, gw_hWndNext);
( Sender: TObject) WM_WINDOWPOSCHANGING посылается окнам. Вобщем, я сделал.
Вот черновой вариант:

procedure SetWorkArea(rc:TRect);
var
Wnd:THandle;
begin
SystemParametersInfo(SPI_SETWORKAREA,0,@rc,SPIF_SENDCHANGE);
SystemParametersInfo(SPI_GETWORKAREA,0,@rc,SPIF_SENDCHANGE);
Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
while Wnd <> 0 do
begin
SetWindowPos(wnd,0,0,0,0,0, SWP_NOSIZE or SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_FRAMECHANGED);
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var rc:TRect;
begin
rc.Left:=100;
rc.Top:=0;
rc.Right:=Screen.Width;
rc.Bottom:=screen.Height-100;
SetWorkArea(rc);
end;


 
DVM   (2003-06-18 16:45) [8]

Вот так будет правильнее:

procedure SetWorkArea(rc:TRect);
var
Wnd:THandle;
WP : WINDOWPLACEMENT;
begin
SystemParametersInfo(SPI_SETWORKAREA,0,@rc,SPIF_SENDCHANGE);
SystemParametersInfo(SPI_GETWORKAREA,0,@rc,SPIF_SENDCHANGE);
WP.length := SizeOf( WINDOWPLACEMENT );
Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
while Wnd <> 0 do

begin
GetWindowPlacement( wnd, @WP );
if WP.showCmd = SW_SHOWMAXIMIZED then
begin
SetWindowPos(wnd,0,rc.Left,rc.Top,rc.Right-rc.Left,rc.Bottom-rc.Top, {SWP_NOSIZE or }SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_FRAMECHANGED);

end;
( Wnd, gw_hWndNext) Вот так будет правильнее:

procedure SetWorkArea(rc:TRect);
var
Wnd:THandle;
WP : WINDOWPLACEMENT;
begin
SystemParametersInfo(SPI_SETWORKAREA,0,@rc,SPIF_SENDCHANGE);
SystemParametersInfo(SPI_GETWORKAREA,0,@rc,SPIF_SENDCHANGE);
WP.length := SizeOf( WINDOWPLACEMENT );
Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
while Wnd <> 0 do

begin
GetWindowPlacement( wnd, @WP );
if WP.showCmd = SW_SHOWMAXIMIZED then
begin
SetWindowPos(wnd,0,rc.Left,rc.Top,rc.Right-rc.Left,rc.Bottom-rc.Top, {SWP_NOSIZE or }SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_FRAMECHANGED);

end;
Wnd := GetWindow(Wnd, gw_hWndNext);
end;
end;

Правда этот код не учитывает, что на экране могут оказаться какие-нибудь AppBar-ы, но без эксплорера они тоже теряют часть функциональности, которую тоже надо им восстанавливать.



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

Форум: "WinAPI";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.012 c
1-68309
Ткаченко Сергей
2003-08-06 14:23
2003.08.21
Поиск файлов в директории


3-68172
Donor
2003-07-28 11:44
2003.08.21
InterBase


3-68188
Relaxxx
2003-07-28 17:21
2003.08.21
Изменение положения колонки в ДБГрид


1-68395
Man
2003-08-07 17:12
2003.08.21
использовать классы,описанные в dll


1-68312
cult
2003-08-06 14:09
2003.08.21
Тестирование COM-класса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский