Форум — Ответы ( К темам )
? | Сергей: Как вывести одну 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); } |