link2414 link2415 link2416 link2417 link2418 link2419 link2420 link2421 link2422 link2423 link2424 link2425 link2426 link2427 link2428 link2429 link2430 link2431 link2432 link2433 link2434 link2435 link2436 link2437 link2438 link2439 link2440 link2441 link2442 link2443 link2444 link2445 link2446 link2447 link2448 link2449 link2450 link2451 link2452 link2453 link2454 link2455 link2456 link2457 link2458 link2459 link2460 link2461 link2462 link2463 link2464 link2465 link2466 link2467 link2468 link2469 link2470 link2471 link2472 link2473 link2474 link2475 link2476 link2477 link2478 link2479 link2480 link2481 link2482 link2483 link2484 link2485 link2486 link2487 link2488 link2489 link2490 link2491 link2492 link2493 link2494 link2495 link2496 link2497 link2498 link2499 link2500 link2501 link2502 link2503 link2504 link2505 link2506 link2507 link2508 link2509 link2510 link2511 link2512 link2513 link2514 link2515 link2516 link2517 link2518 link2519 link2520 link2521 link2522 link2523 link2524 link2525 link2526 link2527 link2528 link2529 link2530 link2531 link2532 link2533 link2534 link2535 link2536 link2537 link2538 link2539 link2540 link2541 link2542 link2543 link2544 link2545 link2546 link2547 link2548 link2549 link2550 link2551 link2552 link2553 link2554 link2555
C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TRadioGroup
ZDV
Отправлено: 04.03.2006, 14:26


Ученик-кочегар

Группа: Участник
Сообщений: 19



Можно ли сделать вертикальный ScrollBar в TRadioGroup ?
Мне нужно отображать список, где сбоку каждого элемента находится RadioButton и, если список очень большой, без ScrollBar'а получается полная ерунда. Если нельзя сделать ScrollBar, то можно ли сделать как-то по другому?
Aptem
Отправлено: 04.03.2006, 14:55


Мастер участка

Группа: Участник
Сообщений: 349



Поместите на форму ScrollBox, а уже на него накидайте RadioButton.
ZDV
Отправлено: 04.03.2006, 16:34


Ученик-кочегар

Группа: Участник
Сообщений: 19



У меня список меняется после нажатия кнопки.
Как удалить старые и добавить новые элементы
списка в ScrollBox'е?
ZDV
Отправлено: 04.03.2006, 18:52


Ученик-кочегар

Группа: Участник
Сообщений: 19



Закидываю на ScrollBox RadioButton'ы. Вот код:
...
Query->Open();
TRect myRect;
int Left;
int Width;
int Height;
int Top;
myRect = ScrollBox->ClientRect;
TRadioButton *rb;
Left = myRect.left + 3;
Width = myRect.right — myRect.left;
Height = 20;
Top = 3;
Query->First();
rb = new TRadioButton(this);
rb->Parent = (TWinControl *)ScrollBox;
rb->Top = Top;
rb->Left = Left;
rb->Width = Width;
rb->Height = Height;
rb->Caption = Query->FieldByName("Caption")->AsString.Trim();

Top = rb->Top + Height + 1;
Query->Next();
for(int i = 1; i < Query->RecordCount; i++){
TRadioButton *rb;
rb = new TRadioButton(this);
rb->Parent = (TWinControl *)ScrollBox;
rb->Top = Top;
rb->Left = Left;
rb->Width = Width;
rb->Height = Height;
rb->Caption = Query->FieldByName("Caption")->AsString.Trim();
Top = rb->Top + Height + 1;
Query->Next();
}

Как мне после этого получить доступ к этим компонентам???????
Grigoriy
Отправлено: 04.03.2006, 21:22


Мастер участка

Группа: Участник
Сообщений: 381



Я предлагаю такой код.

Функция...
CODE

void Create_Group_RadioButton_On_Parent(TRadioButton** &rb,TWinControl* Parent1,TStringList* Captions,int n, int gk, int vk, int rg, int rv, int w, int h, int topg, int leftg)
{
int i;
int temptop, templeft;
int cgk,cvk;
cgk=gk;
cvk=vk;
temptop=topg;
templeft=leftg;
rb=(TRadioButton**)malloc(4*n);
for (i=0;i<n;i++)
{
rb[i]= new TRadioButton(Parent1);
rb[i]->Parent = (TWinControl *)Parent1;
rb[i]->Top=temptop;
rb[i]->Left=templeft;
rb[i]->Height=h;
rb[i]->Width=w;
if (Captions->Count>i){
rb[i]->Caption=Captions->Strings[i];};
templeft+=w+rg;
if (!(--cgk)) {cgk=gk;temptop+=h+rv;templeft=leftg;
if (!(--cvk)) {i=n;}};
}
};


Поясняю.
rb — это указатель на массив указателей на экземпляры создаваемых объектов (RadioButton -ов)
Parent1 — указатель на объект-родитель
Captions — список Caption -ов
n — количество создаваемых RadioButton -ов
gk — количество столбцов RadioButton -ов
vk — количество строк RadioButton -ов
rg — расстояние между найближайшими краями соседних RadioButton -ов по горизонтали
rv — расстояние между найближайшими краями соседних RadioButton -ов по вертикали
w — ширина каждого RadioButton -а
h — высота каждого RadioButton -а
topg — вертикальная координата всей группы RadioButton -ов
leftg — горизонтальная координата всей группы RadioButton -ов

Доступ к каждому объекту осуществляется через массив указателей на объекты.

Например

CODE

//!!!Глобальные переменные !!!
TRadioButton** masrb;
int kolrb,i;

//--------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList* strs = new TStringList;
strs->Add("№ 1");
strs->Add("№ 2");
strs->Add("№ 3");
strs->Add("№ 4");
strs->Add("№ 5");
strs->Add("№ 6");
strs->Add("№ 7");
strs->Add("№ 8");
strs->Add("№ 9");
strs->Add("№ 10");
strs->Add("№ 11");
strs->Add("№ 12");
kolrb=12;
Create_Group_RadioButton_On_Parent(masrb,Form1,strs,12,4,3,1,1,150,20,100,100);
masrb[5]->Caption="Переключатель № 5";
masrb[6]->Caption="Переключатель № 6";
}


Удаление этих объектов не составляет проблем.
Для этого в программе нужно сохранить их количество.

CODE

void __fastcall TForm1::Button2Click(TObject *Sender)
{
//Сначала освобождается память, занимаемая самими объектами
for (i=0;i<kolrb;i++)
{
delete masrb[i];
};
delete masrb;//И в конце сам массив указателей удаляется
}


Отредактировано Grigoriy — 04/03/2006, 22:21
ZDV
Отправлено: 05.03.2006, 21:40


Ученик-кочегар

Группа: Участник
Сообщений: 19



Большое спасибо. Это как раз то, что нужно. smile.gif

Вернуться в Вопросы программирования в C++Builder