Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.034 c
3-39199
Aleksandr
2003-02-21 15:30
2003.03.13
Как при вставке записи заполнить ее идентификатором подчиненных?


1-39259
alexey_2003
2003-03-03 15:44
2003.03.13
ошибка при компиляции программы


1-39373
grei
2003-03-02 19:37
2003.03.13
Открытие файлов через windows


1-39308
Андрусь
2003-02-28 14:46
2003.03.13
функция для форматирования длинных строк в мессагах


4-39624
Sheriff
2003-01-22 15:43
2003.03.13
Посылка сообщению сервису (службе) и наоборот.