Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Вниз

Помогите, плз, с динамическим созданием двумерного массива   Найти похожие ветки 

 
Destroyer ©   (2005-07-15 22:56) [0]

Динамически создаются панели, их может быть сколько угодно. На каждой пенели динамически создаются кнопки, их тоже должно быть сколько угодно. Надо создать динамический массив, который это описывал-бы. (например на 1-ой 3 кнопки, на 2-ой две и т.д.)
Т.е. массив вида: 1 1 1 1 1 1
                 2 2 2 2 2 2
                 3   3   3 3
                     4   4 4
                         5  
Как сделать такой массив (неквадратный)? Или есть предложения как еще осуществить такое создание кнопок и панелей?


 
Гаврила ©   (2005-07-15 23:02) [1]

Двумерный массив не подходит.
Я бы сделал объектами

Type
 TPanelObject = class
 private
   FPanel: TPanel;
   FButtons: array of TButton;
 end;

var
 A: array of TPanelObject;

Или вместо массивов списки (TList) (я бы сделал через списки)


 
default ©   (2005-07-15 23:26) [2]

что-то я не понял...
почему нельзя создать одномерный массив типа числа кнопок
индекс в массиве - номер панели...


 
Destroyer ©   (2005-07-15 23:27) [3]

Интересно. А можно ссылочку на инфу по работе со списками и объектами. А то что-то ничего дельного найти не могу.


 
Destroyer ©   (2005-07-15 23:32) [4]

default, зачем замарачиваться с лишними массивами, когда, видимо, такое осуществить можно.


 
default ©   (2005-07-15 23:35) [5]

Destroyer ©   (15.07.05 23:32) [4]
"моя твоя не понимать"(c)


 
Anatoly Podgoretsky ©   (2005-07-16 00:17) [6]

Панель уже имеет такой список. Сами же панели тоже расположены в каком то контейнере


 
Гаврила ©   (2005-07-16 09:08) [7]


>  [6] Anatoly Podgoretsky ©  


> Панель уже имеет такой список


Имеет, только  там не одни кнопки. И третья кнопка не обязательно соответствует третьему элементу в списке панели


> [3] Destroyer ©   (15.07.05 23:27)
> Интересно. А можно ссылочку на инфу по работе со списками
> и объектами. А то что-то ничего дельного найти не могу.


Ну объекты (или классы) -  это, собственно, то, без чего программитрвать в Delphi вообще нереально, так что не знаю даже, какие ссылки нужны. Это основы языка.
А списки - класс TList находится в модуле Classes.pas, и хорошо описан в хелпе


 
286 ©   (2005-07-16 13:58) [8]

Я вот прямо сейчас пишу программу с динамическими массивами
type
 Tmassiv = array of array of тип массива
var
 massiv : Tmassiv;
Смотри дальше:
Сначало задается размер по первому измерению (число столбцов)
 SetLenght (massiv, размер);
и дальше указываешь число элементов для каждого из столбцов
 SetLenght (massiv[0..размер], и число элементов)
т.е. это полностью покрывает твою задачу. Я щас делаю нечто похожее.


 
Destroyer ©   (2005-07-16 17:22) [9]

А можно сделать так, используя записи?
...
RecButOnPan=record
But:array of TSpeedButton;
end;
...
var
ButOnPan                :array of RecButOnPan;
openedpan               :integer;// индекс открытой панели
nbOnPan                 :integer;// индекс кнопки на открытой панели

procedure TForm1.Button1Click(Sender: TObject);
begin
openedpan:=0; // пусть открыта панель с индексом 0
// выделим память для панелей
setlength(ButOnPan,2); // допустим 2-ве панели
// выделим память для кнопок на панелях
nbOnPan:=nbOnPan+1;     // кноопок становится на 1 больше
if high(ButOnPan[openedpan].But)<0 then // если первая кнопка, то один элемент в массиве
begin
 setlength(ButOnPan[openedpan].But,1); // если первая кнопка, то элемент в массиве один
 nbOnPan:=0;               // индекс кнопки =0
end
else // если не первая, то
setlength(ButOnPan[openedpan].but,nbOnPan+1);   // ButOnPan[индекс панели на которой создавать кнопки].but,сколько всего кнопок
// создаём кнопки
ButOnPan[openedpan].But[nbOnPan].Create(Application);  // <-- тут ошибка access violation. Read of adress  что-то типа 00000000

end;
Выходит за пределы массива. Но почему? Вроде всё должно быть ок.
286, это примерно тоже, что и я предложил. Попробую и так.


 
Destroyer ©   (2005-07-16 17:43) [10]

Попробовал способом 286, но ошибка возникает там же. Причем видимо ошибка во втором значении двумерного массива
massiv[0,0].Create(Application);
Может я что-то не так делаю с динамическим созданием? Как правильно?


 
Destroyer ©   (2005-07-16 18:09) [11]

Всё дошло. Я просто стормозил. Надо так:
ButOnPan[openedpan].But[nbOnPan]:=TSpeedButton.Create(Application);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.08.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.05 c
14-1121400496
БарЛог
2005-07-15 08:08
2005.08.07
Заработок в интернет. Пробывали?


3-1120198692
Belkova
2005-07-01 10:18
2005.08.07
Экспорт в 1С


3-1120285524
Draught
2005-07-02 10:25
2005.08.07
Фильтр в ADOTable


1-1121928117
Funt_IK
2005-07-21 10:41
2005.08.07
Delphi 2005


14-1121262155
lookin
2005-07-13 17:42
2005.08.07
У кого есть свой сайт со своими фотоматериалами?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский