为什么我的 TListBox 项目没有改变它们的颜色?
Why are my TListBox items not changing their color?
这就是我从位于本地服务器上的列表中获取一些项目的方式。
我认为它仍然需要一些重构(很抱歉在 Delphi
中是这样的初学者),但是我想更好地理解为什么 ListItem
colors 未更改。
我做了一些调试,发现 if
条件对每种颜色都工作正常,ListItem
正在 接收 但我可能得到错误的参考或使用错误的 属性 来更改颜色。
完整代码如下:
procedure TFormLogin.TimerGetListTimer(Sender: TObject);
var
genset_response: String;
genset_amount: Integer;
i: Integer;
str_array: TStringDynArray;
lb_item: TListBoxItem;
begin
// Run this timer only 1 time for now
TimerGetList.Enabled := false;
// Clear all List items
lb_gensets.Clear;
// GET_LIST command to server
IdTCPClient1.IOHandler.WriteLn('GET_LIST');
// Server returns the List in a String
genset_response := IdTCPClient1.IOHandler.ReadLn();
// Remove all " from the String
genset_response := StringReplace(genset_response, '"', '',
[rfReplaceAll, rfIgnoreCase]);
// Separate data by divider
str_array := SplitString(genset_response, '|');
// Get how many items
genset_amount := StrToInt(str_array[1]);
// Populate the List
for i := 0 to (genset_amount - 1) do
begin
if (i = 0) then
begin
lb_gensets.Items.Add(str_array[2]);
end
else
begin
// Add items
lb_gensets.Items.Add(str_array[i + 2]);
end;
// Get current ListItem
lb_item := lb_gensets.ListItems[i];
if (lb_item.Text.Contains('Online')) then
begin
// Set online items to Green color
lb_item.TextSettings.FontColor := TAlphaColors.Mediumseagreen;
end;
if (lb_item.Text.Contains('OFF LINE')) then
begin
// Set Off Line items to Red color
lb_item.TextSettings.FontColor := TAlphaColors.Red;
end;
// End of FOR
end;
end;
默认情况下,控件使用当前样式项的值(参见 StyleLookup
属性)。
要使用自定义字体颜色,您必须从 ListItem:
中排除 TStyledSetting.FontColor
lb_item.StyledSettings:=lb_item.StyledSettings - [TStyledSetting.FontColor];
lb_item.TextSettings.FontColor := TAlphaColors.Red;
这就是我从位于本地服务器上的列表中获取一些项目的方式。
我认为它仍然需要一些重构(很抱歉在 Delphi
中是这样的初学者),但是我想更好地理解为什么 ListItem
colors 未更改。
我做了一些调试,发现 if
条件对每种颜色都工作正常,ListItem
正在 接收 但我可能得到错误的参考或使用错误的 属性 来更改颜色。
完整代码如下:
procedure TFormLogin.TimerGetListTimer(Sender: TObject);
var
genset_response: String;
genset_amount: Integer;
i: Integer;
str_array: TStringDynArray;
lb_item: TListBoxItem;
begin
// Run this timer only 1 time for now
TimerGetList.Enabled := false;
// Clear all List items
lb_gensets.Clear;
// GET_LIST command to server
IdTCPClient1.IOHandler.WriteLn('GET_LIST');
// Server returns the List in a String
genset_response := IdTCPClient1.IOHandler.ReadLn();
// Remove all " from the String
genset_response := StringReplace(genset_response, '"', '',
[rfReplaceAll, rfIgnoreCase]);
// Separate data by divider
str_array := SplitString(genset_response, '|');
// Get how many items
genset_amount := StrToInt(str_array[1]);
// Populate the List
for i := 0 to (genset_amount - 1) do
begin
if (i = 0) then
begin
lb_gensets.Items.Add(str_array[2]);
end
else
begin
// Add items
lb_gensets.Items.Add(str_array[i + 2]);
end;
// Get current ListItem
lb_item := lb_gensets.ListItems[i];
if (lb_item.Text.Contains('Online')) then
begin
// Set online items to Green color
lb_item.TextSettings.FontColor := TAlphaColors.Mediumseagreen;
end;
if (lb_item.Text.Contains('OFF LINE')) then
begin
// Set Off Line items to Red color
lb_item.TextSettings.FontColor := TAlphaColors.Red;
end;
// End of FOR
end;
end;
默认情况下,控件使用当前样式项的值(参见 StyleLookup
属性)。
要使用自定义字体颜色,您必须从 ListItem:
中排除TStyledSetting.FontColor
lb_item.StyledSettings:=lb_item.StyledSettings - [TStyledSetting.FontColor];
lb_item.TextSettings.FontColor := TAlphaColors.Red;