Текущий архив: 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.5 MB
Время: 0.05 c