Форум — Ответы     (  К темам )
 ?  Сергей: Как вывести одну Item в RadioGroup в несколько строк (очень длинная) (11-12-2002 11:58:09)
Как вывести одну Item в RadioGroup в несколько строк (очень длинная)
Типа так:

* кфдшуой кшоа й
й йкар йдкгрп йдкгрп
куцп цкуп

* кепйкп йк
* йкп йкп йкп
* йкп йк
кй пйкп йк
й кпйк п

И т. подобное.
 Devnvd (11-12-2002 14:59:59)
К сожалению нормальным образом не получится.
Так как в этом компоненте используются стандартные
Windows'овские RadioButton'ы. Текст в которых выводится с помощью
TextOut... , а не спомощью DrawText...
Аналогично и для TButton, TRadioButton.

1. Вы конечно можете и сами нарисовать изображение подобное TRadioGroup,
например в PaintBox'е и отрабатывать клики OnMouseDown в местах, где вы
нарисуете кружочки.

2. Вы можете воспользоваться вместо TRadioGroup компонентом TCheckListBox.
Правда, флажки снимать и оставлять только один вам придётся самому.
Дизайн скорректируйте под себя, если не понравится:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//Устанавливаем Style с переменным размером ячеек
CheckListBox1->Style=lbOwnerDrawVariable;
//Очистим
CheckListBox1->Clear();
//Заполним
for(int i=0; i < 10; i++)
{
CheckListBox1->Items->Add("Stroka\t:0"+IntToStr(i)+"\r\nStroka1"+IntToStr(i));
}
}
//---------------------------------------------------------------------------
// Отработчик события TCheckListBox::OnMeasureItem
//
void __fastcall TForm1::CheckListBox1MeasureItem(TWinControl *Control,
int Index, int &Height)
{
RECT r; //Размер области для текста
TCheckListBox *Cb=(TCheckListBox *)Control;
//Достаём содержимое ячейки
char *buf=Cb->Items->Strings[Index].c_str();
int len=strlen(buf);
//Если строка пустая то размер её будет по умолчанию
if(len==0){Height=Cb->ItemHeight; return; }
//Вычисляем размер ячейки
::DrawText(Cb->Canvas->Handle,buf,len,&r,DT_CALCRECT);
//Увеличим размер ячейки на два пиксела сверху и снизу
Height=r.bottom-r.top+4;
}
//---------------------------------------------------------------------------
// Отработчик события TCheckListBox::OnDrawItem
//
void __fastcall TForm1::CheckListBox1DrawItem(TWinControl *Control,
int Index, TRect &Rect, TOwnerDrawState State)
{
TCheckListBox *Cb=(TCheckListBox *)Control;
//Достаём содержимое ячейки
char *buf=Cb->Items->Strings[Index].c_str();
int len=strlen(buf);
//Заливаем ячейку цветом по умолчанию
Cb->Canvas->FillRect(Rect);
//Если строка пустая то уходим
if(len==0){return; }
//Скопируем
RECT R=Rect;
//Отступаем от края
R.top+=2; R.bottom-=2;
//Рисуем текст
::DrawText(Cb->Canvas->Handle,buf,len,&R,DT_EXPANDTABS);
}