Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.58 MB
Время: 0.055 c
1-39337
FLIZ
2003-02-28 14:44
2003.03.13
Как отключить/изменить хинты над узлами TTreeView ?


1-39398
krotik
2003-03-03 10:26
2003.03.13
Открытие файла


14-39534
Roger
2003-02-26 10:01
2003.03.13
Непонятки с dbf - 2


3-39173
Anatoliy II
2003-02-20 13:38
2003.03.13
Случайная выборка из базы данных(компонент TTable)


1-39372
ЮРИЙ_К
2003-02-28 17:17
2003.03.13
Как обратиться к Item и SubItem компонента ListView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский