- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在花了很多时间之后
'''
procedure Tf100.lvListCustomDrawItem(Sender: TCustomListView; Item: TListItem;
State: TCustomDrawState; var DefaultDraw: Boolean);
begin
Sender.Canvas.Font.Color := clRed; // default was clBlack
end;
procedure Tf100.lvListCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
Sender.Canvas.Font.Color := clRed; // Default was clBlack;
end;
iIndex := 0;
repeat
pbProgress.Position := iIndex + 1;
try
lvList.SetFocus; // The color should become clRED
lvList.ItemIndex := iIndex;
lvList.Items[iIndex].Selected := true;
lvList.Selected.MakeVisible(True);
sFile := txtFolder.text + '\' + lvList.Items[iIndex].Caption;
DisplayPicture(sFile);
application.processmessages ;
txtCurrent.Text := Format('%D of %D',[iIndex + 1, iMax]);
bOke := ProcessFile(sFile);
if (bOke) then begin
// Current index color should become clGREEN but I don't know how
end;
except
on E:Exception do begin
bOke := False;
msgbox(Format('Error at index %d',[iIndex]),'ooops',acError,[mbOk],['Press']);
end;
end;
if (bOke) then
Inc(FGood)
else
Inc(FWrong);
UpdateStats(Self);
Inc(iIndex);
until (iIndex = iMax);
最佳答案
我没有安装Lazarus,所以下面是用Delphi完成的。我 99.9% 确定它也适合你。
您已经在 OnCustomDrawItem()
中看到了如何定义项目的颜色。和 OnCustomDrawSubItem()
事件。
这里重要的是要了解 TListView
不会在任何地方保存该颜色设置。如果您考虑上下滚动列表, ListView 会调用 OnCustomDrawItem()
和 OnCustomDrawSubItem()
每个项目的事件,因为它们需要被绘制。一个项目的状态可能自它之前显示以来已经改变。
因此,您需要将文件处理的结果保存在某处,以便您可以在 OnCustomDrawItem()
中告诉 ListView 为每个项目使用什么颜色。和 OnCustomDrawSubItem()
事件。
我建议您创建一个数据结构,一个包含文件名和处理结果的简单类。然后,当您将文件添加到 ListView 进行显示时,您还将对每个文件对象的引用添加到 ListView 。
首先是一些类型和变量声明
type
// enum for the different processing states
TProcessEnum = (NotDone, Processing, DoneSucceeded, DoneFailed);
// class for holding file names and process state
TMyFileData = class
FileName: string;
ProcessState: TProcessEnum;
end;
// Array type for file data
TMyFileDataArray = array of TMyFileData;
const
// string representation for process states
ProcessStates: array of string = ['Not done', 'Processing', 'Succeeded', 'Failed'];
var
// data array
MyFileDataArray: TMyFileDataArray;
procedure TForm21.FormCreate(Sender: TObject);
var
i: integer;
begin
SetLength(MyFileDataArray, 9);
for i := 0 to Length(MyFileDataArray)-1 do
begin
MyFileDataArray[i] := TMyFileData.Create;
MyFileDataArray[i].FileName := 'c:\tmp\example'+IntToStr(i)+'.txt';
MyFileDataArray[i].ProcessState := NotDone;
end;
end;
AddItem()
的第二个参数稍后可以在
OnCustomDrawItem()
中访问它和
OnCustomDrawSubItem()
事件使用
Item.Data
procedure TForm21.Button1Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to Length(MyFileDataArray)-1 do
begin
ListView1.AddItem(MyFileDataArray[i].FileName, MyFileDataArray[i]);
ListView1.Items[i].SubItems.Add(ProcessStates[ord(MyFileDataArray[i].ProcessState)]);
end;
end;
procedure TForm21.Button2Click(Sender: TObject);
var
i: integer;
begin
for i := 0 to Length(MyFileDataArray)-1 do
begin
MyFileDataArray[i].ProcessState := processing;
ListView1.Items[i].SubItems[0] := ProcessStates[ord(MyFileDataArray[i].ProcessState)];
ListView1.Repaint; // force a visual update
sleep(500); // simulate processing delay
MyFileDataArray[i].ProcessState := TProcessEnum(random(2) + 2);
ListView1.Items[i].SubItems[0] := ProcessStates[ord(MyFileDataArray[i].ProcessState)];
ListView1.Repaint; // force a visual update
end;
end;
function TForm21.ItemColor(ProcessState: TProcessEnum): TColor;
begin
case ProcessState of
DoneSucceeded: Result := clGreen;
Processing,
DoneFailed: Result := clRed;
else
Result := clBlack;
end;
end;
OnCustomDrawItem()
和
OnCustomDrawSubItem()
只有以下行
Sender.Canvas.Font.Color := ItemColor(TMyFileData(Item.Data).ProcessState);
State: TCustomDrawState
进一步修改背景或字体颜色。值(value)。
关于lazarus - 在 Lazarus 中处理项目后调整 TListview 中选定项目的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59469863/
我正在使用 Embarcadero 的 C++ Builder XE8。我有一个 ListView 并动态添加列及其项目。我需要一个图像列表,因为我想使用 (ListItem->SubItemImag
我正在尝试在 TListView 中放置一个图标当某些行显示时,我有 TImageList与加载的图像,但它没有连接。我的代码是这样的 with sListView2 do begin test
当使用 TListView 并且主题在应用程序中被禁用时,焦点和选定的项目显示如下: 注意两个图像中三角形所在的位置。项目的绘制框不会在图标出现的位置绘制。在 TListBox 中,绘制的项目填充整个
我已经使用 TListView 制作了我的应用程序,以将主数据集显示为列表作为导航记录的方式。我已将 LiveBindings 与 Sync * 连接一起使用。 主要问题是它将整个表加载到内存中。大
我有一个 TListView 的后代,它提供了一些附加功能,例如排序和从 TDataset 加载自身的能力。我现在希望进一步扩展这个组件,以便在将项目添加到 ListView 时可以指定绘图的某些方面
TListView 控件是否有一个在控件滚动时触发的事件? 我宁愿不必对 TListView 控件进行子类化。 最佳答案 这非常有效,但可能会违反您问题的限制。 在包含使用 TListView 的表单
编写 FMX 应用程序并使用以下文档... http://docwiki.embarcadero.com/RADStudio/Berlin/en/Customizing_FireMonkey_List
我创建了 ListView 并添加了复选框来检查每一行(如果需要)。一切都很好,直到 ListView 中有很多项目,因此需要对其进行排序。我在线检查,然后发现如果滚动滚动条,复选框不会与其他内容一起
我正在对 tlistview 进行编程,以便它从右到左显示其列(以便正确显示希伯来语文本)。我在表单的创建方法中使用以下代码,其中“lv”是 ListView SetWindowLong (lv
我有一个包含 3 列的 Tlistview,我需要来自 Tcollection 对象,如下所示 FListeDispoProduit := TListeDispoProduit.Create(TPro
我有一个显示小缩略图的TListView(ViewStyle:=vsIcon)。在运行时,我将图像分配给项目: for i := 0 to Total - 1 DO with ListVie
我正在使用 Delphi 2010,并且我试图允许用户在 TListView 中的每行 2 个选项之间进行选择。使用 TListView,我可以将样式设置为 vsReport 并启用复选框,但这只会让
当项目添加到 TListView 时,如何捕获事件? 根据文档,我认为 OnInsert 事件可以完成这项工作。它甚至将实际的 TListItem 对象传递给处理程序: OnInsert Occurs
是否可以修复 TListView 中 subitem 图像的绘制,以便它们不会如图所示在左侧被截断? 最佳答案 嗯,Pieter van Wyk,我做了一个简单的示例,展示了如何自行绘制 TListV
使用标准 TListView 组件 (ViewStyle = vsReport),我附加了一个 TImageList 并成功将图像添加到第一列 (Item.ImageIndex := 0) )以及后续
带有 FireMonkey 的 Delphi 10.4.1。 我在 TListView 上有 50 个项目,ID 从 1 到 50。这里没有发布代码,因为我什至不知道从哪里开始。 如果我搜索 ID=3
我需要更改我的 listView 的所有标题的背景颜色以突出显示它们。我在 Object Inspector 上一无所获,在 Style Designer 上也一无所获,你们能给我一些指导吗? 最佳答
我有一个 ViewStyle 设置为 vsReport 的 TListView。如何更改网格的颜色和网格线的宽度。 D2009 中的网格线有点太粗了,我想要与 D5 中的宽度相同。 谢谢 最佳答案 没
我正在使用 TListView我已经成功地填充了每个项目的标题和第一个子项目。请参见下面的示例。 user pass working status valid data1 pass -
我有一个包含 4 列的 TListview(当然都是字符串),但是,我在其中存储数据: 标题:任意字符串 SubItems[0]:整数,例如'5016' SubItems[1]:日期,例如'03/22
我是一名优秀的程序员,十分优秀!