Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 565

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

Вопрос такой:

Я создаю динамически "радиобатоны", caption к ним подгружаю из ini файла, потом мне нужно узнать caption той кнопти которая cheked, помогите плз!

В этом коде все нормально загружается, вот пытаюсь определить текст выбраной кнопки и все)) в переменной my остается только последнее значение!

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls,inifiles;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Button1: TButton;
  12. Button2: TButton;
  13. Label1: TLabel;
  14. procedure Button1Click(Sender: TObject);
  15. procedure Button2Click(Sender: TObject);
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. var
  23. Form1: TForm1;
  24. mybut : TRadioButton;
  25. ini : TIniFile;
  26. i : Integer;
  27.  
  28. implementation
  29.  
  30. {$R *.dfm}
  31.  
  32. procedure TForm1.Button1Click(Sender: TObject);
  33. begin
  34. ini:=TIniFile.Create('C:1.ini');
  35.  
  36. for i:=0 to 3 do
  37. begin
  38. mybut:=TRadioButton.Create(Self);
  39. mybut.Parent:=Form1;
  40. mybut.Left:=10;
  41. mybut.Top:=i*25;
  42. mybut.Caption:=ini.ReadString(IntToStr(i),'var', mybut.Caption);
  43. end;
  44. end;
  45.  
  46. procedure TForm1.Button2Click(Sender: TObject);
  47. begin
  48. if mybut.Checked then Label1.Caption:=mybut.Caption;
  49. end;
  50.  
  51. end.
  52.  


unl0K Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: unl0K (статус: Посетитель)
Вопрос отправлен: 26 марта 2009, 00:54
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 26 марта 2009, 11:46; участников в обсуждении: 3.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 26 марта 2009, 05:53 [#1]:

А чего Вы хотели, если информация о предыдущих кнопках просто напросто теряется? В переменной myBut хранится ссылка только на последнюю кнопку. Либо создавайте массив для хранения кнопок, либо в цикле перебирайте контролы на форме, проверяйте являются ли они TRadioButton, если да, то проверяйте Checked и т.д.
unl0K

unl0K (статус: Посетитель), 26 марта 2009, 10:37 [#2]:

Вся проблема в том - что, я немогу реализовать не одного варианта сказанного вами, если не трудно покажите как это делается!
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 26 марта 2009, 10:57 [#3]:

А где в Вашем коде переменная my, которой Вы присваиваете значение?
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 26 марта 2009, 11:20 [#4]:

Извените, ощибся - она mybut
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 26 марта 2009, 11:34 [#5]:

у Вас есть несколько вариантов.
первое - создать динамический массив (а ещё лучше что то типа TList) и туда всё записывать. А можно просто искать по имени компоненты.
Первый вариант для Вас наверно будет проще.
 private
    { Private declarations }
    List:TList;
  public
    { Public declarations }
  end;
.....
procedure ... FormCreate.....
begin
List := TList.Create;
end;
......
procedure TForm1.Button1Click(Sender: TObject);
begin
 ini:=TIniFile.Create('C:1.ini');
 
 for i:=0 to 3 do
 begin
   mybut:=TRadioButton.Create(Form1);
   mybut.Parent:=Form1;
   mybut.Left:=10;
   mybut.Top:=i*25;
   mybut.Caption:=ini.ReadString(IntToStr(i),'var', mybut.Caption);
   list.add(mybut); //<< добавили в массив
 end;
end;
.....
procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
for i := 0 to list.count -1 do
if TRadioButton(list[i]).Checked then Label1.Caption:=Label1.Caption + TRadioButton(list[i]).Caption;
end;
....
procedure ....FormDestroy....;
begin
  list.free;
end;
удалять компоненты, которые мы в список забросили не нужно (это будет ошибкой) - при создании мы написали строки
mybut:=TRadioButton.Create(Form1);
   mybut.Parent:=Form1;
Благодаря этому, форма есть хозяином этих компонентов и сама их удалит по своему удалению.

P.S. Аккуратно переписывайте код. я немного поменял. Полные имена процедур допишите сами:)
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 26 марта 2009, 11:46 [#6]:

Вадим, спасибо Вам большое - как всегда выручаете!
Относись к людям так, как хотел бы, чтобы они к тебе относились!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:39
Выполнено за 0.02 сек.