Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.06.21;
Скачать: CL | DM;

Вниз

А баг всё равно есть   Найти похожие ветки 

 
Elec3C ©   (2008-01-31 15:35) [0]

http://delphimaster.net/view/11-1184948750/

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


 
Elec3C ©   (2008-02-04 17:41) [1]

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


 
AndreyRus ©   (2008-02-04 17:51) [2]

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

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


 
Elec3C ©   (2008-02-05 18:32) [3]


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

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


 
Elec3C ©   (2008-02-06 20:01) [4]

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


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

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


 
Elec3C ©   (2008-02-06 22:33) [6]

Значит я делаю так:
...
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 22:44) [7]

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


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

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


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

Вот примерчик. Если не обременит, проверь, как форма будет себя вести.
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 02:02) [10]

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

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


 
Elec3C ©   (2008-02-07 02:13) [11]

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

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


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

Чтобы форма не прыгала нужно 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:28) [13]

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



Страницы: 1 вся ветка

Текущий архив: 2009.06.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1240982320
Iriss
2009-04-29 09:18
2009.06.21
TSaveDialog


2-1240914551
Pasha_777
2009-04-28 14:29
2009.06.21
Referrer и POST запрос.


15-1239871463
12
2009-04-16 12:44
2009.06.21
«Интерфейс пользователя» → Диалоги


15-1239357142
Kostafey
2009-04-10 13:52
2009.06.21
Посоветуйте почтовую программу


2-1240983414
Nadan
2009-04-29 09:36
2009.06.21
Создание запроса в ADO