Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2012, 07:57   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Липкое окно. Не могу изменить ширину прилипшего окна.

Добрый день! Поиском по форуму нашел код, чтобы сделать второе окно прилипшим к первому. Но вот проблемка, не могу понять где изменить, чтобы ширина формы, которая прилипает была такой какой я установил ее при разработке программы. Сейчас ширина этого окна получается непонятным для меня образом. Где установить ширину прилипаемого окна? И второй вопрос: за статусбар у меня изменяется размер главной формы. Как сделать, чтобы в коде ниже изменялось также положение прилипаемого к главной форме окна?
Код:
Код:
private
    procedure WMWindowPosChanging1(var Msg: TWMWindowPosChanging);
    message WM_WINDOWPOSCHANGING;

procedure TForm_Main.WMWindowPosChanging1(var Msg: TWMWindowPosChanging);  //для "прилипания" к краям экрана/к нужной форме
var 
  WorkArea: TRect;
  StickAt : Word;
begin
  StickAt := 20;  //на каком расстоянии главная форма будет "прилипать" к краю экрана
  SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0);
  with WorkArea, Msg.WindowPos^ do
    begin  // Сдвигаем границы для сравнения с левой и верхней сторонами
      if (Form_Main.Visible=true) and (Glued1.Checked=true) then
        begin
          Form_PlayList.Top:=Form_Main.Top+Form_Main.Height-2;  //задаем координаты "прилипшего окна"
          Form_PlayList.Left:=Form_Main.Left;
        end;
      Right:=Right-cx;
      Bottom:=Bottom-cy;
      if abs(Left-x)<=StickAt then x:=Left;
      if abs(Right-x)<=StickAt then x:=Right;
      if abs(Top-y)<=StickAt then y:=Top;
      if abs(Bottom-y)<=StickAt then y:=Bottom;
    end;
  inherited;
end;
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 22.07.2012, 08:46   #2
Сергей089
Форумчанин
 
Регистрация: 22.09.2008
Сообщений: 214
По умолчанию

artemavd, код работает. Размер второй формы остается такой, какой ее выставляешь в дизайнере.
Сергей089 вне форума Ответить с цитированием
Старый 23.07.2012, 01:04   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Цитата:
Сообщение от artemavd
И второй вопрос: за статусбар у меня изменяется размер главной формы. Как сделать, чтобы в коде ниже изменялось также положение прилипаемого к главной форме окна?
На мой взгляд, достаточно ловить событие OnResize (либо соответствующее message) формы и запускать этот же код(если для "своей" формы) или посылать сообщение нужной форме. Код можно отрефакторить в процедуру, не зависящую от вызывающего, плюс универсализировать, чтобы не было зависимостей от конкретных форм (например, передавать эти формы в параметрах процедуры), и получится дельно - а то вдруг надо будет несколько липких дочек, или названия экземпляров поменяются.
И, Артем, не перестаю Вам твердить, ну не испозьзуйте переменные экземпляра класса в методах самого класса (это Form_Main в методах ТForm_Main в данном случае), а используйте Self или вообще ничего (сразу имена членов класса).

Последний раз редактировалось phomm; 23.07.2012 в 01:11.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Растягивание таблицы на ширину окна MeTeOpA HTML и CSS 4 15.10.2010 19:45
Изменить ширину вертикального скрола DBGRIDEH Andrey85 Компоненты Delphi 0 29.09.2010 10:52
изменить ширину столбцов Snark Microsoft Office Word 17 09.10.2009 18:13
Как изменить ширину картинки на фоне? Try HTML и CSS 0 16.09.2009 22:57
"Липкое" окно Патрон Общие вопросы Delphi 10 16.04.2009 05:15