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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2011, 12:50   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Структура хранения "разномастных" данных

В общем сейчас ситуейшн, в которой не могу выбрать вариант.

В общем структура такая (R - record)

Warehouse (R)
+-Form = Array of TForm (R)
+-Texture = Array of TTexture (R)
+-Button...Label...бла-бла-бла, контролы.

Так вот, внутри структуры TForm хочу поместить список индексов контролов, которые относятся к данной форме.

Варианты, которые пришли в голову:
  1. Добавить 2 свойства для TForm:
    Код:
    TControls = Record
     Single : Array of Integer;
     Double : Array of Array of Integer;
    А индексы контролов хранить так:
    Form.Controls.Double[ELEM_TYPE_LABEL, 5 {Это порядковый номер контрола формы}] - здесь хранить индекс контрола в Warehouse.Label
    Form.Controls.Single[ELEM_TYPE_LABEL {Это набор интеджерных констант}] - здесь хранить длину второй мерности массива double.
  2. Добавить 1 свойство для TForm:
    То же, что и выше, но без Single, если уметь получать вторую мерность массива через по-другому.
  3. Добавить одномерный массив, в котором хранить интеджерные значения, но следующим образом:
    $FFFFFF - - это тип контрола, а - это индекс контрола в соответствующем Warehouse.XXX

Есть какие идеи?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 13:24   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
TControls = Record
А я бы это классом сделал... Наподобие TList. ИМХО удобнее будет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 13:29   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Повторюсь, использование классов не оправдано в данном проекте.

Классы больше жрут памяти, классы медленнее, исполняемый файл с классами больше в 10 раз.

Я вот думаю, может что-то с указателями замутить можно?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 13:35   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
может что-то с указателями замутить можно?
Можно конечно, но писать мороку будет... Память то ты как будешь распределять?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 13:39   #5
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
но писать мороку будет
Ок, оставлю на десерт, если борщ не попрет.

А что из 3-х вышеперечисленных методов кажется Вам наиболее подходящим? Я склоняюсь к 3-му из-за наименьшего задействования ресурсов. 256 поддерживаемых типов контролов + 65000 как максимальное количество.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 30.01.2011, 13:50   #6
InternetStranger
php / delphi
Форумчанин
 
Аватар для InternetStranger
 
Регистрация: 10.06.2007
Сообщений: 175
По умолчанию

Можно еще каждому контролу добавить волшебное поле, скажем, Parent, в которой записывать индекс (или другой ID) "родительской" формы (т.е. которой он [контрол] принадлежит).

И определить процедуру, например, извлечения всех Label указанной формы:
Код:
function getControlsOfThisForm(CtrlType:TCtrlType; FormID: Integer): TListOfControls;
begin
     if CtrlType = ELEM_TYPE_LABEL then begin
         for i:=0 to ... do 
             if Warehouse.Labels[i].Parent = FormID then 
                Result.Add( Warehouse.Labels[i] );
     end;
end;
ps: Поскольку не представляю для каких целей собираетесь использовать все это, не могу сказать о преимуществах или недостатках такого подхода.
Хотя... Описанный поход был бы гибче, т.к. в Parent м/о вписывать не только ID формы, но и например, ID какой-нибудь группы контролов на форме (так м/о было бы определять принадлежность контрола не т/о к одной из форм, но и к определенной группе объектов этой формы).


На правах рекламы: Знаю, Вы говорили, что "не оправдано", но классы- более продвинутые структуры: при создании объектов они снабжаются RTTI-информацией, что делает возможным существование поиска классов, свойств и методов по их названиям и много чего другого
G.Azamat { Web Development / Computer simulation }
Начинающий программист думает, что в килобайте 1000 байтов, а законченный уверен, что в километре 1024 метра.
InternetStranger вне форума Ответить с цитированием
Старый 30.01.2011, 13:57   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

У контролов свойство Parent таки есть. Для визуальных там храню индекс формы в хранилище. Почему я тогда делаю выше представленное? Для возможности цикла For I := 0 To Form.ControlCount-1 без перечисления всех контролов, что при их большом количестве будет делом небыстрым.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где скачать в электронном виде "ATL 8. Внутренняя структура и применение" graviator Обсуждение статей 4 23.02.2025 16:46
[Pascal] Структура хранения и ведения следующих данных Бендер Помощь студентам 2 21.12.2010 09:48
Как "повесить " передачу данных из формы на событие нажатия кнопки типа "button" ? vedro-compota JavaScript, Ajax 10 14.12.2010 21:05
Структура данных для хранения предметов L_M Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 15.11.2010 21:08
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04