Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Динамическое создание Label ов   Найти похожие ветки 

 
bagira   (2008-01-05 04:05) [0]

Здравствуйте. Мне нужно при выполнении программы (программа связана с базой данных) создать на форме определенное количество 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;
...

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


 
turbouser ©   (2008-01-05 04:20) [1]

while not Query.Eof do
 begin
   with TLabel.Create(Form1) do
     begin
       Parent:=Form1;
       Caption:=Query.Fields[0].AsString;
       ....
     end;
   Query.Next;
 end;

Примерно так.
Если же непременно нужен массив лейблов:

var i:integer;
....
i:=0;
SetLength(answer,_количество_записей_);
while not Query.Eof do
 begin
   answer[i] := TLabel.Create(self);
   answer[i].Parent := Form1;
       ....
   Query.Next;
   Inc(i);
 end;


 
Джо ©   (2008-01-05 04:23) [2]

> Если же непременно нужен массив лейблов:

То непременно нужно объявить массив как динамический, т.е:
answer: array of TLabel;
Это я чтобы автору понятней было.


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

Спасибо!


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

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


 
turbouser ©   (2008-01-05 04:43) [5]


> bagira   (05.01.08 04:35) [4]

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


 
MsGuns ©   (2008-01-05 14:43) [6]

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

TList


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

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

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


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

А если так. Я динамически создаю несколько панелей, а на них создаю несколько 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;


 
Anatoly Podgoretsky ©   (2008-01-06 17:50) [9]

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

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


 
{RASkov} ©   (2008-01-06 18:09) [10]

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

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


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

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


 
Dennis I. Komarov ©   (2008-01-08 15:50) [12]

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

self + F1:

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


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

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


 
Dennis I. Komarov ©   (2008-01-08 16:55) [14]

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

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


 
{RASkov} ©   (2008-01-08 17:04) [15]

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

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


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

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

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

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

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

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

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

)))


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

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

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


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

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


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

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

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


 
Loginov Dmitry ©   (2008-01-08 18:10) [20]

> Какую функцию выполняет параметр 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.


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.015 c
15-1198530408
Владимир
2007-12-25 00:06
2008.02.03
Не загружается Windows XP


15-1198754643
vajo
2007-12-27 14:24
2008.02.03
Посоветуйте с Raid


15-1199042430
Piter
2007-12-30 22:20
2008.02.03
Приготовление коктейлей


2-1200055537
buka
2008-01-11 15:45
2008.02.03
О визуализации большого текста


15-1198921024
asd
2007-12-29 12:37
2008.02.03
принцип работы телефона(обычнрго)