Можно ли получить названия объектов на форме

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

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

Можно ли получить названия объектов на форме

Сообщение GAMER » 21.10.2010 11:41:19

На форме есть Label. Их имена логике не поддаются. Можно ли получить массив с их именами?

Добавлено спустя 35 минут 39 секунд:
Код: Выделить всё
For i:=0 to Self.ControlCount-1 do
  ShowMessage(Self.Controls[i].name);     

Ну и проверять там все остальное.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Можно ли получить названия объектов на форме

Сообщение RomanS » 21.10.2010 12:41:40

Думаю лучше так, чтоб выбрать только TLabel
Код: Выделить всё
  with Self do
    for i := 0 to ComponentCount - 1 do
      if Components[i] is TLabel then
        ShowMessage(Self.Controls[i].name)
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24

Re: Можно ли получить названия объектов на форме

Сообщение GAMER » 21.10.2010 13:00:30

Я согласен, просто задача у меня стоит более глобально, а вопрос задал попроще :)
Вообще задача стоит так: получить и хранить на время работы начальные параметры Top, Left, Height, Width объектов на форме, чтобы потом их использовать при ресайзе формы.
Создал массив записей
Код: Выделить всё
  RObjects = record
    Name: string;
    Top: word;
    Left: word;
    Height: word;
    Width: word;
    FontHeight: integer;
  end;     
TObjArr = Array [1..30] of RObjects; 
ObjArr: TObjArr;   


Присваиваю так:
Код: Выделить всё
For i:=0 to Self.ControlCount-1 do
begin
  ObjArr[i].Top:=Self.Controls[i].Top;
  ObjArr[i].Left:=Self.Controls[i].Left;
  ObjArr[i].Height:=Self.Controls[i].Height;
  ObjArr[i].Width:=Self.Controls[i].Width;
  ObjArr[i].FontHeight:=Self.Controls[i].Font.Height;
end;   


Все нормально, пока не начинаю присваивать значения в
Код: Выделить всё
  ObjArr[i].FontHeight:=Self.Controls[i].Font.Height;


Ошибка вилазит совершенно в другом месте, которое никакое отношение не имеет к даному массиву. Не пойму в чем проблема.
Ошибка типа SIGSEGV.

Остнавливается на строке
Код: Выделить всё
UnEtapstatus:=EmptyToZero(tmpStrArray[1]);
которая никакого отношения не имеет к данному массиву.
Ошибка также возникает, если делать присвоение отрицательного числа
Код: Выделить всё
ObjArr[i].FontHeight:=-13;
.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Можно ли получить названия объектов на форме

Сообщение RomanS » 21.10.2010 14:49:08

а здесь не может ошибки
размерность массива начинается с 1
Код: Выделить всё
TObjArr = Array [1..30] of RObjects;

а цикл идет с 0
Код: Выделить всё
For i:=0 to Self.ControlCount-1 do
begin
  ObjArr[i].Top:=Self.Controls[i].Top;
...
end;
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24

Re: Можно ли получить названия объектов на форме

Сообщение GAMER » 21.10.2010 18:58:22

2RomanS.
Вы правы, проблема в этом была, но прикол в том, что проявилась она совершенно не там, где ожидалось :)
Странно, что range check error не проявился, но наверное это что-то с настройками.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Можно ли получить названия объектов на форме

Сообщение RomanS » 21.10.2010 19:03:06

рад что помог :)
такие ошибки очень трудно найти, особенно если проект большой.
RomanS
новенький
 
Сообщения: 33
Зарегистрирован: 10.12.2007 10:08:24


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru
cron