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

Вниз

Как   Найти похожие ветки 

 
pirat   (2003-06-08 15:26) [0]

Как встроить мое окно рядом с окном рабочего стола наподобии того как это может делать аська, панель задач виндовз, и многие другие проги, то чтобы окно рабочего стола уменьшилось в размерах и рядом встало мое окно?


 
Yanis   (2003-06-08 16:13) [1]

Не знаю как насчет размеров рабочего стола. Но ты знаешь как делать фишку как в Winamp"е, типа прилипание к краю экрана? Вот то что ты спрашиваешь так и делается с помощью замечательной апишки WM_WINDOWPOSCHANGING.


 
DVM   (2003-06-08 16:39) [2]


> pirat ©

SHAppbarMessage


 
Yanis   (2003-06-08 16:52) [3]

To DVM © (08.06.03 16:39)
Интересно! А поподробнее.


 
DVM   (2003-06-08 17:05) [4]


> Yanis ©

Регистрирует в системе уже существующее окно как appbar.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shappbarmessage.asp

Панель задач, панель офиса - это и есть AppBar-ы.
Примеры компонентов, реализующих это на www.torry.net


 
E_Dimon   (2003-06-08 17:29) [5]

SystemParametersInfo(SPI_SETWORKAREA,......)
если я не ошибаюсь


 
Pirat   (2003-06-09 02:04) [6]

ок, остановимся на эффекте WinAmp"а пока :)
вот что у меня получилось :

private
procedure WMWindowPosChanging(var Message:TMessage);message WM_WINDOWPOSCHANGING;
...
procedure TForm1.WMWindowPosChanging(var Message:TMessage);
type
PWindowPos = ^TWindowPos;
var
vp : PWindowPos;
const
xdelt = 8;
ydelt = 8;
begin
vp := PWindowPos(Message.LParam);
{OutputDebugString(PChar(
"("+IntToStr((vp^).x)+","+IntToStr((vp^).y)+") "+
"("+IntToStr((vp^).cx)+","+IntToStr((vp^).cy)+")"+
IntToHex(vp^.flags,8)
));
}

if abs(vp^.x) < xdelt then vp^.x := 0
else
if abs(Screen.Width - (vp^.x + width)) < xdelt then
( vp^.y)
ок, остановимся на эффекте WinAmp"а пока :)
вот что у меня получилось :

private
procedure WMWindowPosChanging(var Message:TMessage);message WM_WINDOWPOSCHANGING;
...
procedure TForm1.WMWindowPosChanging(var Message:TMessage);
type
PWindowPos = ^TWindowPos;
var
vp : PWindowPos;
const
xdelt = 8;
ydelt = 8;
begin
vp := PWindowPos(Message.LParam);
{OutputDebugString(PChar(
"("+IntToStr((vp^).x)+","+IntToStr((vp^).y)+") "+
"("+IntToStr((vp^).cx)+","+IntToStr((vp^).cy)+")"+
IntToHex(vp^.flags,8)
));
}

if abs(vp^.x) < xdelt then vp^.x := 0
else
if abs(Screen.Width - (vp^.x + width)) < xdelt then
vp^.x := Screen.Width - width;

if abs(vp^.y) < ydelt then vp^.y := 0
else
if abs(Screen.Height - (vp^.y + height)) < ydelt then
vp^.y := Screen.Height - height;
end;

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


 
Spawn   (2003-06-09 15:34) [7]

При перетаксивании окна также генерируется сообщение WM_MOVING - посморти еще его.


 
Yanis   (2003-06-10 14:20) [8]

Вот так кажется не глючит, попробуй:

procedure TForm1.WMWINDOWPOSCHANGING(var Msg: TWMWINDOWPOSCHANGING);
var
Docked: Boolean;
rWorkArea: TRect;
StickAt : Word;
begin
StickAt :=20;

SystemParametersInfo
(SPI_GETWORKAREA, 0, @rWorkArea, 0);

with Msg.WindowPos^ do begin
if x <= rWorkArea.Left + StickAt then begin
x := rWorkArea.Left;
Docked := TRUE;
end;

if x + cx >= rWorkArea.Right - StickAt then begin
x := rWorkArea.Right - cx;
Docked := TRUE;
end;

if y <= rWorkArea.Top + StickAt then begin
y := rWorkArea.Top;
Docked := TRUE;
end;

if y + cy >= rWorkArea.Bottom - StickAt then begin
y := rWorkArea.Bottom - cy;
Docked := TRUE;
end;

if Docked then begin
with rWorkArea do begin
// запрещаем перемещение за пределы экрана
if x < Left then x := Left;
if x + cx > Right then x := Right - cx;
if y < Top then y := Top;
if y + cy > Bottom then y := Bottom - cy;
end; {with rWorkArea}
end; {if Docked}
end; {with Msg.WindowPos^}

inherited;
end;
end.

end;


 
pirat   (2003-06-11 13:22) [9]

Офигительно!!! :D Спасибо !



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

Форум: "Потрепаться";
Текущий архив: 2003.08.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
14-45153
greenrul
2003-02-13 10:16
2003.08.14
Хитрый вопросец: создание поворачиваемого прицела


14-44966
pasha_golub
2003-07-23 18:28
2003.08.14
Вот, сваял на скорую руку. Отведайте...


14-44988
Князь Мышкин
2003-07-29 16:06
2003.08.14
Вакансия заместителя Верховного Программиста


14-45004
AlexRush
2003-07-28 16:44
2003.08.14
dcc32, ObjectPascal (6) - языково-компиляторные концепции...


14-45112
АТ
2003-06-12 07:51
2003.08.14
Как получить размер Desktop а?





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