Delphi 7编辑组件创建

lts*_*tar 3 delphi user-interface

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

红色标记的编辑在Forms OnCreate过程中创建,而其他编辑在另一个事件上创建.

编辑:

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;
Run Code Online (Sandbox Code Playgroud)

被召唤:

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;
Run Code Online (Sandbox Code Playgroud)

被召唤:

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;
Run Code Online (Sandbox Code Playgroud)

再次召唤:

procedure TTuringmaschine.ZeichenAnfuegen;
begin
  self.Magnetband.ErweitereRechts;
end;
Run Code Online (Sandbox Code Playgroud)

被召唤:

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

终于被调用:

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;
Run Code Online (Sandbox Code Playgroud)

并且在OnCreate事件或另一个事件上调用构造函数.

TLa*_*ama 5

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

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
    AutoSize := False;
    Text := '#';
    Left := VLeft + 1;
    Top := 26;
    Parent := Self.Band;
    Font.Height := 40;
    Width := 48;
    Height := 48;
    SendToBack;
  end;
end;
Run Code Online (Sandbox Code Playgroud)