Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
ВнизПрограмма прилипающая к краям Найти похожие ветки
← →
XRMiPO (2008-04-05 11:10) [0]как сделать, чтобы моя программа прилипала к краям экрана, и при этом чтобы ее нельзя было переместить за край экрана, только в пределах экрана и с прилипанием к краям?
← →
Kolan © (2008-04-05 11:50) [1]Ищи в интернете. Там есть именно то что тебе нужно.
← →
Семеныч (2008-04-05 12:30) [2]И ключевое слово SHAppBarMessage позволит существенно сократить время поиска.
← →
XRMiPO (2008-04-05 13:28) [3]Нет, SHAppBarMessage используется для создание панелей, под которые выделяется часть экрана и все остальное сдвигается.
← →
XRMiPO (2008-04-05 13:39) [4]в интернете везде один и тот же очень глючно работающий пример
← →
Семеныч (2008-04-05 13:55) [5]> XRMiPO (05.04.08 13:28) [3]
Именно так. А теперь перечитайте свой вопрос.
← →
Kolan © (2008-04-05 13:58) [6]Кстати в BDS у форм есть свойства ScreenSnap и SnapBuffer.
Вот как они используются:procedure TCustomForm.WMWindowPosChanging(var Message: TWMWindowPosChanging);
procedure HandleEdge(var Edge: Integer; SnapToEdge: Integer;
SnapDistance: Integer = 0);
begin
if (Abs(Edge + SnapDistance — SnapToEdge) < FSnapBuffer) then
Edge := SnapToEdge — SnapDistance;
end;
begin
if FScreenSnap and ((Parent = nil) or not (csDesigning in ComponentState)) and
((Message.WindowPos^.X <> 0) or (Message.WindowPos^.Y <> 0)) and
((Message.WindowPos^.cx = Width) and (Message.WindowPos^.cy = Height)) then
with Message.WindowPos^, Monitor.WorkareaRect do
begin
HandleEdge(x, Left, Monitor.WorkareaRect.Left);
HandleEdge(y, Top, Monitor.WorkareaRect.Top);
HandleEdge(x, Right, Width);
HandleEdge(y, Bottom, Height);
end;
inherited;
end;
← →
XRMiPO (2008-04-05 14:13) [7]только еще в private надо добавить
procedure WMWINDOWPOSCHANGING
(Var Msg: TWMWINDOWPOSCHANGING);
message WM_WINDOWPOSCHANGING;
и delphi ненравится минус здесь:if (Abs(Edge + SnapDistance — SnapToEdge) < FSnapBuffer) then
← →
{RASkov} © (2008-04-05 14:25) [8]> [7] XRMiPO (05.04.08 14:13)
type
TForm1 = class(TForm)
.........
procedure FormCreate(Sender: TObject);
private
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
{ Private declarations }
public
end;
...........
procedure TForm1.FormCreate(Sender: TObject);
begin
SnapBuffer:=10; // Если
ScreenSnap:=True; // есть
end;
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
inherited;
if Message.WindowPos^.x<0 then Message.WindowPos^.x:=0;
if Message.WindowPos^.y<0 then Message.WindowPos^.y:=0;
if Message.WindowPos^.x>Screen.WorkAreaWidth-Width then Message.WindowPos^.x:=Screen.WorkAreaWidth-Width;
if Message.WindowPos^.y>Screen.WorkAreaHeight-Height then Message.WindowPos^.y:=Screen.WorkAreaHeight-Height;
end;
← →
{RASkov} © (2008-04-05 14:37) [9]> Message.WindowPos^.x<0
procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
begin
inherited;
with Msg.WindowPos^ do begin
if x<Screen.WorkAreaLeft then x:=Screen.WorkAreaLeft;
if y<Screen.WorkAreaTop then y:=Screen.WorkAreaTop;
if x>Screen.WorkAreaWidth-Width then x:=Screen.WorkAreaWidth-Self.Width;
if y>Screen.WorkAreaHeight-Height then y:=Screen.WorkAreaHeight-Height;
end;
end;
← →
XRMiPO (2008-04-06 18:35) [10]все отлично работает, спасибо большое)
← →
DVM © (2008-04-06 21:04) [11]Программа не может прилипать к краям чего бы то ни было!
← →
DVM © (2008-04-06 21:09) [12]А для окна, прилипающего к краям рабочей области экрана, целесообразнее обрабатывать WM_SIZING и WM_MOVING. WM_WINDOWPOSCHANGING тоже можно, но это избыточно.
А SHAppBarMessage тут посоветовали совсем не в кассу, т.к. сама по себе эта функция ничего не делает, кроме как добавляет окно в список панелей эксплорера и в дальнейшем заставляет эксплорер учитывать это окно при перерасчете положения всех панелей и рабочей области. Прилипать окно к краям она не научит. С ее помощью можно лишь получить информацию о том, что пора прилипать и куда прилипать.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.05.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c