Изменение размеров формы

  • Автор темы GRLEX
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

GRLEX

Привет всем. Поделитесь мыслями по поводу одной вещи:
В проекте есть главная форма и несколько дочерних.
необходимо реализовать следующее:
когда пользователь тащит за край формы, тоесть изменяет ее размер
(либо по горизонтали, либо по вертикали) то размер формы пропорционально изменяется в пропорции 4х3
Спасибо за предложения.
 
S

Silver Wind

Собственно вот самый очевидный вариант:

Код:
procedure TForm1.FormResize(Sender: TObject);
begin
Height:=(Width*3 div 4);
end;
 
G

GRLEX

да я так пробовал, работает, но опять же возникает проблема, целый день пытаюсь ее решить.
Суть проблемы:
Когда тянешь форму, то размер пропорционально изменяется, но происходит смигивание.
тоесть прорисовывается край формы со старым Height, пока не отпустишь кнопку мыши.
Создается впечатление, что гдето всетаки запоминается старое значение height.
когдато на с++ я делал подобное, и использовал для устранения этого функцию, но в упор не помню какую((((
Есть соображения?

Пробовал перехватывать оконную процедуру, но эффект тот же...
Код:
procedure TForm1.WndProc(var Message: TMessage);
begin
if Message.Msg = WM_SIZE then
begin
Height := (Width *3)div 4;
end;
inherited;
end;
 
S

Silver Wind

WM_SIZE - возникает уже тогда, когда изменение размера завершено, попробуй перехватывать WM_SIZING - возникает при изменении размеров.

Вот что по этому поводу есть в справке:
Код:
The WM_SIZING message is sent to a window that the user is resizing. By processing this message, an application can monitor the size and position of the drag rectangle and, if needed, change its size or position.

fwSide = wParam;		 // edge of window being sized 
lprc = (LPRECT) lParam; // screen coordinates of drag rectangle 


Parameters

fwSide

Value of wParam. Indicates which edge of the window is being sized. This parameter can be a combination of the following values:

Value	Meaning
WMSZ_BOTTOM	Bottom edge
WMSZ_BOTTOMLEFT	Bottom-left corner
WMSZ_BOTTOMRIGHT	Bottom-right corner
WMSZ_LEFT	Left edge
WMSZ_RIGHT	Right edge
WMSZ_TOP	Top edge
WMSZ_TOPLEFT	Top-left corner
WMSZ_TOPRIGHT	Top-right corner


lprc

Address of a RECT structure with the screen coordinates of the drag rectangle. To change the size or position of the drag rectangle, an application must change the members of this structure. 

Return Values

An application should return TRUE if it processes this message.

See Also

Ну и изменяй пропорции в перехваченом обработчике не через Height и Width, а через lParam.
 
G

GRLEX

Спасибо большое, все получилось :)

/MODERATOR/ Без спасибов: +1 в репу Silver Wind'y и хватить
 
G

GRLEX

Новая проблема. Со статической формой все идеально, проблема возникла при динамическом создании формы.
Есть свой класс, в котором хранится форма.
в конструкторе класса я создаю много чего и в том числе форму
Код:
constructor TVideoWindow.Create(Parent : TAdvPanel; NProcessor, NCamera : integer; NameForm : string; WinProf : TProfile);
..........................
Begin
inherited create;
//------- Create childForm -----
FForm := TCusForm.CreateNew(nil);
FForm.Parent := Parent;
FForm.OnClose := FormClose;
.................................
TCusForm - это класс, унаследованный от TForm. Он для того чтоб подменить процедуру обработки окна
Код:
 TCusForm = class(TForm)
procedure WndProc(var Message: TMessage);
Public
VideoFormat : integer;
end;
Ну и соответственно сама WinProc
Код:
procedure TCusForm.WndProc(var Message: TMessage);
begin
if (( Message.Msg = WM_SIZING )and( VideoFormat = 1 ))then
begin
..........................................
end;
inherited;
end;
Проблема в том, что эта процедура не вызывается((

2: moderator - не работает чето + в репу Silver Wind'у
404 и фсе.
 
S

Silver Wind

Попробуй так:
Код:
TCusForm = class(TForm)
...
procedure WndProc(var Message: TMessage); override;
...
 
G

GRLEX

Уже нашол!
Семен Семеныч :huh: :)
override забыл.

а + те не могу ткнуть((
 
R

Ruster

А как сделать чтобы прога на полный экран причём пуска не было видно?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!