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

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

Динамическое создание Label'ов


Страницы:   1 2

bagira ©   (2008-01-05 04:05:00) 

Здравствуйте. Мне нужно при выполнении программы (программа связана с базой данных) создать на форме определенное количество Label'ов, равное количеству записей в одной из таблиц БД. Вопрос такой - можно ли изначально не определять максимальное количество Label'ов, которое можно будет создать, потому что все, что я нашла пока по данному вопросу, это такой пример:

var
answer: array[1..N_ANSWERS] of TLabel;
i: integer
begin
...
for i:= 1 to N_ANSWERS do begin
answer[i] := TLabel.Create(self);
answer[i].Parent := Form1;
...

Мож но ли не указывать изначально максимальное количество создаваемых динамических компонентов и если да, то как это сделать? Заранее спасибо за ответы


(MiTch)   (2008-01-08 18:40:00) [1]

Больше спасибо всем, помогли разобраться))))


(MiTch)   (2008-01-08 18:27:00) [2]

>Dennis I. Komarov[19]
а-а-а, ссылка...,  вот тут чего...
спасибо  товарищч!!!


Loginov Dmitry   (2008-01-08 18:10:00) [3]

> Какую функцию выполняет параметр self ?


Только с помощью Self можно узнать, метод какого объекта был вызван и только через Self можно получить доступ к тем или иным данным объекта.

например есть класс с методом:

TMyClass = class
public
 A: Integer;

 procedure ShowAValue;
end;

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

procedure TMyClass.ShowAValue;
begin
 ShowMessage(IntToStr(A));
end;

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

var
 Obj: TMyClass;
begin
 Obj := TMyClass.Create;
 Obj.ShowAValue;


В реальности компилятор преобразует метод ShowAValue примерно в такой вот вид:

procedure ShowAValue( Self: TMyClass);
begin
 ShowMessage(IntToStr( Self.A));
end;


А вызов Obj.ShowAValue превратится в следующее:

ShowAValue( Obj);

Получится, что Self - это и есть тот самый Obj.


Dennis I. Komarov   (2008-01-08 18:00:00) [4]

> [18] (MiTch)   (08.01.08 17:55)

НЕТ!
в i-ый элемент массива answer записывается ссылка на вновь созданный объект владельцем (Owner-ом) которого будет ... смотря где выполняется этот код (читать [15])


(MiTch)   (2008-01-08 17:55:00) [5]

Короче ,как я понял, инструкция
answer[i] := TLabel.Create(self);
позволяет получить доступ к элементу массива
array[1..N_ANSWERS] of TLabel;
(т.е элементы Label  не создаются "по новой" )
Так что-ли?


{RASkov}   (2008-01-08 17:09:00) [6]

> [16] (MiTch)   (08.01.08 17:04)
> Для информации о Сам

А что ты хочешь от перевода? Замени везде "Сам" на непереводимый Self
Или вот еще что.... давно бы сам интуитивно понял, если бы перевел только слово Self и применил мозги по отношению "Self в методе".....
Тем более есть куча примеров с этим самым Self....
:)


(MiTch)   (2008-01-08 17:04:00) [7]

В пределах выполнения метода, идентификатор Сам ссылается на объект, в котором называют метод. Например, вот - выполнение TCollection's, Добавляют метод в единице Классов.

функция TCollection. Добавьте: TCollectionItem;
начать
 Результат: = FItemClass. Создайте (Сам);
конец;

Добавляющийся метод называет Создающийся метод в классе ссылаемым областью FItemClass, которая является всегда потомком TCollectionItem. TCollectionItem. Создайте берет единственный параметр типа TCollection, так что Добавьте проходы это объект случая TCollection, где Добавляют, называется. Это иллюстрировано в следующем кодексе.

переменный MyCollection: TCollection;
...
MyCollection. Добавьте, что // MyCollection передают к TCollectionItem. Создайте метод

Сам полезно для разнообразия причин. Например, идентификатор члена, объявленный в типе класса мог бы быть повторно объявлен в блоке одного из методов класса. В этом случае, Вы можете получить доступ к оригинальному идентификатору члена как Сам. Идентификатор.

Для информации о Сам в методах класса, см. методы Класса.

)))


{RASkov}   (2008-01-08 17:04:00) [8]

> [13] (MiTch)   (08.01.08 16:46)

По деревенски:
Self - это ссылка на "самомго себя"..... на тот объект в методак которого мы обращаемся к Self
Вот еще глянь http://itby.ru/content/view/1418/40/


Dennis I. Komarov   (2008-01-08 16:55:00) [9]

> Первое где я искал это F1, стал бы я спрашивать...

это конечно радует, но как же так? Неужели ничего не нашлось?


(MiTch)   (2008-01-08 16:46:00) [10]

>Dennis I. Komarov
Первое где я искал это F1, стал бы я спрашивать...
В литературе тоже нигде не встречалось


Dennis I. Komarov   (2008-01-08 15:50:00) [11]

> [11] (MiTch)   (08.01.08 15:41)

self + F1:

Self is useful for a variety of reasons. .....


(MiTch)   (2008-01-08 15:41:00) [12]

Здраствуйте, у меня есть вопрос по коду [0] .Какую функцию выполняет параметр self ?-


{RASkov}   (2008-01-06 18:09:00) [13]

> Не использовать анонимных объектов

> bagira
Т.е. не именованных( Name='Panel1';), а обектов без ссылки на них (без var Pn: TPanel;)...


Anatoly Podgoretsky   (2008-01-06 17:50:00) [14]

> bagira  (06.01.2008 17:07:08)  [8]

Не использовать анонимных объектов


bagira   (2008-01-06 17:07:00) [15]

А если так. Я динамически создаю несколько панелей, а на них создаю несколько RadioButton'ов:

For i:=1 to N do
  with TPanel.Create(Form1) do
    begin
      Parent:=Form1;
      Caption:='';
      ....
      for j:=1 to M do
       with TPanel.Create(Form1) do
         begin
         Parent:=
*****;                   Как сюда вставить то, что он должен находится на панели?????
         
       end;
    end;


Dennis I. Komarov   (2008-01-05 16:54:00) [16]

> (Возможен вариант полностью убрать этот крестик с формы)

Сие не поможет избавиться от Alt+F4.


MsGuns   (2008-01-05 14:43:00) [17]

>Вопрос такой - можно ли изначально не определять максимальное количество Label'ов, которое можно будет создать

TList


turbouser   (2008-01-05 04:43:00) [18]


> bagira   (05.01.08 04:35) [4]

1) Form2.ShowModal;
2) Обрабатывать Form.OnCloseQuery


bagira   (2008-01-05 04:35:00) [19]

А можно еще 2 вопроса по формам.
1) как открыть форму поверх другой формы, чтобы вторая была во время открытия первой недоступной
2) как сделать так, чтобы форму нельзя было закрыть нажав на крестик в правом верхнем углу формы, но можно было закрыть нажатием на кнопку. (Возможен вариант полностью убрать этот крестик с формы)


bagira   (2008-01-05 04:32:00) [20]

Спасибо!


Страницы:   1 2

Наверх

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