Форум: "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.006 c