![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что-то не понятное...(для меня)
Новенкий в Делфи © (2002-11-08 05:51:00)При нажатии на кнопку, расширяю массив:
Type RFonEl = record
Allias:string;
F: TFont;
end;
var FonEl: array of RFonEL;
...
procedure TForm1.btNewFonClick(Sender: TObject);
var n:integer;
begin
if FD1.Execute then
begin
SetLength(FonEl,Length(FonEl)+1);
n:= High(FonEl);
lbFont.Items.Add("Font Element "+IntToStr(n));
FonEl[n].Allias:="Font Element "+IntToStr(n);
FonEl[n].F:=FD1.Font;
end;
end;
После чего, во всех F этого массива, становится одинаковое значение, то которое ьыло выбранно последний раз.
Как так получается и как с этим бороться
Новенький в Делфи (2002-11-08 17:39:00) [1]Всех благодарю!
MegaBass (2002-11-08 11:19:00) [2]Alex44 прав в отличии от Николай Быков
Alex44 (2002-11-08 11:06:00) [3]Vo vseh zapisyah hranitsya SSYLKA na FD.Font, t.e., odin i tot zhe object. Nuzhno:
FonEl[n].F:=TFont.Create;
FonEl[n].F.Assign(FD1.Font);
I ne zabyvat" FontEl[n].F.Free !
Юрий (2002-11-08 10:33:00) [4]> массив для хранения твоих записей не подходит
Здесь, наверное, имелось ввиду: "Записи для хранения объектов не подходят"
Ведь на самом деле в записи хранится не сам объект, а только указатель на него. Можно конечно попытаться вывернуться через:
Type RFonEl = record
Allias:string;
F: string[SizeOf(TFont)];
end;
Затем любым способом запихиваем в RFonEl.F готовый объект, а вытаскиваем типа:
MyFont:=@RFonEl.F или (@RFonEl.F as TFont) или на подобии того. Сам не пробовал, но по идее можно выкрутиться.
mmb (2002-11-08 10:20:00) [5]Может быть надо так делать
FonEl[n].F.Assign(FD1.Font);
Николай Быков (2002-11-08 08:57:00) [6]
> массив для хранения твоих записей не подходит
Да ну? У меня программа на это основанна и все прекрасно работает!
VaS (2002-11-08 08:50:00) [7]Поле твоей записи F: TFont - объект. Его нужно создавать вызовом конструктора F:=TFont.Create. Поэтому динамические массив для хранения твоих записей не подходит. Используй TStringList, TList, TObjectList например, выделяя помять под записи с помощью New, освобождая с помощью Dispose, и не забывая про F.
Николай Быков (2002-11-08 06:12:00) [8]Так..... Либо объясни что здесь означают эти переменные, либо приводи пример со стандартными именами (Form1, OpenDialog1, Button1 и т.д.)
И что ты хочешь сделать. Я, например, когда отвечаю на вопрос с просбюой найти баг в исхожниках, засовываю текст в Дельфи и мне нужно это дело со стандартныи именами.