Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
ВнизCheckListBox1.Canvas Найти похожие ветки
← →
ОН (2007-06-27 08:47) [0]Пишу:
CheckListBox1.Canvas.Pen.Color:=clRed;
CheckListBox1.Canvas.MoveTo(CheckListBox1.Left,CheckListBox1.Top+10);
CheckListBox1.Canvas.LineTo(CheckListBox1.Left+CheckListBox1.Width,CheckListBox1.Top+10);
Никаких линий нет. Почему?
← →
MBo © (2007-06-27 09:19) [1]Потому что нужно локальные координаты задавать MoveTo(0, 10);
← →
ОН (2007-06-27 09:23) [2]Пробовал, не получается.
← →
MBo © (2007-06-27 09:40) [3]А у меня получается
← →
ОН (2007-06-27 09:45) [4]А ты в каком событии пишешь?
← →
MBo © (2007-06-27 10:19) [5]По нажатию кнопки.
← →
ОН (2007-06-27 10:37) [6]И больше ничего не пишешь? Только это?
← →
MBo © (2007-06-27 10:47) [7]
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:57) [8]А если мне надо, чтобы после прорисовки item"ов автоматически в некоторых местах жахнуть линии? В какое событие это писать? Пробовал во время прорисовки в OnItemDraw - ничего нет!
← →
ОН (2007-06-27 11:26) [9]И вообще, поверх Item"ов можно линии рисовать?
← →
MBo © (2007-06-27 11:27) [10]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:30) [11]
> Пробовал во время прорисовки в OnItemDraw - ничего нет!
А CheckListBox1.Style чему равно? должно быть lbOwnerDrawFixed или lbOwnerDrawVariable...
← →
ОН (2007-06-27 11:48) [12]Сделал, получилось, но у меня на форме 2 ChekListBox"а, прописал код в обоих, а рисуется только в одном.
← →
MBo © (2007-06-27 12:12) [13]>прописал код в обоих
расшифруй
← →
ОН (2007-06-27 12:20) [14]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-ой
← →
clickmaker © (2007-06-27 12:24) [15]
> прописал код в обоих, а рисуется только в одном.
зачем двоить одинаковый код?
назначь обоим один обработчик
← →
ОН (2007-06-27 12:27) [16]А как это?
← →
clickmaker © (2007-06-27 13:24) [17]выбери событие onDrawItem и у обеих выбери CheckListBox1DrawItem, а второй потри
← →
ОН (2007-06-27 13:36) [18]Сделал, и все равно линии только у первого CheckListBox"а. И кстати линии какие-то глючные - щёлкаю на итем, он естественно выделяется как синий прямоугольник (говоря буквально), только прямоугольник это кривой, а если щёлкнуть на итем над или под линией, то линия исчезает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.07.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.036 c