Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 45 из 116<  1 ... 42  43  44  45  46  47  48 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Lord_of_Darkness
Lord_of_Darkness писал(а):
Можно ли как-нибудь сохранить свою структуру данных (запись), в которой присутствует динамический массив?

Угу, проще всего с помощью БД.
Но мона и без.
Опиши задачу и структуру.
На сколько большими могут быть динамические данные для записи и как много записей планируешь хранить в файле.
А то мот тебе и TClientDataSet c "головой" хватит. ;)



Партнер
 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Aleksoid1978 Вот ручками то как раз и не хочецца!
_SGK Ну я подумал и решил, что мона и INI файлом обойтись. А структуры небольшие.
Код:
  TResistanceList = record
    ValueKom: array of real;
  end;

  TCVoltageList = record
    ValueVolt: array of real;
  end;

  TAVoltageList = record
    ValueVolt: array of real;
  end;

  TCCurrentList = record
    ValueAmper: array of real;
  end;

  TACurrentList = record
    ValueAmper: array of real;
  end;

  TValuesList = record
    ResistanceList: TResistanceList;
    CVoltageList: TCVoltageList;
    AVoltageList: TAVoltageList;
    CCurrentList: TCCurrentList;
    ACurrentList: TACurrentList;
  end;

Тут я перемудрил малость, но переделывать уже поздно, да и работать с таким представлением данных мне довольно удобно. Каждый масси в пределах 10-20 элементов (ну может 30, наврядли больше).

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Lord_of_Darkness писал(а):
(ну может 30, наврядли больше)

Ну а накой тогда динаимка то??? Сразу пропиши [0..100] думаю этогj хватит? Тогда запросто можеш юзать типизированные файлы


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Ray Adams
Цитата:
Ну а накой тогда динаимка то??? Сразу пропиши [0..100] думаю этогj хватит?

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

Добавлено спустя 3 часа, 20 минут, 58 секунд:
Ничего проще юзания IniFiles не придумал. Если кому интересно - накодил следующее:
Запись

Код:
procedure SaveTestDataSourses();
var
  IniFile: TIniFile;
  i: integer;
begin
 try
  IniFile:=TIniFile.Create(ExtractFileDir(Application.ExeName)+'\TestData.INI');

  IniFile.WriteInteger('Resistance', 'ArrLength', Length(ValueList.ResistanceList.ValueKom));
  for i:=0 to Length(ValueList.ResistanceList.ValueKom)-1 do
    IniFile.WriteFloat('Resistance','Resist'+IntToStr(i),ValueList.ResistanceList.ValueKom[i]);

  IniFile.WriteInteger('CVoltage', 'ArrLength', Length(ValueList.CVoltageList.ValueVolt));
  for i:=0 to Length(ValueList.CVoltageList.ValueVolt)-1 do
    IniFile.WriteFloat('CVoltage','CVolt'+IntToStr(i),ValueList.CVoltageList.ValueVolt[i]);

  IniFile.WriteInteger('AVoltage', 'ArrLength', Length(ValueList.AVoltageList.ValueVolt));
  for i:=0 to Length(ValueList.AVoltageList.ValueVolt)-1 do
    IniFile.WriteFloat('AVoltage','AVolt'+IntToStr(i),ValueList.AVoltageList.ValueVolt[i]);

  IniFile.WriteInteger('CCurrent', 'ArrLength', Length(ValueList.CCurrentList.ValueAmper));
  for i:=0 to Length(ValueList.CCurrentList.ValueAmper)-1 do
    IniFile.WriteFloat('CCurrent','CAmper'+IntToStr(i),ValueList.CCurrentList.ValueAmper[i]);

  IniFile.WriteInteger('ACurrent', 'ArrLength', Length(ValueList.ACurrentList.ValueAmper));
  for i:=0 to Length(ValueList.ACurrentList.ValueAmper)-1 do
    IniFile.WriteFloat('ACurrent','AAmper'+IntToStr(i),ValueList.ACurrentList.ValueAmper[i]);

  IniFile.Free;
 except
 end;
end;


Чтение

Код:
procedure LoadTestDataSources();
var
  IniFile: TIniFile;
  i, L: integer;
begin
 if FileExists(ExtractFileDir(Application.ExeName)+'\TestData.INI') then
 begin
  L:=0;
  IniFile:=TIniFile.Create(ExtractFileDir(Application.ExeName)+'\TestData.INI');

  L:=IniFile.ReadInteger('Resistance', 'ArrLength', 0);
  SetLength(ValueList.ResistanceList.ValueKom,L);
  for i:=0 to L-1 do
    ValueList.ResistanceList.ValueKom[i]:=IniFile.ReadFloat('Resistance','Resist'+IntToStr(i),0);

  L:=IniFile.ReadInteger('CVoltage', 'ArrLength', 0);
  SetLength(ValueList.CVoltageList.ValueVolt,L);
  for i:=0 to L-1 do
    ValueList.CVoltageList.ValueVolt[i]:=IniFile.ReadFloat('CVoltage','CVolt'+IntToStr(i),0);

  L:=IniFile.ReadInteger('AVoltage', 'ArrLength', 0);
  SetLength(ValueList.AVoltageList.ValueVolt,L);
  for i:=0 to L-1 do
    ValueList.AVoltageList.ValueVolt[i]:=IniFile.ReadFloat('AVoltage','AVolt'+IntToStr(i),0);

  L:=IniFile.ReadInteger('CCurrent', 'ArrLength', 0);
  SetLength(ValueList.CCurrentList.ValueAmper,L);
  for i:=0 to L-1 do
    ValueList.CCurrentList.ValueAmper[i]:=IniFile.ReadFloat('CCurrent','CAmper'+IntToStr(i),0);

  L:=IniFile.ReadInteger('ACurrent', 'ArrLength', 0);
  SetLength(ValueList.ACurrentList.ValueAmper,L);
  for i:=0 to L-1 do
    ValueList.ACurrentList.ValueAmper[i]:=IniFile.ReadFloat('ACurrent','AAmper'+IntToStr(i),0);

  IniFile.Free;
 end;
end;

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 31.01.2004
Откуда: moskow
Как узнать размер кеша L1, L2 процессора?
просьба написать функцию можно на АСМе, но чтобы в Дельфях работала.
Заранеее спасибо!


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Lord_of_Darkness
Lord_of_Darkness писал(а):
Если кому интересно - накодил следующее

Загрузку я бы сделал функцией:
И при загрузке выполнял бы проверки на наличие нужных данных.

function LoadTestDataSources: Boolean;

Result:= IniFile.SectionExists('Resistance')
if Result then
begin
Result:= IniFile.ValueExists('Resistance', 'ArrLength');
if Result then

А то студенты народ сУрьёзный – могут направить в файле так (если доберутся ессно), шо мало не покажется. ;)

Самое интересное то, что пару лет назад делал для соседа в универ тест, правда без сетки, так он тоже наотрез отказывался от БД, мотивируя тем, шо препад особо в этом не рубит.
Его – бедолагу еще и заставили кодировать данные в ini-файле. :lol:


 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
Lord_of_Darkness У INI файлов было ограничение - 32кб. Может быть оно осталось %)


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Asteroid
Asteroid писал(а):
У INI файлов было ограничение - 32кб. Может быть оно осталось %)

Неа, во всяком случае, под Win2000/XP.
Видел и юзал ini-файлы размером 2 Mb.


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Lord_of_Darkness А что тогда мешало писать сразу в бинарный файл??? Вот точно также пиши в бинарник только не как текст а как переменные еще прощен чем с .ini


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
_SGK
Цитата:
Загрузку я бы сделал функцией:
Да проще в try except; обернуть..
Цитата:
А то студенты народ сУрьёзный – могут направить в файле так (если доберутся ессно), шо мало не покажется.
Это все на серваке будет, так шо доберутся наврядли, а если и доберутся и об этом узнают (что скорей всего, то мало не покажется - отчислят...)
Asteroid
Цитата:
У INI файлов было ограничение - 32кб
Хватит выше крыши, поверь мне...
Ray Adams
Цитата:
А что тогда мешало писать сразу в бинарный файл???
Оказалось проще в ини, и уже сделал, так что...

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Lord_of_Darkness
Lord_of_Darkness писал(а):
Да проще в try except; обернуть.

Ну, как говорится хозяин-барин.
Тока для загрузки не делай так, как написал для сохранения.
Код:
procedure SaveTestDataSourses();
var
  IniFile: TIniFile;
  i: integer;
begin
 try
  IniFile:=TIniFile.Create(ExtractFileDir(Application.ExeName)+'\TestData.INI');
  // Твой код - в случае возникновения ошибки строка IniFile.Free никогда не будет выполнена.
  IniFile.Free;
 except
 end;
end;

В конце защищенного блока except { } end, при загрузке все равно нужно информировать приложение (код) о возникновении ошибки.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
_SGK Мдя, проглядел я это. Полностью согласен с тобой.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 31.01.2004
Откуда: moskow
народ есть massiv: array of int64
Код:
    i:=0;
    time:=0;
    time1:=0;
    time2:=0;
///==================
ProcessID := GetCurrentProcessID;
ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,false,ProcessID);
SetPriorityClass(ProcessHandle,{NORMAL_PRIORITY_CLASS}   REALTIME_PRIORITY_CLASS);
ThreadHandle := GetCurrentThread;
SetThreadPriority(ThreadHandle,{THREAD_PRIORITY_Normal}THREAD_PRIORITY_TIME_CRITICAL);
//===================
 //===================
  time1:=gettickCount;
  for x:=0 to 1000 do
  begin
  i:=0;
  repeat
    z:=massiv [i];
    z:=massiv[i+1];
    z:=massiv[i+2];
    z:=massiv[i+3];
    z:=massiv[i+4];
    z:=massiv[i+5];
    z:=massiv[i+6];
    z:=massiv[i+7];

    z:=massiv[i+8];
    z:=massiv[i+9];
    z:=massiv[i+10];
    z:=massiv[i+11];
    z:=massiv[i+12];
    z:=massiv[i+13];
    z:=massiv[i+14];
    z:=massiv[i+15];

    z:=massiv[i+16];
    z:=massiv[i+17];
    z:=massiv[i+18];
    z:=massiv[i+19];
    z:=massiv[i+20];
    z:=massiv[i+21];
    z:=massiv[i+22];
    z:=massiv[i+23];

    z:=massiv[i+24];
    z:=massiv[i+25];
    z:=massiv[i+26];
    z:=massiv[i+27];
    z:=massiv[i+28];
    z:=massiv[i+29];
    z:=massiv[i+30];
    z:=massiv[i+31];

    z:=massiv[i+32];
    z:=massiv[i+33];
    z:=massiv[i+34];
    z:=massiv[i+35];
    z:=massiv[i+36];
    z:=massiv[i+37];
    z:=massiv[i+38];
    z:=massiv[i+39];

    z:=massiv[i+40];
    z:=massiv[i+41];
    z:=massiv[i+42];
    z:=massiv[i+43];
    z:=massiv[i+44];
    z:=massiv[i+45];
    z:=massiv[i+46];
    z:=massiv[i+47];

    z:=massiv[i+48];
    z:=massiv[i+49];
    z:=massiv[i+50];
    z:=massiv[i+51];
    z:=massiv[i+52];
    z:=massiv[i+53];
    z:=massiv[i+54];
    z:=massiv[i+55];

    z:=massiv[i+56];
    z:=massiv[i+57];
    z:=massiv[i+58];
    z:=massiv[i+59];
    z:=massiv[i+60];
    z:=massiv[i+61];
    z:=massiv[i+62];
    z:=massiv[i+63];

    z:=massiv[i+64];
    z:=massiv[i+65];
    z:=massiv[i+66];
    z:=massiv[i+67];
    z:=massiv[i+68];
    z:=massiv[i+69];
    z:=massiv[i+70];
    z:=massiv[i+71];

    z:=massiv[i+72];
    z:=massiv[i+73];
    z:=massiv[i+74];
    z:=massiv[i+75];
    z:=massiv[i+76];
    z:=massiv[i+77];
    z:=massiv[i+78];
    z:=massiv[i+79];

    z:=massiv[i+80];
    z:=massiv[i+81];
    z:=massiv[i+82];
    z:=massiv[i+83];
    z:=massiv[i+84];
    z:=massiv[i+85];
    z:=massiv[i+86];
    z:=massiv[i+87];

    z:=massiv[i+88];
    z:=massiv[i+89];
    z:=massiv[i+90];
    z:=massiv[i+91];
    z:=massiv[i+92];
    z:=massiv[i+93];
    z:=massiv[i+94];
    z:=massiv[i+95];

    z:=massiv[i+96];
    z:=massiv[i+97];
    z:=massiv[i+98];
    z:=massiv[i+99];
    z:=massiv[i+100];
    z:=massiv[i+101];
    z:=massiv[i+102];
    z:=massiv[i+103];

    z:=massiv[i+104];
    z:=massiv[i+105];
    z:=massiv[i+106];
    z:=massiv[i+107];
    z:=massiv[i+108];
    z:=massiv[i+109];
    z:=massiv[i+110];
    z:=massiv[i+111];

    z:=massiv[i+112];
    z:=massiv[i+113];
    z:=massiv[i+114];
    z:=massiv[i+115];
    z:=massiv[i+116];
    z:=massiv[i+117];
    z:=massiv[i+118];
    z:=massiv[i+119];

    z:=massiv[i+120];
    z:=massiv[i+121];
    z:=massiv[i+122];
    z:=massiv[i+123];
    z:=massiv[i+124];
    z:=massiv[i+125];
    z:=massiv[i+126];
    z:=massiv[i+127];
    inc(i,128);
   until i=2097152;
   end;
    time2:=gettickCount;
    time:=time2-time1;
    Mem_Res_R:=2000*8000  div time;   //  2гига*1000повторений в цикле * на8 (т.к. Int64)байт *На1000 чтобы в секунды
    Label38.Caption:='Read block [512 byte]: '+inttostr(Mem_Res_R)+' Mb/sec';
 ///==================
ProcessID := GetCurrentProcessID;
ProcessHandle := OpenProcess(PROCESS_SET_INFORMATION,false,ProcessID);
SetPriorityClass(ProcessHandle,NORMAL_PRIORITY_CLASS {   REALTIME_PRIORITY_CLASS});
ThreadHandle := GetCurrentThread;
SetThreadPriority(ThreadHandle,THREAD_PRIORITY_Normal{THREAD_PRIORITY_TIME_CRITICAL});
//===================

нужно сделать быстрее скорость чтения!!!!!!


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Locki найди спецификации с описанием комманд Ext. 3DNow и SSE и обрати внимание на команды PREFETCH, PREFETCHNTA и т.д.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 31.01.2004
Откуда: moskow
а на дельфях оптимизить дальше некуда?


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Locki а куда дальше? :-) Использовать ассемблерные вставки и более никак ИМХО.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 31.01.2004
Откуда: moskow
Daemon напиши на асме процедуру чтения с подробным обьяснением а то я в асме не знаю как ае создать массив


 

Adminus Overclockerus
Adminus Overclockerus
Статус: Не в сети
Регистрация: 11.10.2002
Откуда: Default
Фото: 0
На Delphi не программировал уже лет 5, а тут потребовалось написать небольшую программу и сразу же столкнулся с проблемой.
Задача - поменять картинку у TBitBtn при нажатии на неё.
Итак, есть:
Код:
Connect: TBitBtn;
ImageList1: TImageList;

При этом в ImageList1 "загружены" необходимые картинки.
Код:
procedure TMainForm.ConnectClick(Sender: TObject);
var
  Bmp : TBitmap;
begin
  Bmp := TBitmap.Create;
  ImageList1.GetBitmap(2,Bmp);
  Connect.Glyph.Assign(Bmp);
  Bmp.Free;
end;

При этом картинка меняется, НО: она становится непрозрачной и выводится на белом фоне :(
Всякие
Код:
Bmp.Transparent:=true;
Connect.Glyph.Transparent:=true;

не помогают. Что делать?


 

Advanced member
Статус: Не в сети
Регистрация: 09.06.2003
Откуда: USSR
Mech Картинка нужна с маской


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Mech Гм, недолжно такого быть... Проверил у себя - все нормально выводится.
Может у картинки фон "грязный"?
И еще, можно попробовать задать Connect.Glyph.Mask(clBtnFace);

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 45 из 116<  1 ... 42  43  44  45  46  47  48 ... 116  >
-

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan