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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение размера формы 
V
    Опции темы
Artem91
Дата 13.7.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет всем, надеюсь мне тут помогут...

Я хочу изменять размеры формы у которой свойство BorderStyle = bsNone. 
Нашел пару примеров, но один мне не понравился, а с другим я не смог разобраться... 

Помогите пожалуйста. 


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


Эксперт
****


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

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



Код

Form1.Width := ...
Form1.Height := ...



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


Шустрый
*


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

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



Keeper89, вы меня не поняли

У формы нету границ. Как сделать чтобы при наведении курсора на край формы и при зажатии левой кнопки мыши можно было бы изменить размер, как если бы границы у формы были???


Я так понимаю это делается через системные сообщения WM_Size и WM_Sizing, но я с ними не смог разобраться

Это сообщение отредактировал(а) Artem91 - 13.7.2009, 23:48
PM MAIL   Вверх
Keeper89
Дата 13.7.2009, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Artem91, теперь понял smile
Вот код:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_STATICEDGE;
  Params.Style := Params.Style or WS_SIZEBOX;
end;

end.



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


Эксперт
***


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

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



Цитата(Artem91 @  13.7.2009,  23:30 Найти цитируемый пост)
Как сделать чтобы при наведении курсора на край формы и при зажатии левой кнопки мыши можно было бы изменить размер, как если бы границы у формы были

create a sizable and none border style form

Добавлено через 1 минуту и 2 секунды
Keeper89, гы, опередил smile
PM MAIL WWW   Вверх
Keeper89
Дата 14.7.2009, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



kami, Ы smile , только у меня немного отличается...

Это сообщение отредактировал(а) Keeper89 - 14.7.2009, 00:13


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


Шустрый
*


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

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



Спасибо, но это опять не то что мне нужно.

Все таки в этом коде рамка создается, а мне хотелось бы чтобы её не было и обрабатывать изменение размеров вручную.

Вот я нашел пример как это сделать, но тут не для самой формы, а для дырки в ней:
http://www.delphikingdom.com/zip/wndhole.zip

с ним я не смог разобраться, пока что(((

Это сообщение отредактировал(а) Artem91 - 14.7.2009, 11:13
PM MAIL   Вверх
Artem91
Дата 14.7.2009, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все я разобрался как это сделать. Все оказалось не так уж и сложно. Привожу код чтобы другие не мучались:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormWndProc(var Msg:TMessage);
  private
  FOldPanelWndProc:TWndMethod;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
FOldPanelWndProc := Form1.WindowProc;
Form1.WindowProc := Form1.FormWndProc;
end;

procedure TForm1.FormWndProc(var Msg:TMessage);
var 
  Pt:TPoint;
  R:TRect;
begin
  FOldPanelWndProc(Msg);
  if Msg.Msg=WM_NCHitTest then begin
    Pt:=Form1.ScreenToClient(Point(Msg.LParamLo,Msg.LParamHi));
    if Pt.X<3 then
      if Pt.Y<15 then
        Msg.Result:=HTTopLeft
      else if Pt.Y>=Form1.Height-15 then
        Msg.Result:=HTBottomLeft
     else
        Msg.Result:=HTLeft
   else if Pt.X>=Form1.Width-3 then
      if Pt.Y<15 then
        Msg.Result:=HTTopRight
      else if Pt.Y>=Form1.Height-15 then
       Msg.Result:=HTBottomRight
     else
       Msg.Result:=HTRight
    else if Pt.Y<3 then
      if Pt.X<15 then
        Msg.Result:=HTTopLeft
      else if Pt.X>=Form1.Width-15 then
        Msg.Result:=HTTopRight
     else
       Msg.Result:=HTTop
    else if Pt.Y>=Form1.Height-3 then
      if Pt.X<15 then
       Msg.Result:=HTBottomLeft
      else if Pt.X>=Form1.Width-15 then
        Msg.Result:=HTBottomRight
      else
       Msg.Result:=HTBottom
  end;
  //Задаем минимальные размеры формы
  if Msg.Msg = WM_SIZING then begin
      R.TopLeft := Form1.ScreenToClient(PRect(Msg.LParam)^.TopLeft);
      R.BottomRight := Form1.ScreenToClient(PRect(Msg.LParam)^.BottomRight);
      if R.Right < 200 then
        R.Right := 200;
      if R.Bottom < 200 then
        R.Bottom := 200;
      PRect(Msg.LParam)^.TopLeft:=ClientToScreen(R.TopLeft);
      PRect(Msg.LParam)^.BottomRight:=ClientToScreen(R.BottomRight)
  end;
end;
end.


Это сообщение отредактировал(а) Artem91 - 14.7.2009, 12:43
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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