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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регион не растягивается, как исправить? 
:(
    Опции темы
Олег_Игоревич
Дата 21.4.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!
Подскажите пожалуйста, как можно при создании региона указать, чтобы окно можно было растянуть.Создаю при помощи CreateRoundRectRegion.
Вот код:
Код
   r := Form1.ClientRect;
   rgn := CreateRoundRectRgn(r.Left, r.top, r.right, r.bottom, 20,18);
   Form1.BorderStyle := bsNone;
   SetWindowRgn(Form1.Handle, rgn, true);

Заранее спасибо.   

Это сообщение отредактировал(а) Girder - 22.4.2006, 12:16
--------------------
Используй жизнь ПО ПОЛНОЙ !!!  
PM MAIL   Вверх
Alexeis
Дата 21.4.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Олег_Игоревич, не знаю правильно ли вас понял, но нестандартные регионы windows вроде как неумеет растягивать.
я могу и ошибаться. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rouse_
Дата 21.4.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Пересоздавать регион при ресайзе формы... 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Олег_Игоревич
Дата 21.4.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо.Сейчас попробую. 
--------------------
Используй жизнь ПО ПОЛНОЙ !!!  
PM MAIL   Вверх
Олег_Игоревич
Дата 22.4.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Приведите пожалуйста пример растягивания региона.
Что-то не пойму как это сделать.
Заранее спасибо. 
--------------------
Используй жизнь ПО ПОЛНОЙ !!!  
PM MAIL   Вверх
x77
Дата 22.4.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

procedure TForm1.UpdateRegion;
var
  Rgn: hRGN;
begin
  Rgn := CreateRoundRectRgn(0, 0, Width, Height, 20,18);
  SetWindowRgn(Handle, Rgn, true);
  DeleteObject (Rgn);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//  Form1.BorderStyle := bsNone;
  UpdateRegion;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  UpdateRegion;
end;


твоя проблема в том, что ты выставляешь BorderStyle в bsNone, что запрещает растягиваться самой форме, а регионы тут как бы и не при чём smile

если нужен именно BorderStyle = bsNone, то придётся руками организовывать все функции ресайзинга. 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Олег_Игоревич
Дата 22.4.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот я хочу именно при BorderStyle в bsNone и осуществить ресайзинг.Покажите пример.
Спасибо. 
--------------------
Используй жизнь ПО ПОЛНОЙ !!!  
PM MAIL   Вверх
Rouse_
Дата 4.5.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

unit Unit12;

interface

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

type
  TForm12 = class(TForm)
    procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
      var Resize: Boolean);
    procedure FormCreate(Sender: TObject);
  public
    hRegion: THandle;
    procedure RefreshRegion;
    procedure WMNCMLButtonDown(var Message: TMessage); message WM_NCLBUTTONDOWN;
  end;

var
  Form12: TForm12;

implementation

{$R *.dfm}

procedure TForm12.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  RefreshRegion;
end;

procedure TForm12.FormCreate(Sender: TObject);
begin
  RefreshRegion;
end;

procedure TForm12.RefreshRegion;
begin
  hRegion := CreateEllipticRgn(0, 0, Width, Height);
  SetWindowRgn(Handle, hRegion, True);
  DeleteObject(hRegion);
end;

procedure TForm12.WMNCMLButtonDown(var Message: TMessage);
const
  EnableFulDrag: UINT = 1;
var
  TmpBool: UINT;
begin
  SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @TmpBool, 0);
  SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, EnableFulDrag, nil, 0);
  inherited;
  SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TmpBool, nil, 0);
end;

end.


Добавлено @ 14:27 
А, блин... не внимательно прочитал. Что-то про рамку подумал а не про bsNone smile

Добавлено @ 14:40 
Тогда вот так:

Код

unit Unit12;

interface

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

type
  TForm12 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
      var Resize: Boolean);
    procedure FormCreate(Sender: TObject);
  public
    hRegion: THandle;
    procedure RefreshRegion;
    procedure WMNCMLButtonDown(var Message: TMessage); message WM_NCLBUTTONDOWN;
  end;

var
  Form12: TForm12;

implementation

type
  THackScrollingWinControl = class(TScrollingWinControl);

{$R *.dfm}

procedure TForm12.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  RefreshRegion;
end;

procedure TForm12.FormCreate(Sender: TObject);
begin
  BorderStyle := bsNone;
  SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE)
    or WS_THICKFRAME or WS_BORDER);
  RefreshRegion;
end;

procedure TForm12.FormShow(Sender: TObject);
begin
  THackScrollingWinControl(Self).AutoScroll := True;
  if not THackScrollingWinControl(Self).AutoScroll then
    ShowMessage('qwe');
end;

procedure TForm12.RefreshRegion;
begin
  hRegion := CreateEllipticRgn(0, 0, Width, Height);
  SetWindowRgn(Handle, hRegion, True);
  DeleteObject(hRegion);
end;

procedure TForm12.WMNCMLButtonDown(var Message: TMessage);
const
  EnableFulDrag: UINT = 1;
var
  TmpBool: UINT;
begin
  SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, @TmpBool, 0);
  SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, EnableFulDrag, nil, 0);
  inherited;
  SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TmpBool, nil, 0);
end;

end.
 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

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

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

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

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

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


 




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


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

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