Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.04;
Скачать: CL | DM;

Вниз

Программа прилипающая к краям   Найти похожие ветки 

 
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 &#151; SnapToEdge) < FSnapBuffer) then
     Edge := SnapToEdge &#151; 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
15-1206102762
Kolan
2008-03-21 15:32
2008.05.04
Image Button какой выбрать?


15-1205743389
REA
2008-03-17 11:43
2008.05.04
GPS перехват


15-1206133335
Lets
2008-03-22 00:02
2008.05.04
Какие есть версии делфи?


3-1196589626
Каяна
2007-12-02 13:00
2008.05.04
Подключение к полю типа Binary


2-1207664856
smartleds
2008-04-08 18:27
2008.05.04
Подскажите плз как в списке ListBox отобразить выбор нулевого