Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 &#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
2-1207566901
assassin8899
2008-04-07 15:15
2008.05.04
DBNavigator


2-1207470775
malyar
2008-04-06 12:32
2008.05.04
sql запросы без sql сервера


2-1207726269
cvg
2008-04-09 11:31
2008.05.04
Помогите найти ошибку в небольшой функции!


2-1207651552
asdf2
2008-04-08 14:45
2008.05.04
Как поймать момент покидания курсором контрола?


2-1207738292
F@T@L_Err0r
2008-04-09 14:51
2008.05.04
Компоненты Сокет





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