Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "KOL";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.005 c
13-1124000957
cherrex
2005-08-14 10:29
2009.06.21
COM и .NET


3-1222488895
девушка
2008-09-27 08:14
2009.06.21
Контроль непрерывности и непересечения интервала дат


11-1193797466
Trible
2007-10-31 05:24
2009.06.21
Анимация окна


2-1241201738
Андрей (начинающий)
2009-05-01 22:15
2009.06.21
TWebBrowser и программный скроллинг.


15-1239459353
Nic
2009-04-11 18:15
2009.06.21
Распараллелить интернет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский