Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TRadioGroup: раскрасить item ы [D5, Win2k]


Страницы:   1 2

Alx2 ©   (2002-05-14 14:30:00) 

Ребята, научите красить итемы в TRadioGroup.
У меня на форме этих RadioGroupов целая куча и количество итемов в каждом тоже немаленькое. Хотелось бы у выбранного итема не просто точку проставлять, а всю строчку покрасить, чтобы заметнее его сделать. Новый компонент лепить - не хочу :(
Может решение где-то рядом?


Alx2   (2002-05-14 17:29:00) [1]

>MBo © (14.05.02 17:26)
Вот в этом и вопрос. У меня почему-то создалось впечатление, что отметку снимает сама операционка :(
Нигде не мог отследить, чтобы отрабатывало SetChecked(False)


MBo   (2002-05-14 17:26:00) [2]

В общем-то проблема не раскрасить, а аккуратно отследить момент переключения.


Alx2   (2002-05-14 17:22:00) [3]

А я пытался провернуть такой вот бред:

TNotifyEventsArray = Array Of Record
OnClick: TNotifyEvent;
OnExit: TNotifyEvent;
End;
......................
Procedure TLogoAppForm.FormCreate(Sender: TObject);
Procedure AssignHandler(RG: TRadioGroup);
Var K: Integer;
Begin
For K := 0 To RG.ControlCount - 1 Do
If RG.Controls[K] Is TRadioButton Then
With (RG.Controls[K] As TRadioButton) Do
Begin
Tag := Length(NotifyEventsArray);
SetLength(NotifyEventsArray, Tag + 1);
NotifyEventsArray[Tag].OnClick := OnClick;
NotifyEventsArray[Tag].OnExit := OnExit;
OnClick := OnRadioButtonClick;
OnExit := OnRadioButtonExit;
End;
End;

Var K: Integer;
Begin
For K := 0 To ComponentCount - 1 Do
If Components[K] Is TRadioGroup Then
AssignHandler(Components[K] As TRadioGroup);
End;

...................

Procedure TLogoAppForm.OnRadioButtonClick(Sender: TObject);
Begin
If Sender Is TRadioButton Then
With TRadioButton(Sender) Do
Begin
If checked Then COLOR := clLime Else
COLOR := clBtnFace;

If (Tag < Length(NotifyEventsArray)) And
Assigned(NotifyEventsArray[Tag].OnClick) Then
NotifyEventsArray[Tag].OnClick(Sender);

End;
End;


Alx2   (2002-05-14 17:19:00) [4]

Блин, не синхронизирую ответы никак :))


Alx2   (2002-05-14 17:18:00) [5]

А вот это:
for i:=0 to controlCount-1 do
if controls[i]<>Sender then ...

Напоминает, правда очень отдаленно, мой пост - Alx2 © (14.05.02 14:38)

Я просто не хотел в цикле перелопачивать все RadioButtons.

И, все-таки, по поводу:
// Пока не вижу, почему не устанавливается обработчик
//в конструкторе Radiobutton
Где - то в RadioGroup стоит переприсваивание обработчика OnClick для RadioButtonов
Вот это, кажется:

constructor TGroupButton.InternalCreate(RadioGroup: TCustomRadioGroup);
begin
inherited Create(RadioGroup);
RadioGroup.FButtons.Add(Self);
Visible := False;
Enabled := RadioGroup.Enabled;
ParentShowHint := False;
OnClick := RadioGroup.ButtonClick;
Parent := RadioGroup;
end;


MBo   (2002-05-14 17:16:00) [6]

в TGroupButton.InternalCreate(RadioGroup: TCustomRadioGroup)
уже есть
OnClick := RadioGroup.ButtonClick;
а мне приходится делать вручную ;)


Alx2   (2002-05-14 17:10:00) [7]

>MBo © (14.05.02 16:43)
Привет, Борис!

Хм. Поздно я прочитал - уже скачанный компонент внедрил.
А вот это Пока не вижу, почему не устанавливается обработчик в конструкторе Radiobuttonс каким смыслом? "Не устанавливается" или "почему бы не установить"?


Alx2   (2002-05-14 16:44:00) [8]

Угу.
Еще раз спасибо!


MBo   (2002-05-14 16:43:00) [9]

наколенная поделка ;)

TCRG=class(TRadioGroup)
private
procedure ButtonClick(Sender: TObject);
public
procedure updatecount;
end;

var crg1:tcrg;

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
crg1:=tcrg.create(self);
crg1.parent:=self;
crg1.items.add("1");
crg1.items.add("2");
crg1.items.add("3");
crg1.updatecount;
end;

procedure TCRG.ButtonClick(Sender: TObject);
var i:integer;
begin
for i:=0 to controlCount-1 do
if controls[i]<>Sender then
TRadiobutton(controls[i]).font.style:=TRadiobutton(controls[i]).font.style-[fsBold]
else begin
ItemIndex:=i;
TRadiobutton(controls[i]).font.style:=TRadiobutton(controls[i]).font.style+[fsBold];
end;
Changed;
Click;
end;

procedure TCRG.updatecount;// над этим надо подумать - вставлять код в конструктор и еще где-то.
// Пока не вижу, почему не устанавливается обработчик
//в конструкторе Radiobutton
var i:integer;
begin
for i:=0 to controlCount-1 do
TRadioButton(controls[i]).onclick:=buttonclick;
end;


Игорь Шевченко   (2002-05-14 16:42:00) [10]

День добрый, Alx2,

там есть исходники, вполне можно довести до требуемого вида :-)

С уважением,


Alx2   (2002-05-14 16:36:00) [11]

>Игорь Шевченко © (14.05.02 16:18)
Необычно :)
Но зато глаза не разбегаются


Игорь Шевченко   (2002-05-14 16:29:00) [12]

to Johnmen ©:

Разве я говорил о ТВОИХ руках ? :-)


Alx2   (2002-05-14 16:27:00) [13]

>Игорь Шевченко © (14.05.02 16:18)
Спасибо!

Сейчас-сейчас...


Игорь Шевченко   (2002-05-14 16:18:00) [14]

День добрый, Alx2,

Стоит поглядеть:
http://www.torry.net/vcl/buttons/radiobuttons/pdj_sillitools.zip

С уважением,


Johnmen   (2002-05-14 16:18:00) [15]

>Игорь Шевченко © (14.05.02 16:03)

Ты мои руки не обижай ! Ты их не видел !


Игорь Шевченко   (2002-05-14 16:03:00) [16]

to Johnmen ©:

Тщательно помыв кривые руки... :-))


Johnmen   (2002-05-14 15:51:00) [17]

>All :
Да ладно вам...
Конечно курочить генофонд не есть хорошо.
Но иногда, тщательно помыв руки, пожно подправить пару-тройку кривоватых генов, вместо того, чтобы заниматься долгой селекцией по выведению новых сортов компонентов :))))


Alx2   (2002-05-14 15:44:00) [18]

Эх... таки придется этот "компонентище" писать :(


Игорь Шевченко   (2002-05-14 15:37:00) [19]

День добрый, Alx2,

Вместо чеса предлагаю сделать следующее: Переписать из ExtCtrls весь TCustomRadioGroup. Объявить свой класс TMyGroupButton наследник от TMyRadioButton. У TMyRadioButton перекрыть метод
CreateParams, указав у него Style := Style OR BS_OWNERDRAW, дописать метод DrawItem - всем будет интересно :-)
Или на www.torry.net сходить, может, это кто-то уже сделал :-)

С уважением,


Alx2   (2002-05-14 15:16:00) [20]

Во-во :)


Ну а я пока репу чешу...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо