作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Delphi XE4,下面是我的示例应用程序。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect;
State: TOwnerDrawState);
public
procedure AfterConstruction; override;
end;
var
Form1: TForm1;
implementation
uses System.Math;
{$R *.dfm}
procedure TForm1.AfterConstruction;
begin
inherited;
ListBox1.Style := lbOwnerDrawVariable;
ListBox1.Items.Add('o'#9'Line 1');
ListBox1.Items.Add('o'#9'Line 2');
ListBox1.Items.Add('o'#9'Line 3');
ListBox1.Items.Add('o'#9'Line 4');
ListBox1.Items.Add('o'#9'Line 5');
end;
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:
TRect; State: TOwnerDrawState);
const C: array[boolean] of TColor = (clRed, clGreen);
var L: TListBox;
S: string;
iTextHeight: integer;
begin
L := Control as TListBox;
L.Canvas.Font.Color := C[Index < 2];
S := L.Items[Index];
iTextHeight := Max(Rect.Height, L.Canvas.TextHeight(S) + 2);
SendMessage(L.Handle, LB_SETITEMHEIGHT, Index, iTextHeight);
Rect.Height := iTextHeight;
L.Canvas.FillRect(Rect);
L.Canvas.TextOut(Rect.Left, Rect.Top + 1, S);
end;
end.
使用 TListBox.OnDrawItem 事件的目的是在我的实际应用程序中显示一些具有不同字体颜色的项目。有没有办法在TListBox.TabWidth的基础上扩展TListBox.DrawItem事件中的制表符?
最佳答案
这段代码对我有用。
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect:
TRect; State: TOwnerDrawState);
var //...
P: TDrawTextParams;
begin
//...
P.cbSize := SizeOf(P);
P.iTabLength := 5;
P.iLeftMargin := 0;
P.iRightMargin := 0;
DrawTextEx(L.Canvas.Handle, PChar(S), S.Length, Rect, DT_EXPANDTABS or DT_TABSTOP, @P);
end;
关于delphi - 如何根据 TListBox.TabWidth 属性扩展 TListBox.OnDrawItem 事件中的制表符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24134252/
我正在使用 Delphi XE4,下面是我的示例应用程序。 unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.S
我正在尝试实现 tablayout,我想根据各个选项卡中的文本内容设置选项卡的宽度,现在它设置相等,这导致小文本,选项卡宽度感觉更高。 最佳答案 试试这个: public void wrapTabIn
在工作中,我们是几个开发人员,没有代码风格指南,一些开发人员使用制表符缩进,而另一些开发人员使用 4 个空格(幸运的是,没有人使用不同于 4 个空格的空格缩进)。通常这不是(大)问题,因为在我们的编辑
我是一名优秀的程序员,十分优秀!