Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Разноцветные буквы в StringGrid

11K
13 сентября 2006 года
zbestr
40 / / 07.04.2006
Мне надо раскрасить текст в StringGrid, т.е. сделать выделение красным определённых символов в ячейке.
Сам текст рисую:
DrawText( ((TStringGrid*)Sender)->Canvas->Handle, text.c_str(), text.Length(), &r, DT_WORDBREAK);
1.9K
13 сентября 2006 года
SABROG
242 / / 26.01.2006
Это можно сделать только выводя по одной букве, меняя цвет (Canvas->Font->Color) в нужном месте. Геморно определять размеры букв и расстояние между ними.
11K
14 сентября 2006 года
zbestr
40 / / 07.04.2006
Ну это я ужо понял.
А примерно хотябы где искать?
Какими функциями?
1.9K
14 сентября 2006 года
SABROG
242 / / 26.01.2006
Получаешь HDC (GetDC) контрола и начинаешь рисовать TextOut, увеличивая отступ перед выводом каждой буквы.
11K
14 сентября 2006 года
zbestr
40 / / 07.04.2006
Спасибо!
Времени много - буду учиться.
1.9K
14 сентября 2006 года
SABROG
242 / / 26.01.2006
Если напишешь, запости сюда, было бы неплохо в FAQ вставить.
11K
14 сентября 2006 года
zbestr
40 / / 07.04.2006
Цитата:
Если напишешь, запости сюда, было бы неплохо в FAQ вставить.


Правда пришлось отказаться от DrawText, но может потом добавлю вывод в несколько строк (сейчас не прёт, да и так хорошо - сделал подсказку на длинные строки)

Код:
void __fastcall TMainForm::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
COLORREF clSel = RGB(255, 0, 0); // цвет текста для выделения красный
clSel = ColorBox1->Selected; // выбираем цвет текста для выделения
COLORREF clNorm;
AnsiString text = StringGrid1->Cells[ACol][ARow];
   StringGrid1->Canvas->FillRect(Rect);

   TRect r=Rect;
   InflateRect(&r,0,0);

   HDC hdc;
   hdc = StringGrid1->Canvas->Handle;
   clNorm = GetTextColor(hdc); // сохраним цвет чтобы потом его вернуть
   int l = text.Length();
   int offset=0; //смещение след буквы для канвы
   int w=0; // ширина символа на канве
   int h=0;
   for (int i=1; i <= text.Length(); i++)
       {
       offset = offset + w;
       r.Left = r.Left + w + 0.5;
       w = StringGrid1->Canvas->TextWidth((text.SubString(i,1)).c_str());
       SetTextColor(hdc,clNorm);//норм цвет
       if (ACol == 0)
          {
          if (My_SetTextColor(text, i, ARow))
             {
             SetTextColor(hdc,clSel);//меняем цвет на выделенный
             };
          };
       // а вот теперь рисуем буковку
       TextOut(hdc, Rect.Left+offset, Rect.Top, (text.SubString(i,1)).c_str(), 1);
       }
   SetTextColor(hdc,clNorm);// вернем на место цвет
}


Код:
bool __fastcall TMainForm::My_SetTextColor(AnsiString text, int i, int ARow)
{
bool es = false;
AnsiString tmp = ExtractFileName(text); //у меня тута полный путь, а нуна тока имя файла
int offset = text.AnsiPos(tmp)-1;          //к-во символов для смещения
int pos=0; //позиция текста который надо выделить цветом в строке
int l = Text2Hilite.Length(); //длина текста который надо выделить
int c=0; //счетчик повторения нужного текста
while ( tmp.AnsiPos(Text2Hilite) > 0 ) //ищем текст
      {
      pos = tmp.AnsiPos(Text2Hilite)+offset+c*l; //находим позицию в text со смещением
      if (i < pos)
         {
         return false; // буква раньше нужного текста
         }
         else
              {
              for (int e=pos; e < pos+l; e++)
                  {
                  if (i == e)
                     {
                     return true; //вот где она!
                     };
                  };
              };
      tmp = tmp.Delete(tmp.AnsiPos(Text2Hilite), l); //продолжаем искать
      c++;
      pos = 0;//сам не знаю зачем... пока отлаживал работало...
      };
return es; //возвращаем цвет обратно в функцию
}


Если кто-нибудь может чего-нибудь тут оптимизировать - ОЧЕНЬ ПРОШУ!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог