TListView 컨트롤에서 빈 셀과 인접 셀을 구분하는 표 선을 숨기려면 어떻게해야합니까? HTML colspan
테이블 속성 또는 Excel의 "셀 병합"명령과 같습니다. 정상적인 경계를 유지하기 위해 텍스트가있는 셀을 원합니다.리스트 뷰에서 빈 셀의 그리드 라인을 어떻게 생략 할 수 있습니까?
답변
당신은 TVirtualStringTree를 사용할 수 있습니다. 빈 열을 자동으로 확장하는 옵션 toAutoSpanColumns가 있습니다.
+1. 내 시도가 Windows 트리보기 (신뢰할 수있는)이 작업을 수행 할 수 없습니다 제안 했으므로 타사 구성 요소를 좋은 선택이 될 수 있습니다. –
왜 이것을 다운 그레이드 했습니까? –
@ Andreas - 확실하지는 않지만, 아마도 그 대답이 * 질문에 대답하지 않고 시작했기 때문에 * .. –
이 문제에 대한 강력한 해결책이없는 것 같습니다.
나쁜 솔루션은, 그러나,
procedure TForm4.FormShow(Sender: TObject);
var
i: integer;
begin
ListView1.ViewStyle := vsReport;
ListView1.Columns.Add.Caption := 'Col 1';
ListView1.Columns.Add.Caption := 'Col 2';
ListView1.Columns.Add.Caption := 'Col 3';
ListView1.GridLines := false; // You cannot have grid lines...
for i := 0 to 10 do
with ListView1.Items.Add do
begin
if i <> 5 then
begin
Caption := 'Test';
SubItems.Add('test');
SubItems.Add('test');
end
else
Caption := 'This is a very, very long caption';
end;
end;
var
ColWidths: array of integer;
procedure TForm4.ListView1AdvancedCustomDraw(Sender: TCustomListView;
const ARect: TRect; Stage: TCustomDrawStage; var DefaultDraw: Boolean);
var
i, j: Integer;
begin
if Stage <> cdPrePaint then Exit;
if length(ColWidths) <> TListView(Sender).Columns.Count then
begin
SetLength(ColWidths, TListView(Sender).Columns.Count);
Exit;
end;
for i := 0 to length(ColWidths) - 1 do
if ColWidths[i] <> Sender.Column[i].Width then
begin
Sender.Invalidate;
for j := 0 to length(ColWidths) - 1 do
ColWidths[i] := Sender.Column[i].Width;
end;
end;
procedure TForm4.ListView1AdvancedCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
var DefaultDraw: Boolean);
var
r: TRect;
begin
DefaultDraw := (Item.SubItems.Count <> 0);
if not DefaultDraw then
begin
FillRect(Sender.Canvas.Handle, Item.DisplayRect(drBounds), GetStockObject(WHITE_BRUSH));
r := Item.DisplayRect(drBounds);
DrawText(Sender.Canvas.Handle, Item.Caption, length(Item.Caption), r, DT_SINGLELINE or DT_LEFT or DT_VCENTER)
end;
end;
Listview colspan is hard to get right. Don't do it. http://privat.rejbrand.se/listviewcolspan.png
가 강력하지 않기 때문에 이것은 나쁜입니다. 깜박이고 버그가 있으며 "해킹"입니다. 향후 Windows 버전에서는 제대로 작동하지 않을 수 있습니다. 기본적으로 Windows 목록보기 컨트롤은 HTML을 사용하지 않아야한다고 생각합니다. colspan
같은 것 같습니다.
빈 열을 제거하면 무엇을 의미합니까? –
잠시 동안 조사한 결과 강력한 솔루션이있는 것 같지 않습니다. –
사람들이 아직 모호하지 않은 질문을 왜 상향 왜하는지 나는 결코 이해하지 못했습니다. –