有一堆字符串要用类似标题上说的两个控件来显示。我想把每一行的字体大小和颜色可以定义。类似聊天室的东西,怎样做?

解决方案 »

  1.   

    把Listbox的style属性改为lbOwnerDrawVariable以后,要怎么显示你就可以随心所欲了。
    只在两个事件中写代码即可:procedure TForm1.ListBox1MeasureItem(Control: TWinControl; Index: Integer;
      var Height: Integer);
    begin
      Height := Index Mod 3 * 2 + ListBox1.ItemHeight; 
     //你要画的每个Item的高度,根据字体不同而不同,这是随便取了几个不同的值
    end;procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
      ListBox1.Canvas.Brush.Color := Index * $A0F0F0;
      ListBox1.Canvas.FillRect(Rect);
    //上面的代码是填充Item的背景,下面画出每个Item的文字,可以为每个Item设置不同的字体及着色
      if Index mod 2 = 0 then
      begin
        ListBox1.Canvas.Font.Name := 'Impact';
        ListBox1.Canvas.Font.Color := clLime;
      end
      else
      begin
        ListBox1.Canvas.Font.Name := 'Tahoma';
        ListBox1.Canvas.Font.Color := clRed;
      end;
    //用Canvas的TextOut画出文字:
      ListBox1.Canvas.TextOut(Rect.Left, Rect.Top, ListBox1.Items[Index]);
    end;
      

  2.   

    用TRichEditprocedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
    begin
      s:= 'sdfsdf';
      RichEdit1.SelAttributes.Color := clRed;
      RichEdit1.Lines.Add(s);
      RichEdit1.SelAttributes.Color := clBlue;
      RichEdit1.Lines.Add(s);
    end;
      

  3.   

    用richedit代替memo,可以设置字体和颜色