修复lazarus在linux(ubuntu、银河麒麟等) Object Inspector下拉文字不显示的问题。
打开lazarus\components\ideintf\objectinspector.pp(3489行开始),按红字的修改后重新编译lazarus就可以。
procedure TOICustomPropertyGrid.ValueComboBoxDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); var CurRow: TOIPropertyGridRow; ItemValue: string; AState: TPropEditDrawState; FontColor: TColor; begin if (FItemIndex>=0) and (FItemIndex<FRows.Count) then begin CurRow:=Rows[FItemIndex]; if (Index>=0) and (Index<ValueComboBox.Items.Count) then ItemValue:=ValueComboBox.Items[Index] else ItemValue:=''; AState:=[]; if odSelected in State then Include(AState,pedsSelected); if odFocused in State then Include(AState,pedsFocused); if odComboBoxEdit in State then Include(AState,pedsInEdit) else Include(AState,pedsInComboList); if not(odBackgroundPainted in State) then ValueComboBox.Canvas.FillRect(ARect); FontColor := ValueComboBox.Canvas.Font.Color; ValueComboBox.Canvas.Font.Assign(FDefaultValueFont); if odSelected in State then ValueComboBox.Canvas.Font.Color := FontColor else
{$ifdef windows}
ValueComboBox.Canvas.Font.Color := clWindowText;
{$else}
ValueComboBox.Canvas.Font.Color := clHighlightText;//2022.5.24 LBZ 字体颜色与背景颜色相同的Bug
{$endif}
if CurRow.Editor.HasDefaultValue and (ItemValue = CurRow.Editor.GetDefaultValue) then
ValueComboBox.Canvas.Font.Style := ValueComboBox.Canvas.Font.Style + [fsItalic]; CurRow.Editor.ListDrawValue(ItemValue,Index,ValueComboBox.Canvas,ARect,AState); end; end;
修复前:
修复后: