![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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);