![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() И снова доброго времени суток! Надеюсь на Вашу помощь уважаемые форумчане
![]() Вообщем есть ListView - 3 столбца и несколько строк. Задача: Скрыть отображение данных 2ого столбца (совсем или за звездочками (2ой вариант предпочтительнее)) |
#2
|
|||
|
|||
![]() Возможно, есть способ лучше, но пока никто не предложил, вот возможный вариант...
Код:
var Form1: TForm1; { битмап этот будет хранить текст со звездочками } bmp: TBitmap; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin ListView1.GridLines := True; ListView1.ViewStyle := vsReport; ListView1.Columns.Clear; { создадим и обзовем как-нибудь три столбца } for i := 0 to 2 do begin ListView1.Columns.Add; ListView1.Column[i].Caption := 'Column ' + IntToStr(i); end; { добавим несколько строк... } for i := 0 to 4 do with ListView1.Items.Add do begin Caption := 'Item ' + IntToStr(i); SubItems.Add('Subitem ' + IntToStr(i) + '-0'); SubItems.Add('Subitem ' + IntToStr(i) + '-1'); end; { выведем на битмап текст звездочек } bmp := TBitmap.Create; bmp.Width := ListView1.Columns[1].Width - 3; bmp.Height := ListView1.Font.Size; bmp.Canvas.Font := ListView1.Font; bmp.Canvas.TextOut(3, 2, '*******'); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin bmp.Free; end; { добавим собственную реакцию на событие отрисовки subitem'ов OnCustomDrawSubItem } procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); begin { скрываем за звездочками содержимое только второго столбца } if SubItem = 1 then with (Sender as TListView) do begin Canvas.Draw(Item.Left + Columns[0].Width, Item.Top, bmp); DefaultDraw := False; { =) } end; end; procedure TForm1.Button1Click(Sender: TObject); begin { убедимся, что «реальный» текст во втором столбце остался нетронутым, и его можно программно прочесть, хоть там и видны только звездочки } ShowMessage(ListView1.Items.Item[1].SubItems[0]); end; Последний раз редактировалось Nyctos Kasignete, 30.08.2009 в 10:12. |