Главная страница
    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.006 c
15-1205930041
Elec3C
2008-03-19 15:34
2008.05.04
with в C++


15-1206361369
xayam
2008-03-24 15:22
2008.05.04
помогите пожалуйста с математикой


2-1207590779
иван8511
2008-04-07 21:52
2008.05.04
Перемещение курсора в компоненте Edit


15-1206251473
Cyrax
2008-03-23 08:51
2008.05.04
"Сотрудник" (учебного заведения) по-английски....


2-1207744927
Снежинка
2008-04-09 16:42
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский