Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
Rayne
76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 728
1

массив типа TObject

20.09.2010, 18:26. Просмотров 1306. Ответов 7

надо как-нибудь реализовать построение динамических элементов - чекбокс\радиокнопка\эдит через один массив. Для этого как я понял у него должен быть тип TOBject, так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
procedure TForm1.Button2Click(Sender: TObject);
begin
inc(a);
for b:=1 to ms[a].num do begin
if (ms[a].aText[b].smm=1)and(ms[a].num=1) then begin
    btns[b]:=TCheckbox.Create(self);
    with btns[b] do begin
      Parent :=Self;
      Visible := True;
      Height:=21;
      Width:=265;
      Top := 180+24*b;
      Left :=48;
      Caption:=ms[a].Atext[b].Text;
    end;
end;
end;
end;
при попытке создания - ошибки не происходит явной, но формы сворачивается в тонкую полосочку, больше ничего не происходит. Как исправить? -_-

Добавлено через 8 минут
то же самое делаю присвоив массиву конкретный тип - работает. А так нет =\
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2010, 18:26
Ответы с готовыми решениями:

Как передать через TObject два разных типа?
т.е. procedure fooBar(name : TObject); begin // тут должна быть проверка на 2 типа, TADOQuery...

Как записать в массив типа variant значение типа double?
Есть массив массивов типа variant. В первой ячейке (элементе) текст, в остальных 4 нули. Текст-1...

TObject
В книге прочитал про какой-то базовый класс TObject. Что это за класс? И что означает это type...

tobject.left/top
Есть ли способ работать с left/top с группой обьектов(гарантируется, что у всех эти св-ва есть)?

Ошибка Exception and TObject
День добрый! Использовал раньше Delphi 7 и код для потоков все работало и компилелось нормально Но...

7
iama
1293 / 982 / 119
Регистрация: 30.07.2010
Сообщений: 5,297
20.09.2010, 18:27 2
почему нельзя сделать через три массива?
0
Rayne
76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 728
20.09.2010, 18:32  [ТС] 3
предыдущая часть и так варварски написана, тут хоть покороче сделаю. Очередной тест пишу для института. Три типа вопросов, соответственно с полями. Наверно лучше чтобы общий индекс массива был для всех трёх вопросов.
0
Vas-e-na
418 / 415 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
20.09.2010, 18:54 4
Rayne, а почему бы вместо массива Tobject не использовать массив Pointer'oв???
1
20.09.2010, 18:54
Rayne
76 / 62 / 23
Регистрация: 11.07.2009
Сообщений: 728
20.09.2010, 19:17  [ТС] 5
ааа как это сделать? -_-
0
Vas-e-na
418 / 415 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
20.09.2010, 20:28 6
Rayne, я так понял с укзателями не дружим?
0
Башир
208 / 208 / 20
Регистрация: 18.05.2010
Сообщений: 846
20.09.2010, 21:03 7
Цитата Сообщение от Vas-e-na Посмотреть сообщение
Rayne, а почему бы вместо массива Tobject не использовать массив Pointer'oв???
Я тоже такой же идеи придерживаюсь.
Цитата Сообщение от Rayne Посмотреть сообщение
ааа как это сделать? -_-
Примерно так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
type
  PTObjects = Array Of Pointer;
 
  TForm1 = class(TForm)
    Button1: TButton;
    RadioGroup1: TRadioGroup;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure CreateObject(Const X, Y, T: Integer; Const S: String; var P: PTObjects);
    procedure Button2Click(Sender: TObject);
  private
    PObjects: PTObjects;
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  CreateObject(StrToInt(Edit1.Text), StrToInt(Edit2.Text), RadioGroup1.ItemIndex+1, Edit3.Text, PObjects);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  P: Pointer;
begin
  // Так можно получить доступ к объекту
  if TObject(PObjects[StrToInt(Edit3.Text)]) is TCheckBox then ShowMessage(TCheckBox(PObjects[StrToInt(Edit3.Text)]).Caption);
  if TObject(PObjects[StrToInt(Edit3.Text)]) is TRadioButton then ShowMessage(TRadioButton(PObjects[StrToInt(Edit3.Text)]).Caption);
  if TObject(PObjects[StrToInt(Edit3.Text)]) is TEdit then ShowMessage(TEdit(PObjects[StrToInt(Edit3.Text)]).Text);
end;
 
// Процедура для создание объекта
procedure TForm1.CreateObject(Const X, Y, T: Integer; Const S: String; var P: PTObjects);
var
  ChBox: TCheckBox;
  RdBtn: TRadioButton;
  Edt  : TEdit;
begin
  case T of
    1: begin
         ChBox:=TCheckBox.Create(Self);
         ChBox.Left:=X;
         ChBox.Top:=Y;
         ChBox.Caption:=S;
         ChBox.Parent:=Form1;
         SetLength(P, Length(P)+1);
         P[High(P)]:=ChBox; // Получение указателя на объект
       end;
    2: begin
         RdBtn:=TRadioButton.Create(Self);
         RdBtn.Left:=X;
         RdBtn.Top:=Y;
         RdBtn.Caption:=S;
         RdBtn.Parent:=Form1;
         SetLength(P, Length(P)+1);
         P[High(P)]:=RdBtn; // Получение указателя на объект
       end;
    3: begin
         Edt:=TEdit.Create(Self);
         Edt.Left:=X;
         Edt.Top:=Y;
         Edt.Text:=S;
         Edt.Parent:=Form1;
         SetLength(P, Length(P)+1);
         P[High(P)]:=Edt; // Получение указателя на объект
       end;
  end;
end;
0
new_in_net
279 / 258 / 32
Регистрация: 11.11.2009
Сообщений: 605
20.09.2010, 21:25 8
Используйте для этого TObjectList - он специально предназначен для хранения списка любых объектов и все удобства типа Add/Insert/Delete даже освобождать ли объекты при Clear (OwnsObjects) имеются
0
20.09.2010, 21:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.09.2010, 21:25

Объектный тип TObject
правильно ли я понимаю что вообще объектный тип в виде Type <имя> = object является архаической...

Добавления в файл на основе TObject
Программа должна работать с Тобджект. Реализовать код добавления в файл на основе тобджект. Все...

Обработка параметром Sender as TObject
Подскажите как отладить код с параметром Sender такого типа : TForm1 = class(TForm) Shape1:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru