Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Вниз

Добавление компонентов CheckBox в столбец ListView   Найти похожие ветки 

 
r9000   (2004-06-04 12:40) [0]

Не могли бы вы ответить еще на такой вопрос? Можно ли добавлять
компонент CheckBox в непервый, а скажем в третий столбец ListView
(Viewstyle=vsReport),т.е. 2 SubItems? Если можно на примере. Как при этом запретить пользователю изменять его состояние, и как делать это программно? Заранее спасибо.


 
Семен Сорокин ©   (2004-06-04 12:46) [1]

1. можно отрисовать в OnDraw
два битмапа с включеным и выключеным состоянием + сохранять статус, отлавливать клик - менять статус - перерисовывать. (делал :))
2. Можно попробовать вставлять TCheckBox внутрь ListView, но тогда надо будет ловить все скроллы и т.п. (не делал)..

ЗЫ. Если без лишего геморроя - то в первую колонку - достаточно добавить стиль VS_CHECKBOXES (или что-то подобное)


 
r9000   (2004-06-04 13:24) [2]

А можно пример йз вашего первого случая, пожалуйста.


 
Семен Сорокин ©   (2004-06-04 15:57) [3]

Тот шмат кода канул в лету :)
вот из другого проекта

procedure TfmSelGraph.lvParGraphsCustomDrawSubItem(Sender: TCustomListView;
 Item: TListItem; SubItem: Integer; State: TCustomDrawState;
 var DefaultDraw: Boolean);
var
 _bmp : TBitmap;
 _rect: TRect;
 _clr : TColor;
begin
if Assigned(Item.Data) and (SubItem in [4, 5]) then begin
 DefaultDraw := false;
 ListView_GetSubItemRect(lvParGraphs.Handle, Item.Index, SubItem, 0, @_rect);
 if SubItem = 4 then begin
  _bmp := TBitmap.Create;
  try
   if _rect.Right - _rect.Left > 32 then
    _rect.Right := _rect.Left + 32;
   if _rect.Bottom - _rect.Top > 16 then
    _rect.Bottom := _rect.Top + 16;
   _bmp.Height := 16;
   _bmp.Width := 32;
   _bmp.Transparent := true;
   imgs32x16.GetBitmap(iif((Item.StateIndex = 1) or (PParameter(Item.Data)^.Selected = psCode), 3, 1), _bmp);
   lvParGraphs.Canvas.CopyRect(_rect, _bmp.Canvas, _bmp.Canvas.ClipRect);
  finally
   _bmp.Free
  end
 end

 ...
lvParGraphs - TListView
imgs32x16 - TImageList


 
r9000   (2004-06-07 07:04) [4]

Добрый день!

А можно спросить, что это за процедура такая ListView_GetSubItemRect(lvParGraphs.Handle, Item.Index, SubItem, 0, @_rect);
И не очень понятна строка:
  imgs32x16.GetBitmap(iif((Item.StateIndex = 1) or (PParameter(Item.Data)^.Selected = psCode), 3, 1), _bmp);
наверно if но почему-то жалуется на PParameter(Item.Data)^.Selected
Заранее спасибо.


 
Семен Сорокин ©   (2004-06-07 08:57) [5]

процедура ListView_GetSubItemRect объявлена в commctrl.pas.
PParameter(Item.Data)^.Selected = psCode - это моё условие какую картинку вытаскивать из ImageList, не обращай внимания - там в GetBitmap первым параметром индекс должен быть.


 
r9000   (2004-06-07 09:55) [6]

Если я пишу так
ListView_GetSubItemRect(ListView1.Handle, Item.Index, SubItem, 0, @rect);
DefaultDraw := false;
bmp := TBitmap.Create;
 try
  bmpwidth:=(rect.Bottom-rect.Top);
  rect.Right:=rect.Left+bmpwidth;
  ImageList1.GetBitmap(2,bmp);
  ListView1.Canvas.CopyRect(rect, bmp.Canvas, bmp.Canvas.ClipRect);
ListView1.Canvas.TextOut(rect.Left+bmpwidth,rect.Top,Item.SubItems.CommaText);
  finally
  bmp.Free
 end
то получается, только если необходимо выводить текст, то
Item.SubItems.Text выводит строку 5,8,10, а не значение соответствующего SubItems. Как вывести в данном случае это значение? И почему-то в столбце следующем за столбцом в котором вставляется иконка сбивается шрифт(становится жирным), что нужно сделать чтобы он не изменялся?


 
Семен Сорокин ©   (2004-06-07 11:28) [7]

Item.SubItems.Text выводит строку 5,8,10, а не значение соответствующего SubItems. Как вывести в данном случае это значение?
так ты бери не Item.SubItems.Text, а Item.SubItems[колонка]

И почему-то в столбце следующем за столбцом в котором вставляется иконка сбивается шрифт(становится жирным), что нужно сделать чтобы он не изменялся?
вручную отрисовывать последующие итем"ы, имхо бага борланда.


 
r9000   (2004-06-07 12:47) [8]

Когда подставляю Item.SubItems[SubItem] выдается ошибка. Из-за чего она может происходить? А при попытке прорисовывать другие ячейки неправильно отображаются данные:
ListView_GetSubItemRect(ListView1.Handle, Item.Index, SubItem, 0, @rect);
DefaultDraw := false;
 if (Item.SubItems[0]<>"6") and (SubItem=2) then
begin

 if (trim(Item.SubItems[1])="20")  then
 TListView(sender).Canvas.Brush.Color:=clgreen
 else
 if (trim(Item.SubItems[1])="25")  then
 TListView(sender).Canvas.Brush.Color:=clblue
 else
 if (trim(Item.SubItems[1])="23")  then
 TListView(sender).Canvas.Brush.Color:=clred
 else
 TListView(sender).Canvas.Brush.Color:=clWhite;
bmp := TBitmap.Create;
 try
bmpwidth:=(rect.Bottom-rect.Top);
  rect.Right:=rect.Left+bmpwidth;
  ImageList1.GetBitmap(2,bmp);
  ListView1.Canvas.Font.Size:=8;
  ListView1.Canvas.Font.Style:=[];
  ListView1.Canvas.CopyRect(rect, bmp.Canvas, bmp.Canvas.ClipRect);
 ListView1.Canvas.TextOut(rect.Left+bmpwidth,rect.Top,Item.SubItems[1])
 finally
  bmp.Free
 end

end
else
begin
ListView1.Canvas.Font.Size:=8;
ListView1.Canvas.Font.Style:=[];
try
ListView1.Canvas.TextOut(rect.Left,rect.Top,Item.SubItems[SubItem] )

except

end;
end;
Почему?


 
Семен Сорокин ©   (2004-06-07 12:57) [9]

Когда подставляю Item.SubItems[SubItem] выдается ошибка. Из-за чего она может происходить?
нумерация SubItem c 1, подставляй так:
Item.SubItems[SubItem-1]


 
r9000   (2004-06-07 13:55) [10]

Да, спасибо, вы правы! Но почему при выделении цветом ячеек SubItems выделяются цветом только цифры, а не вся ячейка? Как сделать чтобы выделялась цветом вся ячейка, если в ней нет рисунка, или от рисунка до конца ячейки если он есть в моем коде?

ListView_GetSubItemRect(ListView1.Handle, Item.Index, SubItem, 0, @rect);
DefaultDraw := false;
 if (Item.SubItems[0]<>"6") and (SubItem=2) then
begin
 if (trim(Item.SubItems[1])="20")  then
 TListView(sender).Canvas.Brush.Color:=clgreen
 else
 if (trim(Item.SubItems[1])="25")  then
 TListView(sender).Canvas.Brush.Color:=clblue
 else
 if (trim(Item.SubItems[1])="23")  then
 TListView(sender).Canvas.Brush.Color:=clred
 else
 TListView(sender).Canvas.Brush.Color:=clWhite;
 bmp := TBitmap.Create;
 try
 bmpwidth:=(rect.Bottom-rect.Top);
  rect.Right:=rect.Left+bmpwidth;
  ImageList1.GetBitmap(2,bmp);
  ListView1.Canvas.Font.Size:=8;
  ListView1.Canvas.Font.Style:=[];
  ListView1.Canvas.CopyRect(rect, bmp.Canvas,      bmp.Canvas.ClipRect);
ListView1.Canvas.TextOut(rect.Left+bmpwidth,rect.Top,Item.SubItems[1])
finally
  bmp.Free
 end

end
else
begin
 if (trim(Item.SubItems[1])="20")  then
 TListView(sender).Canvas.Brush.Color:=clgreen
 else
 if (trim(Item.SubItems[1])="25")  then
 TListView(sender).Canvas.Brush.Color:=clblue
 else
 if (trim(Item.SubItems[1])="23")  then
 TListView(sender).Canvas.Brush.Color:=clred
 else
 TListView(sender).Canvas.Brush.Color:=clWhite;
ListView1.Canvas.Font.Size:=8;
ListView1.Canvas.Font.Style:=[];
ListView1.Canvas.TextOut(rect.Left,rect.Top,Item.SubItems[SubItem-1] )
end


 
Семен Сорокин ©   (2004-06-07 14:06) [11]

...
bmp := TBitmap.Create;
try
bmp.Transparent := true;
 ListView1.Canvas.FillRect(rect);

 bmpwidth:=(rect.Bottom-rect.Top);
 rect.Right:=rect.Left+bmpwidth;
 ImageList1.GetBitmap(2,bmp);
 ListView1.Canvas.Font.Size:=8;
 ListView1.Canvas.Font.Style:=[];
 ListView1.Canvas.CopyRect(rect, bmp.Canvas, bmp.Canvas.ClipRect);
 ListView1.Canvas.TextOut(rect.Left+bmpwidth, rect.Top, Item.SubItems[1])
 ...


 
r9000   (2004-06-07 14:18) [12]

Спасибо еще раз! А когда нет рисунка, т.е. в коде
else
begin
if (trim(Item.SubItems[1])="20")  then
TListView(sender).Canvas.Brush.Color:=clgreen
else
if (trim(Item.SubItems[1])="25")  then
TListView(sender).Canvas.Brush.Color:=clblue
else
if (trim(Item.SubItems[1])="23")  then
TListView(sender).Canvas.Brush.Color:=clred
else
TListView(sender).Canvas.Brush.Color:=clWhite;
ListView1.Canvas.Font.Size:=8;
ListView1.Canvas.Font.Style:=[];
ListView1.Canvas.TextOut(rect.Left,rect.Top,Item.SubItems[SubItem-1] )
end
что необходимо сделать, чтобы выделялась цветом вся ячейка?


 
Семен Сорокин ©   (2004-06-07 14:28) [13]

FillRect


 
r9000   (2004-06-07 14:40) [14]

Большое спасибо, получилось !



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.06.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.032 c
3-1085536542
Feo
2004-05-26 05:55
2004.06.20
Компоненты на DBCtrlGrid


14-1086339327
Романов Р.В.
2004-06-04 12:55
2004.06.20
Подскажите электронные книги по Delphi для детей.


1-1086658393
Глеб
2004-06-08 05:33
2004.06.20
Клик на Image


3-1085737503
DIS
2004-05-28 13:45
2004.06.20
Поиск


14-1086270924
Igorek
2004-06-03 17:55
2004.06.20
Порекоммендуйте программу типа WinPopup или NetMeeting





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский