Форум: "Основная";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
ВнизCheckListBox Найти похожие ветки
← →
Vint (2003-03-03 08:49) [0]Здравствуйте уважаемые мастера,
помогите пожалуйста, как сделать CheckListBox с цветной строчкой вместо стандартной синей?
делаю так:
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (control as TCheckListBox).canvas do
begin
if index<>0 then
begin
Brush.Color := clBtnFace;
Fillrect(New_Rect(rect.left, rect.top-16, rect.Right, rect.Bottom));
Font.Color := clBlue;
TextOut(rect.left,rect.top-16,(control as TCheckListBox).items[index-1]);
end
else
begin
Brush.Color := clBtnFace;
Fillrect(New_Rect(rect.left, rect.top, rect.Right, rect.Bottom));
Font.Color := clBlue;
TextOut(rect.left,rect.top,(control as TCheckListBox).items[index]);
end;
if (control as TCheckListBox).Selected[index] then
begin
with (control as TCheckListBox).canvas do
begin
Brush.Color := clRed;
Fillrect(rect);
Font.Color := clYellow;
TextOut(rect.left,rect.top,(control as TCheckListBox).items[index]);
end;
end;
end;
но пока допер только как опускаться в низ, а как подняться курсором вверх что-то никак. Подскажите пожалуйста.
← →
Vint (2003-03-03 09:26) [1]Вся штука в том, что у CheckListBox нет стиля [cbSelect], поэтому я и парился с Selected[index], может это вообще неправильный подход?
← →
Vint (2003-03-03 10:42) [2]Ну, что...? ни у кого, ни каких идей нет...?
← →
Vint (2003-03-03 12:00) [3]...жду ответа, как соловей - лета :)
← →
Vint (2003-03-03 12:55) [4]
function New_Rect(ALeft, ATop, ARight, ABottom: Integer): TRect;
begin
with Result do
begin
Left := ALeft;
Top := ATop;
Right := ARight;
Bottom := ABottom;
end;
end;
procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
TheRect: TRect;
begin
with (control as TCheckListBox).canvas do
begin
if index>0 then
begin
Brush.Color := $00E7F1F8;
Fillrect(New_Rect(rect.left, rect.top-16, rect.Right, rect.Bottom));
Font.Color := clBlack;
TextOut(rect.left,rect.top-16,(control as TCheckListBox).items[index-1]);
end;
if index=0 then
begin
Brush.Color := $00E7F1F8;
Fillrect(New_Rect(rect.left, rect.top, rect.Right, rect.Bottom));
Font.Color := clBlack;
TextOut(rect.left,rect.top,(control as TCheckListBox).items[index]);
end;
if index=(control as TCheckListBox).Items.Count-1 then
begin
Brush.Color := $00E7F1F8;
Fillrect(New_Rect(rect.left, rect.top, rect.Right, rect.Bottom));
Font.Color := clBlack;
TextOut(rect.left,rect.top,(control as TCheckListBox).items[index]);
end;
if index<(control as TCheckListBox).Items.Count-1 then
begin
Brush.Color := $00E7F1F8;
Fillrect(New_Rect(rect.left, rect.top+32, rect.Right, rect.Bottom));
Font.Color := clBlack;
TextOut(rect.left,rect.top+16,(control as TCheckListBox).items[index+1]);
end;
if (control as TCheckListBox).Selected[index] then
begin
Brush.Color := $00BCC4AA;
Fillrect(rect);
Font.Color := $00636330;
TextOut(rect.left,rect.top,(control as TCheckListBox).items[index]);
end;
if (control as TCheckListBox).Checked[index] then
begin
Brush.Color := $00D2DFF0;
Fillrect(rect);
Font.Color := clBlack;
TextOut(rect.left,rect.top,(control as TCheckListBox).items[index]);
end;
end;
end;
... вот до чего додумался, теперь могу убрать полоску сзади и впереди моего курсора, но все это так каряво!!! хочется чтобы и строки с Checked то же выделялись, блин ну как это все оформить??? есть светлые головы? :( а то я что то больше ничего придумать не могу!
← →
Vint (2003-03-03 14:16) [5]Блин! ААААА... ААААААА... ААААААААААААА...
Все башню срывает! целый день сижу с этим долбаным CheckListBoxом!!! Ну где мастера то? Что, вопрос такой сложный? Или я что делаю не так? Или я все делаю не так? :)
Помогите кто знает!
Я на связи... прием...
← →
Vint (2003-03-03 15:31) [6]
И тишинааа....
Вот непруха то :(
Надеюсь все же на ответ... может найдется человек который юзал этот CheckListBox хренов.
← →
smok_er (2003-03-03 15:43) [7]А зачем это собственно нужно? Чем обычный clHighlight не нравится?
← →
Vint (2003-03-03 15:55) [8]
> smok_er (03.03.03 15:43)
Красота спасет мир ;)
Ты попробуй если есть время или желание запустить мою фигню - полная лажа, а все из-за того, что нет у этого трахнутого ListBoxа State = [odSelected] или cbSelected вот я и немогу отловить когда один пункт выделен а соответственно все остальные не выделены!
А хочется, чтоб все красиво было, в общем стиле (он у меня в бирюзовых тонах) опять же хочется чтоб чекнутые пунктики имели немного другой тон... ну и в таком плане :)
← →
paxer (2003-03-03 16:06) [9]Все ниже сказанное работает для ComboBox:
procedure TLineTypeComboBox.DrawItem(Index: Integer;ARect:TRect; State: TOwnerDrawState);
var OldBrushColor:TColor;
x1,x2,y:LongInt;
n:byte;
begin
OldBrushColor:=Canvas.Brush.Color;
Canvas.FillRect(ARect);//Для выделенного текущий цвет кисти - синий
If odSelected in State Then Canvas.Pen.Color := clWhite
Else Canvas.Pen.Color := clblack;
← →
Vint (2003-03-03 16:20) [10]Спасибо paxer, но мне не нужен ComboBox.
Ладно, напишу свой CheckListBox, давно надо было это сделать!
Все, ветка закрыта.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.03.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c