4 / 4 / 0
Регистрация: 21.04.2013
Сообщений: 124
1

как сделать выделение в Listbox градиентом

23.05.2013, 06:58. Показов 1131. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь сделать так
C++
1
2
3
4
5
6
7
8
TCanvas *pCanvas = ((TListBox *)Control)->Canvas;
if( State.Contains(odSelected) ) {
   GradientFillCanvas(this->Canvas, RGB(255, 128, 0), clGreen,
        Rect(12,32,23,123), gdVertical);
        pCanvas->FillRect(Rect);
        pCanvas->Brush->Color = RGB(12,32,23);
        pCanvas->Rectangle(1+23,0,2+44+1,32);
}
билдер ругается мол функцию Rect нельзя применить сдесь подскажите как сделать ? спасибо

Добавлено через 40 минут
или подскажите как сделать другим способом ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2013, 06:58
Ответы с готовыми решениями:

Как разрешить выделение нескольких объектов в ListBox
Как разрешить выделение нескольких объектов в ListBox’e

выделение ячейки в ListBox
Подскажите, пожалуйста как сделать, чтобы после добавления текста из Edit в ListBox строка в...

TMemo и Scrollbar. Как сделать выделение i строки?
Всем привет! С этой проблемой я бъюсь уже очень долго и решить ее не могу. Под TMemo в идеальном...

Как сделать перенос строки в ListBox
У меня есть переменная у которой неизвестно значение, путь может быть длинным, как сделать перенос...

5
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32793 / 21133 / 8144
Регистрация: 22.10.2011
Сообщений: 36,393
Записей в блоге: 8
23.05.2013, 11:53 2
Цитата Сообщение от Cyphermak Посмотреть сообщение
ругается мол функцию Rect нельзя применить сдесь
А у тебя Rect - это не функция в данном контексте. Это один из параметров (типа TRect), передаваемых в обработчик.

C++
1
2
   GradientFillCanvas(this->Canvas, RGB(255, 128, 0), clGreen,
        /*System::*/Classes::Rect(12,32,23,123), gdVertical);
все прекрасно становится "можно"
2
4 / 4 / 0
Регистрация: 21.04.2013
Сообщений: 124
23.05.2013, 15:08  [ТС] 3
спасибо стало возможно но вопреки моей железной логики ничего не получилось (((((( выделение не залилось градиентом ((
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.05.2013, 15:40 4
Лучший ответ Сообщение было отмечено как решение

Решение

как сделать выделение в Listbox градиентом

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
  ListBox1->Style= lbOwnerDrawFixed;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
          TOwnerDrawState State)
{
  TListBox* LB = (TListBox *)Control;
  LB->Canvas->Brush->Color = clWhite;
  LB->Canvas->FillRect(Rect);
 
  if(State.Contains(odSelected))
    {
        GradientFillCanvas(LB->Canvas, clYellow, clGreen,
                                       Rect, gdVertical);
    }
 
  String Text= LB->Items->Strings[Index];
  LB->Canvas->Brush->Style= bsClear;
  LB->Canvas->TextRect(Rect,Text);
}
//---------------------------------------------------------------------------
4
4 / 4 / 0
Регистрация: 21.04.2013
Сообщений: 124
23.05.2013, 16:15  [ТС] 5
Спасибо большое тема закрыта))))))))))))))))))))))))
0
Практикантроп
4796 / 2694 / 519
Регистрация: 23.09.2011
Сообщений: 5,753
23.05.2013, 16:25 6
Лучший ответ Сообщение было отмечено как решение

Решение

... или так:__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
      TRect &Rect, TOwnerDrawState State)
{
   String Text= ListBox1->Items->Strings[Index];
   TRIVERTEX vert[2]= {
    {Rect.left,Rect.top, 0xff00, 0xff00, 0x0000, 0x0000},
    {Rect.right,Rect.bottom, 0x0000, 0xff00, 0xff00, 0x0000}} ;
   GRADIENT_RECT gRect = {0,1};
   ListBox1->Canvas->Brush->Style= bsSolid; 
   if (State.Contains(odSelected))  {
  ListBox1->Canvas->Brush->Style= bsClear;
  GradientFill(ListBox1->Canvas->Handle,vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
 
   } else  {
    ListBox1->Canvas->Brush->Style= bsSolid;
    ListBox1->Canvas->FillRect(Rect);
   }
   ListBox1->Canvas->Font->Color = clBlack; 
   ListBox1->Canvas->TextRect(Rect,0,Rect.top,Text);
}
( опОздал...)
Миниатюры
как сделать выделение в Listbox градиентом  
3
23.05.2013, 16:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2013, 16:25
Помогаю со студенческими работами здесь

Выделение одного элемента на нескольких ListBox'ах
Идея такова: на форме есть несколько (3) ListBox'a. Допустим что мы нажали на какую-нибудь строку в...

Как закрасить столбик вертикальным градиентом (canvas)
Canvas->Brush->Color = clRed; Canvas->Rectangle(15,50,5,5); Canvas->Rectangle(30,50,20,5);...

[WPF] Как сделать выделение строки цветом в listBox?
У меня выводится список подозрительных файлов в list.box. Допустим там есть расширение файла amc....

Как FillPath сделать градиентом?
Необходимо в graphics.FillPath сделать градиент одного цвета. Т.е возьмём например прямоугольник и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru