Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

А баг всё равно есть [Delphi, 7, Vista]


Elec3C ©   (2008-01-31 15:35:00) 

http://delphimaster.ru/cgi-bin/forum.pl?id=1184948750&n=10

Если запустить программу и при выполнении её изменить стиль на стандартный(или классический) и наоборот.


Elec3C   (2008-02-07 02:28:00) [1]

Вопрос решён! Спасибо!


Дмитрий К   (2008-02-07 02:20:00) [2]

Чтобы форма не прыгала нужно btn1Click изменить так:
var r: TRect; p: TPoint; formsize: TSize;
begin
 form.BeginUpdate;
 r := form.ClientRect;
 p := form.Position;
 formsize.cx := form.Width;
 formsize.cy := form.height;
 form.Style := form.Style xor (WS_THICKFRAME or WS_MAXIMIZEBOX);
 form.ClientWidth := r.Right - r.Left;
 form.ClientHeight := r.Bottom - r.top;
 form.Position := MakePoint(p.X + (formsize.cx - form.Width) div 2, p.y + (formsize.cy - form.Height) div 2);
 form.EndUpdate;
end;


> А в XP нормально работает [9]?

Нормально.


Elec3C   (2008-02-07 02:13:00) [3]

При создании нужно поставить and not (WS_THICKFRAME or WS_MAXIMIZEBOX)и всё нормально(или нужно вообще убрать его и asm'блерной части - хотя не проверял).

А в XP нормально работает [9]?


Elec3C   (2008-02-07 02:02:00) [4]

При запуске программы и при смене тем окно остаётся нормальным, т.б. никаких глюков[1] не наблюдается!

При нажатии на Button1 форма поднимается по диагонали справа на лево и опускается слева на право.


Дмитрий К   (2008-02-07 01:00:00) [5]

Вот примерчик. Если не обременит, проверь, как форма будет себя вести.
program thickframetest;

uses
 Windows, Messages, KOL;

type
 PForm1 = ^TForm1;
 TForm1 = object(TObj)
 private
   form, btn1, btn2: PControl;
   function formMessage(var Msg: TMsg; var Rslt: Integer): Boolean;
   procedure btn1Click(Sender: PObj);
 end;

procedure NewForm1(var Result: PForm1; AParent: PControl);
begin
 New(Result, Create);
 with Result^ do
 begin
   form := NewForm(AParent,'Test');
   form.Add2AutoFree(Result);
   form.OnMessage := formMessage;
   form.Style := form.Style and not (WS_THICKFRAME or WS_MAXIMIZEBOX);
   btn1 := NewButton(form, 'Button1');
   btn1.OnClick := btn1Click;
   btn2 := NewButton(form, 'Button2').PlaceRight.ResizeParent;
//    form.CanResize := False;
 end;
end;
{ TForm1 }

procedure TForm1.btn1Click(Sender: PObj);
var r: TRect;
begin
 r := form.ClientRect;
 form.Style := form.Style xor (WS_THICKFRAME or WS_MAXIMIZEBOX);
 form.ClientWidth := r.Right - r.Left;
 form.ClientHeight := r.Bottom - r.top;
end;

function TForm1.formMessage(var Msg: TMsg; var Rslt: Integer): Boolean;
begin
 result := false;
{  if msg.message = wm_themechanged then
 begin

 end;}
end;

var Form1: PForm1;
begin
 NewForm1(Form1, nil);
 Run(Form1.form);
end.


Elec3C   (2008-02-07 00:31:00) [6]

У меня форма изначально CanResize := False, а при этом размеры поменять, без CanResize := True, CanResize := False, нельзя.


Дмитрий К   (2008-02-06 22:44:00) [7]

Попробуй без смены состояния CanResize.


Elec3C   (2008-02-06 22:33:00) [8]

Значит я делаю так:
...
wWinSize : array[0..1] of Word;
...
в OnCreate:
wWinSize[0] := Form.ClientWidth; wWinSize[1] := Form.ClientHeight;
...
OnMessage(WM_THEMECHANGED):
Form.CanResize := True;
Form.SetClientSize(wWinSize[0], wWinSize[1]);
Form.CanResize := False;
...

Всё равно криво работает! Или я что-то не так делаю?


Дмитрий К   (2008-02-06 20:33:00) [9]

Запоминать ClientSize, по приходу WM_THEMECHANGED устанавливать его в прежнее значение.


Elec3C   (2008-02-06 20:01:00) [10]

Не могу понять, как обновить окно, чтобы избавиться от глюка[1]?


Elec3C   (2008-02-05 18:32:00) [11]


> стремится к нулю.

Но глюк, всё равно присутствует, частично.


AndreyRus   (2008-02-04 17:51:00) [12]

> Если запустить программу и при выполнении её изменить стиль на стандартный(или классический) и наоборот.

Не парься!
Вероятность это события стремится к нулю.


Elec3C   (2008-02-04 17:41:00) [13]

Нужно отлавливать WM_THEMECHANGED и изменять что-то, только вот что?


Наверх

Титульная страница Поиск, карта сайта Написать письмо