Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2014, 15:34   #1
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию Двумерный массив из Edit-ов

Здравствуйте, пытаюсь создать двумерный массив из Edit-ов, рядом с которым будет Lable, в которые будут вноситься значения a[i,j] (i,j=1..n, n вводится с клавиатуры). При этом если i не равно j, то в лэйбл вводится 2a[i,j]. Короче говоря, нужно заполнить значения в формуле . И потом, эти значения из эдитов занести в массив a[i,j]. Попытался создать динамически эдиты и лэйблы, но при создани ругается, мол access violation at address, на строку Lab[i,j] := TLabel.Create(Self);
Скорее всего я не правильно описал процедуру создания компонентов, но по-другому я не придумал((( Может подскажите как это сделать?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Lab: Array of array of TLabel;
 Ed: Array of array of TEdit;
 n,i,j: Integer;
begin
  n:=strtoint(edtkp.text);
  SetLength(Lab, n+1);
  SetLength(Ed, n+1);
  for i := 0 to n-1 do
  for j := 0 to n-1 do
    begin
      Lab[i,j] := TLabel.Create(Self);
      Lab[i,j].Parent := Self;
      Lab[i,j].Left := 10;
      Lab[i,j].Top := i*30+250;
      Lab[i,j].Caption := 'a1'+IntToStr(i+1)+'=';
      Ed[i,j] := TEdit.Create(Self);
      Ed[i,j].Parent := Self;
      Ed[i,j].Left := 150;
      Ed[i,j].Top := i*30+250;
      Ed[i,j].Text := '';
    end;
end;
Изображения
Тип файла: jpg formula.jpg (28.7 Кб, 73 просмотров)
.FROST. вне форума Ответить с цитированием
Старый 01.06.2014, 15:38   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А эдиты с лейблами зачем? StringGrid для таких вещей наиболее подходит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.06.2014, 15:47   #3
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию

Не спорю. Но, чтобы заполнить значения a[i,j], думаю, удобнее использовать эдиты... Не посвященным понятнее.

Подправил, но теперь выводит не все значения. Разбираюсь..
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 Lab: Array of array of TLabel;
 Ed: Array of array of TEdit;
 n,i,j: Integer;
begin
  n:=strtoint(edtkp.text);
  SetLength(Lab, n+1,n+1);
  SetLength(Ed, n+1,n+1);
  for i := 0 to n-1 do
  begin
  j:=0;
  while j<=n-1 do
    begin
      Lab[i,j] := TLabel.Create(Self);
      Lab[i,j].Parent := Self;
      Lab[i,j].Left := 10;
      Lab[i,j].Top := i*30+250;
      Lab[i,j].Caption := 'a'+IntToStr(i+1)+IntToStr(j+1)+'=';
      Ed[i,j] := TEdit.Create(Self);
      Ed[i,j].Parent := Self;
      Ed[i,j].Left := 150;
      Ed[i,j].Top := i*30+250;
      Ed[i,j].Text := '';
      Inc(j);
    end;
    end;
end;

Последний раз редактировалось Stilet; 02.06.2014 в 10:00.
.FROST. вне форума Ответить с цитированием
Старый 02.06.2014, 00:29   #4
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

У тебя выводится всё. Просто из за того что Left всех контроллов это константа, ты наложил их друг на друга.
Код:
Lab[i,j].Left := j*30;
...
Ed[i,j].Left := 150 + j * 150;
doktor255 вне форума Ответить с цитированием
Старый 02.06.2014, 01:56   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от doktor255 Посмотреть сообщение
У тебя выводится всё. Просто из за того что Left всех контроллов это константа, ты наложил их друг на друга.
Код:
Lab[i,j].Left := j*30;
...
Ed[i,j].Left := 150 + j * 150;
Так Top'ы то у них разные. А менять Left'ы? Тебе нравится лесенка?

P.S.
Но я лично не понял слова ТС "теперь выводит не все значения". Кто выводит, какие значения?
northener вне форума Ответить с цитированием
Старый 02.06.2014, 07:12   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

northener Не кури больше эту траву. Двойной цикл, и вся вторая ветка цикла визуально ложится друг на друга.

Цитата:
Сообщение от northener Посмотреть сообщение
Кто выводит?
Программа
Цитата:
какие значения?
Не значения а компоненты. Только выводятся все, просто они накладываются. Не можешь сообразить, напиши в делфи код, и посмотри.

Последний раз редактировалось doktor255; 02.06.2014 в 07:23.
doktor255 вне форума Ответить с цитированием
Старый 02.06.2014, 10:06   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Не посвященным понятнее.
Дело в том что если ты просто учишься создавать тучу компонентов и выстраивать их по некому ордеру, то еще понять можно, но твой код выше увы плодит много мусора, поскольку уже созданные эдиты при втором нажатии останутся перекрытыми вновь создаваемыми, и потеряют якорь к программе - т.е. их по идее не освободишь (хотя собственно освободить можно через контейнер формы).

Если же тебе нужно просто нормальное отображение данных - выше был дан правильный ответ про грид.

Да, еще такой момент: Я бы наверное предпочел вместо вычисления координат, куда ставить эдиты выравнивание. Т.е. Align:=AlTop.
А если нужно в несколько колонок - помещал бы на Panels.
I'm learning to live...

Последний раз редактировалось Stilet; 02.06.2014 в 10:08.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Java: Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Заменить первые три строки массива A vikysha55 Помощь студентам 1 16.04.2014 10:50
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
массив edit-ов fawr Общие вопросы Delphi 3 07.04.2010 23:34
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40