Delphi 7编辑组件创建

时间:2013-05-05 14:26:48

标签: delphi user-interface

根据Delphi 7中编辑组件的运行时创建,我遇到了问题。 因此,当我在程序运行“一段时间”后创建TEdit组件时,它完全有效。 但是,当我在Forms OnCreate事件中创建TEdit元素时,它们的高度错误。 此外,(几乎)同时创建的形状具有正确的高度。

The red marked Edits are created in the Forms OnCreate procedure, while the others are created on another event.

编辑:

procedure TTPLVisorForm.CreateZeichen(ZShape : TShape; ZEdit : TEdit; VLeft : integer);
begin
  with ZShape do
  begin
    Width := 50;
    Height := 50;
    Left := VLeft;
    Top := 25;
    Shape := stRectangle;
    Parent := self.Band;
    SendToBack();
  end;

  with ZEdit do
  begin
    Text := '#';
    Left := VLeft+1;
    Top := 26;
    Parent := self.Band;
    Font.Height := 48;
    Width := 48;
    Height := 48;
    SendToBack;
  end;
end;

被召唤:

procedure TZeichen.Anzeigen(Form : TObject; Left : integer);
begin
  self.Form := Form;

  self.ZShape := TShape.Create(TTPLVisorForm(self.Form).Band);
  self.ZEdit := TEdit.Create(TTPLVisorForm(self.Form).Band);

  TTPLVisorForm(Form).CreateZeichen(self.ZShape, self.ZEdit, Left);
end;

被召唤:

procedure TMagnetband.ErweitereRechts;
var
  Zeichen : TZeichenKette;
begin
  Zeichen := TZeichenKette.Create;
  self.LetztesZeichen.Naechstes := TZeichenKette(Zeichen);
  Zeichen.Vorheriges := self.LetztesZeichen;

  Zeichen.Zeichen.Anzeigen(self.Form,
                                      self.LetztesZeichen.Zeichen.ZShape.Left +
                                      self.LetztesZeichen.Zeichen.ZShape.Width +
                                      self.Padding);
  self.LetztesZeichen := Zeichen;
  self.Laenge := self.Laenge+1;
end;

再次召集:

procedure TTuringmaschine.ZeichenAnfuegen;
begin
  self.Magnetband.ErweitereRechts;
end;

被召唤:

procedure TTuringmaschine.PanelResize(Sender: TObject);
begin
  while self.Magnetband.GetRechtsMax < self.Panel.Width do
    self.ZeichenAnfuegen;
end;

最后通过以下方式调用:

Constructor TTuringmaschine.Create(Form : TObject);
var
  Breite : integer;
begin
  self.Zustand := 0;
  self.Form := TTPLVisorForm(Form);
  self.Panel := TTPLVisorForm(self.Form).Band;
  self.Magnetband := TMagnetband.Create(self.Form);
  TTPLVisorForm(Form).Band.OnResize := self.PanelResize;

  self.PanelResize(Nil);
  //self.CreateMagnetkopf;
end;

在OnCreate事件或其他事件中调用构造函数。

1 个答案:

答案 0 :(得分:5)

TEdit控件中的文本周围有一个边距,因此如果将Font.Height设置为48,如果控件具有{{1},控件的高度将不会精确到48 } property设置为True。我个人会减少字体的高度,并确保关闭AutoSize。您的AutoSize方法将如下所示:

CreateZeichen