Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CheckListBox1.Canvas


ОН ©   (2007-06-27 08:47:00) 

Пишу:
CheckListBox1.Canvas.Pen.Color:=clRed;
CheckListBox1.Canvas.MoveTo(CheckListBox1.Left,CheckListBox1.Top+10);
CheckListBox1.Canvas.LineTo(CheckListBox1.Left+CheckListBox1.Width,CheckListBox1.Top+10);

Никаких линий нет. Почему?


ОН   (2007-06-27 13:36:00) [1]

Сделал, и все равно линии только у первого CheckListBox'а. И кстати линии какие-то глючные - щёлкаю на итем, он естественно выделяется как синий прямоугольник (говоря буквально), только прямоугольник это кривой, а если щёлкнуть на итем над или под линией, то линия исчезает.


clickmaker   (2007-06-27 13:24:00) [2]

выбери событие onDrawItem и у обеих выбери CheckListBox1DrawItem, а второй потри


ОН   (2007-06-27 12:27:00) [3]

А как это?


clickmaker   (2007-06-27 12:24:00) [4]


> прописал код в обоих, а рисуется только в одном.

зачем двоить одинаковый код?
назначь обоим один обработчик


ОН   (2007-06-27 12:20:00) [5]

procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
 Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
 c,d:string;
begin
with TCheckListbox(Control).Canvas do begin
  FillRect(Rect);
  TextOut(Rect.Left+2, Rect.Top+2, TCheckListbox(Control).Items[Index]);
end;
if Index>0 then
begin
c:=copy(TCheckListbox(Control).Items[Index-1],4,2);
d:=copy(TCheckListbox(Control).Items[Index],4,2);
if c<>d then
begin
with TCheckListbox(Control).Canvas do begin
  Pen.Color:=clRed;
  MoveTo(Rect.Left, Rect.Top);
  LineTo(Rect.Right, Rect.Top);
end;
end;
end;
end;

Это был 1-ый CheckListBox

procedure TForm1.CheckListBox2DrawItem(Control: TWinControl;
 Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
 a,b:string;
begin
with TCheckListbox(Control).Canvas do begin
  FillRect(Rect);
  TextOut(Rect.Left+2, Rect.Top+2, TCheckListbox(Control).Items[Index]);
end;
if Index>0 then
begin
a:=copy(TCheckListbox(Control).Items[Index-1],4,2);
b:=copy(TCheckListbox(Control).Items[Index],4,2);
if a<>b then
begin
with TCheckListbox(Control).Canvas do begin
  Pen.Color:=clRed;
  MoveTo(Rect.Left, Rect.Top);
  LineTo(Rect.Right, Rect.Top);
end;
end;
end;
end;

А это 2-ой


MBo   (2007-06-27 12:12:00) [6]

>прописал код в обоих
расшифруй


ОН   (2007-06-27 11:48:00) [7]

Сделал, получилось, но у меня на форме 2 ChekListBox'а, прописал код в обоих, а рисуется только в одном.


Однокамушкин   (2007-06-27 11:30:00) [8]


> Пробовал во время прорисовки в OnItemDraw - ничего нет!


А CheckListBox1.Style чему равно? должно быть lbOwnerDrawFixed или lbOwnerDrawVariable...


MBo   (2007-06-27 11:27:00) [9]

Style должен быть lbOwnerDrawFixed


procedure TForm1.CheckListBox1DrawItem(Control: TWinControl; Index: Integer;
 Rect: TRect; State: TOwnerDrawState);
begin
 with TCheckListbox(Control).Canvas do begin
   Brush.Color := $FFFF shl (8*(Index mod 3));
   FillRect(Rect);
   TextOut(Rect.Left + 2, Rect.Top + 2, TCheckListbox(Control).Items[Index]);
   MoveTo(Rect.Left, Rect.Top);
   LineTo(Rect.Right, Rect.Bottom);
 end;
end;


ОН   (2007-06-27 11:26:00) [10]

И вообще, поверх Item'ов можно линии рисовать?


ОН   (2007-06-27 10:57:00) [11]

А если мне надо, чтобы после прорисовки item'ов автоматически в некоторых местах жахнуть линии? В какое событие это писать? Пробовал во время прорисовки в OnItemDraw - ничего нет!


MBo   (2007-06-27 10:47:00) [12]


procedure TForm1.Button1Click(Sender: TObject);
begin
 CheckListBox1.Canvas.Pen.Color:=clRed;
 CheckListBox1.Canvas.MoveTo(0,0);
 CheckListBox1.Canvas.LineTo(CheckListBox1.Width,CheckListBox1.Height);
end;

рисуется диагональная линия


ОН   (2007-06-27 10:37:00) [13]

И больше ничего не пишешь? Только это?


MBo   (2007-06-27 10:19:00) [14]

По нажатию кнопки.


ОН   (2007-06-27 09:45:00) [15]

А ты в каком событии пишешь?


MBo   (2007-06-27 09:40:00) [16]

А у меня получается


ОН   (2007-06-27 09:23:00) [17]

Пробовал, не получается.


MBo   (2007-06-27 09:19:00) [18]

Потому что нужно локальные координаты задавать MoveTo(0, 10);


Наверх

Титульная страница Поиск, карта сайта Написать письмо