Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поведение формы. Перемещение по экрану. 
:(
    Опции темы
iddqd
Дата 11.1.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Необходимо, что при подведении формы к левому или правому краю экрана форма прилипала к краю и её свойство Height становилось равным этому же свойству экрана.


--------------------
PM MAIL   Вверх
Denic
Дата 11.1.2006, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 7.10.2005

Репутация: нет
Всего: нет



Юзай событие OnCanResize
PM MAIL   Вверх
Snowy
Дата 12.1.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Примерно так:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

const
  StickAt = 10;

type
  TForm1 = class(TForm)
  private
    procedure WMWindowPosChanging(Var Msg: TWMWINDOWPOSCHANGING);
              message WM_WINDOWPOSCHANGING;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
var
 WorkArea: TRect;
begin
 SystemParametersInfo(SPI_GETWORKAREA, 0, @WorkArea, 0);
 with WorkArea, Msg.WindowPos^ do
 begin
   Right:=Right-cx;
   Bottom:=Bottom-cy;
   if abs(Left - x) <= StickAt then x := Left;
   if abs(Top - y) <= StickAt then y := Top;
   if abs(Bottom - y) <= StickAt then y := Bottom;
   if (abs(Right - x) <= StickAt) and (Right - x > 0) then begin
     x := Right;
     y := 0;
     Height := Screen.Height;
   end;
 end;
 inherited;
end;

end.

PM MAIL   Вверх
Albinos_x
Дата 12.1.2006, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



как вариант можно опробовать событие
Код

procedure TForm1.WMMOVE(var Msg: TMessage);
begin
 inherited;
 if (Form1 <> nil) then
    begin
...
    end;
end;



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
iddqd
Дата 12.1.2006, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 16.11.2005

Репутация: 0
Всего: 2



Не совсем то.
Хотелось бы так, как, например, это делает ICQ клиент &RQ.
Вынести форму за пределы правой или левой границы окна - нельзя, она сразу липнет к краю и по высоте становится как экран.
Полазил по сорцах &RQ найти всё равно не могу :\


--------------------
PM MAIL   Вверх
Guedda
Дата 12.1.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Тогда юзай так:
Код

if Form1.Left <= 0 then Form1.Left := 0;
if Form1.Top <= 0 then Form1.Top := 0;



--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Albinos_x
Дата 12.1.2006, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Код
...
  private
    { Private declarations }
    procedure WMMOVE(var Msg: TMessage); message WM_MOVE;
...

procedure TForm1.WMMOVE(var Msg: TMessage);    
begin    
 inherited;    
 if (Form1 <> nil) then    
    begin    
    if (Form1.Left <= 10) or (Form1.Top <= 10) then    
       SetWindowPos(Form1.Handle, 0,0,0, 0, 0, SWP_NOSIZE or SWP_NOACTIVATE);
    end;    
end;
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.