Форум: "Основная";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
ВнизСтранное поведение якорей TPanel+TEdit+Anchors Найти похожие ветки
← →
Sha © (2009-03-09 12:46) [0]Вот с чем столкнулся. Отлаживаю компонент. Пытаюсь понять, почему он некорректно перерисовывает себя в ран-тайме (а именно, не действуют якоря у некоторых подкомпонентов).
Упрощенно все сводится к такому примеру. На форме - заякоренная по верху и по низу или выравненная панель, на панели - заякоренный по низу едит. При создании формы (в OnCreate) меняем, например, ее высоту и размер шрифта формы. В результате на время создания едит забывает про свои якоря.
Интересно, что если переставить операторы в FormCreate, то едит не теряет память.
Надеюсь, этому есть разумное объяснение...
unit Unit1;
interface
uses
StdCtrls,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Сontrols, Forms, Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Height:=Height+100;
Font.Size:=10;
end;
end.
object Form1: TForm1
Left = 192
Top = 107
Width = 293
Height = 105
Caption = "Form1"
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "MS Sans Serif"
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
DesignSize = (
285
78)
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 0
Top = 0
Width = 137
Height = 78
Align = alLeft
Caption = "Panel1"
TabOrder = 0
DesignSize = (
137
78)
object Edit1: TEdit
Left = 8
Top = 47
Width = 121
Height = 21
Anchors = [akLeft, akBottom]
TabOrder = 0
Text = "Edit1"
end
end
object Edit2: TEdit
Left = 152
Top = 48
Width = 121
Height = 21
Anchors = [akLeft, akBottom]
TabOrder = 1
Text = "Edit2"
end
end
← →
Sha © (2009-03-09 12:54) [1]PS
Просьба не воспринимать буквально :)
> едит забывает про свои якоря.
</I
> то едит не теряет память.
>
← →
sniknik © (2009-03-09 14:29) [2]> Интересно, что если переставить операторы в FormCreate, то едит не теряет память.
или закомментарить Font.Size:=10;... добавление чего то другого, типа Edit1.Text:= "hkj";/PixelsPerInch:= 120; вместо него не влияет...
← →
Тимохов © (2009-03-10 13:25) [3]Да... интересная ошибка.
Дело в том, что TEdit реагирует на изменение размера шрифта и вот здесь TCustomEdit.AdjustHeight меняет свою высоту в момент изменения размера шрифта, что в свою очередь приводит к вызову TControl.UpdateAnchorRules, где в строкеif Parent <> nil then
Parent.UpdateControlOriginalParentSize(Self, FOriginalParentSize);
запоминается FOriginalParentSize, который на момент вызова уже учитывает + 100 у родительской панели.
И в дальнейшем при учете acnhors для Edit1 он считает, что у него FOriginalParentSize уже больше на 100 и не хочет себя сдвигать.
Зоопарк в общем.
Очевидный недочет.
Думаю, что стоит указать на него разработчику через QC.
← →
Тимохов © (2009-03-10 15:57) [4]Если не против, то сам репорт бросил. Пусть разбираются.
http://qc.embarcadero.com/wc/qcmain.aspx?d=72087
← →
Sha © (2009-03-10 16:34) [5]Тогда и TLabel туда до кучи добавить надо.
← →
Тимохов © (2009-03-10 16:36) [6]Видимо, да. Допишу сейчас.
← →
Тимохов © (2009-03-11 00:51) [7]Приветствуется любая информация о других компонетов, которые себя ведут также же плохо в аналогичном случе.
← →
Германн © (2009-03-11 01:28) [8]
> Тимохов © (11.03.09 00:51) [7]
>
> Приветствуется любая информация о других компонетов, которые
> себя ведут также же плохо в аналогичном случе.
>
А разве того, что уже приведено Sha © (09.03.09 12:46) и тобой мало?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2010.02.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c