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

Вниз

Странное поведение якорей 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
2-1260504031
KASioZ
2009-12-11 07:00
2010.02.07
TWebBrowser DOM


2-1260544819
Vol4
2009-12-11 18:20
2010.02.07
Работа светофора help


2-1260531371
alex ford
2009-12-11 14:36
2010.02.07
закинуть в ресурсы файлы


8-1202734993
jusalex
2008-02-11 16:03
2010.02.07
Использование TALWavePlayer из AudioLab


2-1260449124
Caster Troi
2009-12-10 15:45
2010.02.07
Парсинг файлов. TStream.