Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.03;
Скачать: [xml.tar.bz2];

Вниз

Динамическое создание 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.034 c
15-1198643034
vajo
2007-12-26 07:23
2008.02.03
Гигабитные сети


15-1198605191
Maxim, P.
2007-12-25 20:53
2008.02.03
& и ~ в cpp


15-1198784364
fics
2007-12-27 22:39
2008.02.03
1C


2-1199627517
antonn (work)
2008-01-06 16:51
2008.02.03
random


3-1190718421
Nemec
2007-09-25 15:07
2008.02.03
Обновление данных на форме под InterBase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский