Главная страница
    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.47 MB
Время: 0.008 c
3-39209
UnDISCOvery
2003-02-20 20:43
2003.03.13
Table unknown USERS. Почему ??? :-/


3-39166
Леший_
2003-02-20 17:04
2003.03.13
День добрый. Подскажите пожалуйста.


1-39343
Kofey
2003-02-28 00:42
2003.03.13
Массив


7-39615
maxim2
2003-01-16 06:29
2003.03.13
Зная дискриптор окно можно ли узнать его класс


1-39386
Дмитрий К.К.
2003-03-02 18:38
2003.03.13
Randomize





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский