【问题标题】:Delphi - Rich edit doesn't show on dynamically created formDelphi - 动态创建的表单上不显示丰富的编辑
【发布时间】:2021-04-28 23:20:15
【问题描述】:

我已经在我的程序中动态创建了一个表单,它可以完美地工作和显示,但是我也动态创建的 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;

【问题讨论】:

    标签: forms object delphi dynamic richedit


    【解决方案1】:

    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;
    

    【讨论】:

      【解决方案2】:

      你忘了让它可见:

      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;
      

      【讨论】:

      • 这就是问题所在,我之前确实尝试过,但仍然没有显示。所以我删除了它...
      • 你也放错了 Showmodal。我用正确的重新格式化代码编辑了我的答案。
      • @fpiette the 2nd try/finally 如果表单是 RichEdit 的所有者,则不需要。
      • @RemyLebeau 但是当 OP 做到这一点时,我把它变成了 nil。所以尝试/最终需要。
      • @RemyLebeau 根据您的评论编辑了我的代码。
      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多