Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Массив из переменных [D7, XP]


Страницы:   1 2 3

jetairnav ©   (2015-12-18 09:42:00) 

Всем привет! Вопрос такой: существует ли механизм перечисления переменных? Конкретно хочется что-то типа такого:
var ArrayOfVar:array[0..n] of Pointer (@Int, @Double, @Str....);
Value:= ArrayOfVar[index]^;


jetairnav   (2015-12-21 15:07:00) [1]

Спасибо!


jetairnav   (2015-12-21 15:06:00) [2]

Спасибо!


sniknik   (2015-12-21 14:20:00) [3]

> А может тогда вообще хранить данные в таблице?..
если сам и пишешь и читаешь данные (а не абстрактно "есть бинарный типизированный файл") то однозначно да.

> Посоветуете что-нить прогрессивное?
облака-хмл-веб?... ну нафиг. прогрессивность нынче излишне усложнена в угоду маркетингу.

простое/привычное - ADODataSet в форме ClientDataSet (сам "клиент" требует модуля мидас, у ADO аналог предустановлен в системе, а по сути позволяет тоже самое, т.е. проще).
поля в дизайне прописать и -
ADODataSet1.CreateDataSet/SaveToFile()/LoadFromFile();
все в общем то.


jetairnav   (2015-12-21 14:11:00) [4]

А может тогда вообще хранить данные в таблице?.. Посоветуете что-нить прогрессивное?


jetairnav   (2015-12-21 14:09:00) [5]

А может тогда вообще хранить данные в таблице?.. Посоветуете что-нить прогрессивное?


jetairnav   (2015-12-21 12:56:00) [6]

Да, идея с таблицей более изящная, спасибо!


sniknik   (2015-12-21 11:37:00) [7]

хотя, само собой BDE очень уж устарел, заменить чем нибудь поновее.


sniknik   (2015-12-21 11:36:00) [8]

\Delphi7\Demos\TeeChart\
Chart Styles... -> Database Charts


sniknik   (2015-12-21 11:25:00) [9]

> данные конкретного поля
поля? т.е. колонки если представлять в табличном виде?  

> то как лучше?
ну раз уж пошли "записи" и "поля"... то лучше оформить в таблицу и показать все сразу в гриде... так и с графиком, если нужен, будет удобнее/нагляднее работать (ну можно к примеру в Exсel кинуть и там его график подключить, динамически настраиваемый пользователем, хотя Exсel конечно не всегда вариант ;(, у нас к примеру работа с ним административно ограничена, не у всех есть).


jetairnav   (2015-12-21 11:13:00) [10]

И  основная идея этого говнокода -  это сопоставление номера в массиве RAdioButtonGroup и номера в массиве с указателями.


jetairnav   (2015-12-21 11:03:00) [11]

Короче говоря, к главному вопросу и тому, как я пытаюсь его решить. Идея такая, есть бинарный типизированный файл. Хочется сделать утилиту, которая загружала бы данные этого файла в память, а затем отображала данные конкретного поля по желанию польщователя. Не придумал ничего лучшего, чем сделать как в  вышеприведенном говнокоде.
Если так стремно, то как лучше?


sniknik   (2015-12-21 10:58:00) [12]

> в коде у тебя
в последнем само собой, хоть что то проясняется, до этого было вообще не пойми что.


sniknik   (2015-12-21 10:55:00) [13]

> присваиваем значение переменной типа TParsedISB
это и так видно из кода. а смысл действий какой? не что, а зачем.

> Отображаем в tchart значение поля записи.
в коде у тебя не поля записи, а одно поле из списка записей, через промежуточный массив (греем процессор?).

> нажимает на интересующую его кнопку RadioButton с названием переменной и наслаждается
чем? чего ты хочешь показать? смысл?


jetairnav   (2015-12-21 09:33:00) [14]

Итак, словами...
На каждом такте цикла присваиваем значение переменной типа TParsedISB текущее значение массива типа TParsedISB.  Отображаем в tchart значение поля записи. А вот что это за поле выбирается с помощью массива из указателей на каждое из них. Номер в массиве соответсьвует значению RadioButton.ItemIndex.
Таким образом, пользователь чудо-программы нажимает на интересующую его кнопку RadioButton с названием переменной и наслаждается превосходным ее изображением в TChart.


sniknik   (2015-12-21 08:10:00) [15]

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

> ArrayOfPointers[RadioGroup1.ItemIndex]^ - это не массив, а лишь одно его значение..
такой загадочный...
и что?

ладно попробуем на "твоем" языке
Chart1.Series[0].AddArray(points); - это не массив это весь твой цикл..


jetairnav   (2015-12-19 10:28:00) [16]

type
TParsedISB = record      
   Addr   : Variant;
   Counter: Variant;
   SW     : Variant;
   Tsys   : Variant;
   Data   : array[0..2] of Variant;
   dV     : array[0..2] of Variant;
end;

var
ParsedISB: TParsedISB;
ParsedISB_Arr:= array of TParsedISB;
ArrayOfPointers: array[0..K] of PVariant = (
  @ParsedISB.Addr,
  @ParsedISB.Counter,
  ...
 );
const ParamNames :array[0..K] of String=("Addr", "Counter"....)
...
procedure TMainForm.OnCreate(Sender: TObject);
var i: integer;
begin
for i := 0 to High(ParamArray) do
    RadioGroup1.Items.Add(ParamNames[i])
end;
   
....

procedure TMainForm.Button1Click(Sender: TObject);
var i: integer;
begin

  for i:=0 to NumberOfRecords-1 do
   begin
    ParsedISB:= ParsedISB_Arr[i];
    chart1.series[0].Add(ArrayOfPointers[RadioGroup1.ItemIdex]^ )
  end;
 
 

  @ParsedISB.Addr,
  @ParsedISB.Counter,
  ...
 );
const ParamNames :array[0..K] of String=("Addr", "Counter"....)


jetairnav   (2015-12-19 10:20:00) [17]


> sniknik ©   (18.12.15 20:11) [28]

> for i:=0 to NumberOfRecords-1 do
>    begin
>     ParsedISB:= ParsedISB_Arr[i];
>     chart1.series[0].Add(ArrayOfPointers[RadioGroup1.ItemIndex]^)
>    end;

ArrayOfPointers[RadioGroup1.ItemIndex]^ - это не массив, а лишь одно его значение..


Юоий Зотов   (2015-12-18 23:30:00) [18]

Удалено модератором
Примечание: Дубль


Юоий Зотов   (2015-12-18 23:29:00) [19]

>  я не программист, поэтому могу себе позволить любые эстетства

Шикарно. Записал а тетрадку а-ля "анекдоты про программистов". Спасибо.


KSergey   (2015-12-18 23:08:00) [20]

> jetairnav   (18.12.15 17:49) [26]
> А почему ахинея? Лучше делать через сотню if? ))

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


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо