delphi - TRadioGroup с оборачиваемыми элементами - PullRequest
2 голосов
/ 23 ноября 2011

Мне нужен небольшой пример на Delphi 5 о том, как текст элементов, присутствующих в радиогруппе, обернуть текст, если это необходимо.

Я решил это в Delphi 2006, используя свойство кнопок, но в D5 это свойство не существует.

LE: есть ли решение, кроме SetWindowLong?

Ответы [ 2 ]

2 голосов
/ 23 ноября 2011

Вы можете легко получить кнопки в Delphi 5, перебирая свойство Controls радиогруппы. Но тогда что ты собираешься делать, чтобы они завернулись? Радиокнопка Delphi 5 не имеет свойства WordWrap.

На вашем месте я бы добавил группу переключателей в групповое поле, а не использовал группу радио. Это дает вам контроль над тем, какой класс переключателей вы создаете. Затем создайте свой собственный класс переключателей и реализуйте свойство WordWrap. Для этого вам нужно добавить стиль BS_MULTILINE в CreateParams, как это делают современные версии Delphi.

Конечно, метод, изложенный в вашем ответе, тоже будет работать!

2 голосов
/ 23 ноября 2011

сделано.

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
 rbs: DWORD;
 rb: TRadioButton;
begin
 with RadioGroup1 do
 begin
  for i := 0 to ControlCount-1 do
   begin
    rb := radiogroup1.controls[i] as TRadioButton;
    rbs := GetWindowLong(rb.Handle, GWL_STYLE);
    rbs := rbs or BS_MULTILINE or BS_TOP;
    SetWindowLong(rb.Handle, GWL_STYLE, rbs);
   end ;
   Invalidate;
 end ;
end;
...