[Решено] Массив форм для многооконного редактора

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

[Решено] Массив форм для многооконного редактора

Сообщение son » 22.11.2011 13:32:17

Здравствуйте. Помогите пожалуйста разобраться или подскажите одно из решений. Разрабатываю многооконный редактор. Есть модуль формы который является основой для остальных вызываемых в редакторе. Сделал массив с типом этой формы. Когда добавляю элементы в массив работает нормально. Возникает косяк что если закрыть какие то формы и потом открыть заново то несколько элементов массива ссылаются на одину и ту же форму.
Это код добавления элементов в массив:
Код: Выделить всё
var arI, arN : integer;
begin
  arN:=Length(ArrayOpenPicture);
  if arN=0 then
  begin // добавляем 0-й элемент
    SetLength(ArrayOpenPicture,1);
    ArrayOpenPicture[0]:=TfmPicture.Create(Owner);
    ArrayOpenPicture[0].Width:=800;
    ArrayOpenPicture[0].Height:=600;
    ArrayOpenPicture[0].Left:=fmHMIEditor.Left;
    ArrayOpenPicture[0].Top:=fmHMIEditor.top+fmHMIEditor.Height+25;
    ArrayOpenPicture[0].Caption:='New Picture 1';
    ArrayOpenPicture[0].Show;
  end
  else
  begin
    arI:=0;
    while (arI<arN) and (ArrayOpenPicture[arI].Handle<>0) do
    BEGIN
      inc(arI);
    end;
    if arI=arN then SetLength(ArrayOpenPicture,arN+1);
    if (ArrayOpenPicture[arI]=nil) or (ArrayOpenPicture[arI].Handle=0) then
    begin
    ArrayOpenPicture[arI]:=TfmPicture.Create(Owner);
    ArrayOpenPicture[arI].Width:=800;
    ArrayOpenPicture[arI].Height:=600;
    ArrayOpenPicture[arI].Left:=fmHMIEditor.Left;
    ArrayOpenPicture[arI].Top:=fmHMIEditor.top+fmHMIEditor.Height+25;
    ArrayOpenPicture[arI].Caption:='New Picture '+inttostr(ArrayOpenPicture[arI].Handle);
    ArrayOpenPicture[arI].Show;
    end
    else
    MessageDlg('Не nil',mtError,[mbOk],0);
  end;
  fmObjInspector.UpdateProjectTree; 

Так я просматриваю массив:
Код: Выделить всё
var arI, arN : integer;
    NewNode : TTreeNode;
begin
  TreeView1.Items.Clear;
  arN:=Length(ArrayOpenPicture);
  if arN=0 then exit;
  dec(arN);
  for arI:=0 to arN do
  begin
    if (ArrayOpenPicture[arI]<>nil) and (ArrayOpenPicture[arI].Handle<>0) then
    NewNode:=TreeView1.Items.AddChild(TreeView1.Selected,ArrayOpenPicture[arI].Caption);
    NewNode.ImageIndex:=0;
    NewNode.SelectedIndex:=0;
  end; 

Закрытие формы делаю с самоуничтожением:
Код: Выделить всё
CloseAction:=caFree;

Если открыть например 4 формы а потом закрыть 2 и 3-ю то при добавлениии новой 2 и 3 элемент ссылаются на одну и ту же форму. Подскажите в чем может быть дело или скажите есть ли альтернативные варианты решения задачи?

Добавлено спустя 3 часа 2 минуты 29 секунд:
Извиняюсь за пустую тему. Проблема решилась заданием уникального номера для каждой формы. От массива форм отказался совсем. Кстати незнаете почему TreeView вылетает с ошибкой если разрешать редактирование значений?
son
новенький
 
Сообщения: 39
Зарегистрирован: 22.11.2011 11:50:58

Re: Массив форм для многооконного редактора

Сообщение dunin » 22.11.2011 18:52:05

son писал(а):Здравствуйте. Помогите пожалуйста разобраться или подскажите одно из решений. Разрабатываю многооконный редактор. Есть модуль формы который является основой для остальных вызываемых в редакторе. Сделал массив с типом этой формы....

Начал читать тему - сразу задумался - "зачем"? :?

Дочитал до этой строки - вопрос сам собой снялся. :wink:
son писал(а):...Проблема решилась заданием уникального номера для каждой формы. От массива форм отказался совсем. Кстати незнаете почему TreeView вылетает с ошибкой если разрешать редактирование значений?


Автору удачи в создании редактора. :)
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: Массив форм для многооконного редактора

Сообщение B4rr4cuda » 23.11.2011 00:11:10

Tlist и TObjectlist уже не котируются чтоль? Обязательно надо гланды ректально резать?
Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Массив форм для многооконного редактора

Сообщение son » 23.11.2011 08:08:55

B4rr4cuda писал(а):Tlist и TObjectlist уже не котируются чтоль? Обязательно надо гланды ректально резать?

Спасибо за этот комментарий! Я не знал о TObjectlist и постоянно изобретал подобный велосипед. Это то что мне нужно в дальнейшем!
son
новенький
 
Сообщения: 39
Зарегистрирован: 22.11.2011 11:50:58

Re: Массив форм для многооконного редактора

Сообщение Brainenjii » 23.11.2011 08:10:03

А ещё есть TFPGList в модуле fgl...
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 244

Рейтинг@Mail.ru