Delphi - Rich edit 不显示在动态创建的表单上

Delphi - Rich edit doesn't show on dynamically created form

我在我的程序中动态创建了一个表单,它可以完美地工作和显示,但是我也动态创建的 RichEdit 根本不想显示在表单上。如何在表单上显示 RichEdit?

我使用的代码:

procedure TfrmPuntehou.lblAbbClick(Sender: TObject);
var
  frmAbb: TForm;
  redAbbreviations: TRichEdit;
begin
  //opens abbreviations
  frmAbb := TForm.Create(nil);
  redAbbreviations := TRichEdit.Create(nil);
  try
    with frmAbb do
    begin
      Width := 400;
      Height := 400;
      Caption := 'Abbreviations';
      Position := poOwnerFormCenter;
      ShowModal;
    end;
    with redAbbreviations do
    begin
      Parent := frmAbb;
      Width := 300;
      Height := 353;
      redAbbreviations.Paragraph.TabCount := 2;
      redAbbreviations.Paragraph.Tab[0] := 30;
      redAbbreviations.Paragraph.Tab[1] := 60;
      Lines.Add('DEV'+#9+'='+#9+'SWD Development');
      Lines.Add('1660'+#9+'='+#9+'1660s');
      Lines.Add('2.1'+#9+'='+#9+'2.1s');
      Lines.Add('MIN'+#9+'='+#9+'Minis');
      Lines.Add('SR'+#9+'='+#9+'Stockrods');
      Lines.Add('PR'+#9+'='+#9+'Pinkrods');
      Lines.Add('HR'+#9+'='+#9+'Hotrods');
      Lines.Add('HM'+#9+'='+#9+'Heavy Metals');
      Lines.Add('V8'+#9+'='+#9+'V8s');
      Lines.Add('MA'+#9+'='+#9+'Midgets A');
      Lines.Add('MB'+#9+'='+#9+'Midgets B');
      Lines.Add('SP'+#9+'='+#9+'Sprints');
      Lines.Add('CRO'+#9+'='+#9+'Crosskarts');
      Lines.Add('LM'+#9+'='+#9+'Late Models');
      Font.Size := 13;
    end;
  finally
    frmAbb.Free;
  end;
end;

您忘记使其可见:

redAbbreviations.Visible := TRUE;

并且在为 RichEdit 设置属性之前显示表单模态。

这是正确的重新格式化代码:

procedure TForm1.Button1Click(Sender: TObject);
var
    frmAbb           : TForm;
    redAbbreviations : TRichEdit;
begin
    // opens abbreviations
    frmAbb := TForm.Create(nil);
    try
        redAbbreviations := TRichEdit.Create(frmAbb);
        frmAbb.Width                        := 400;
        frmAbb.Height                       := 400;
        frmAbb.Caption                      := 'Abbreviations';
        frmAbb.Position                     := OwnerFormCenter;
        redAbbreviations.Parent             := frmAbb;
        redAbbreviations.Width              := 300;
        redAbbreviations.Height             := 353;
        redAbbreviations.Paragraph.TabCount := 2;
        redAbbreviations.Paragraph.Tab[0]   := 30;
        redAbbreviations.Paragraph.Tab[1]   := 60;
        redAbbreviations.Lines.Add('DEV'+#9+'='+#9+'SWD Development');
        redAbbreviations.Lines.Add('1660'+#9+'='+#9+'1660s');
        redAbbreviations.Lines.Add('2.1'+#9+'='+#9+'2.1s');
        redAbbreviations.Lines.Add('MIN'+#9+'='+#9+'Minis');
        redAbbreviations.Lines.Add('SR'+#9+'='+#9+'Stockrods');
        redAbbreviations.Lines.Add('PR'+#9+'='+#9+'Pinkrods');
        redAbbreviations.Lines.Add('HR'+#9+'='+#9+'Hotrods');
        redAbbreviations.Lines.Add('HM'+#9+'='+#9+'Heavy Metals');
        redAbbreviations.Lines.Add('V8'+#9+'='+#9+'V8s');
        redAbbreviations.Lines.Add('MA'+#9+'='+#9+'Midgets A');
        redAbbreviations.Lines.Add('MB'+#9+'='+#9+'Midgets B');
        redAbbreviations.Lines.Add('SP'+#9+'='+#9+'Sprints');
        redAbbreviations.Lines.Add('CRO'+#9+'='+#9+'Crosskarts');
        redAbbreviations.Lines.Add('LM'+#9+'='+#9+'Late Models');
        redAbbreviations.font.Size :=13;
        redAbbreviations.Visible   := TRUE;
        frmAbb.ShowModal;
    finally
        frmAbb.Free;
    end;
end;

ShowModalfrmAbb 的初始化部分移动到代码末尾,就在 finally 语句之前。

procedure TForm1.Button1Click(Sender: TObject);
var
  frmAbb: TForm;
  redAbbreviations: TRichEdit;
begin
  //opens abbreviations
  frmAbb := TForm.Create(nil);
  try
    redAbbreviations := TRichEdit.Create(frmAbb);
    with frmAbb do
    begin
      Width := 400;
      Height := 400;
      Caption := 'Abbreviations';
      Position := poOwnerFormCenter;
    end;
    with redAbbreviations do
    begin
      Parent := frmAbb;
      Width := 300;
      Height := 353;
      redAbbreviations.Paragraph.TabCount := 2;
      redAbbreviations.Paragraph.Tab[0] := 30;
      redAbbreviations.Paragraph.Tab[1] := 60;
      Lines.Add('DEV'+#9+'='+#9+'SWD Development');
      Lines.Add('1660'+#9+'='+#9+'1660s');
      Lines.Add('2.1'+#9+'='+#9+'2.1s');
      Lines.Add('MIN'+#9+'='+#9+'Minis');
      Lines.Add('SR'+#9+'='+#9+'Stockrods');
      Lines.Add('PR'+#9+'='+#9+'Pinkrods');
      Lines.Add('HR'+#9+'='+#9+'Hotrods');
      Lines.Add('HM'+#9+'='+#9+'Heavy Metals');
      Lines.Add('V8'+#9+'='+#9+'V8s');
      Lines.Add('MA'+#9+'='+#9+'Midgets A');
      Lines.Add('MB'+#9+'='+#9+'Midgets B');
      Lines.Add('SP'+#9+'='+#9+'Sprints');
      Lines.Add('CRO'+#9+'='+#9+'Crosskarts');
      Lines.Add('LM'+#9+'='+#9+'Late Models');
      Font.Size := 13;
    end;
    frmAbb.ShowModal;
  finally
    frmAbb.Free;
  end;
end;