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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2023, 10:31   #1
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Лампочка super_ini

Здравствуйте! Можно примерчик через функцию
ни, через процедуру, ни через форму, а через функцию
Код:
function IniRead(IniFile:TINIFile; line1,line2,line3:string):string; stdcall;
begin
IniFile.ReadString('key_1', 'section1', line1);
IniFile.ReadString('key_1', 'section2', line2);
IniFile.ReadString('key_1', 'section2', line3);
end;
Код:
function IniRead(IniFile:TINIFile; line1,line2,line3:string):string; stdcall; external 'masyanya.dll' index 4;
Код:
procedure TForm1.IniFileRead;
var text1,text2,text3:string;
begin
IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'key.ini');
IniRead(IniFile,text1,text2,text3);
form1.Memo5.Lines.Add(text1);
IniFile.Free;
end;
leon2009sp вне форума Ответить с цитированием
Старый 14.02.2023, 11:03   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

чтобы получить НЕСКОЛЬКО значений сразу используйте record
Код:
type TiniRec =record line1, line2, line3: string; end;
Код:
function ReadIni(ini: TIniFile; rec: TiniRec): TiniRec;
begin
  result.line1:=ini.readString(rec.line1);
...
  result.line3:=iniReadString(rec.line3);
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.02.2023 в 11:05.
evg_m вне форума Ответить с цитированием
Старый 14.02.2023, 11:19   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

leon2009sp, и что куда функция должна возвращать? У вас читается 3 параметра.
Arigato вне форума Ответить с цитированием
Старый 14.02.2023, 12:11   #4
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
Сообщение пример

дак, я примерчик и попросил:
Код:
type TiniRec =record x1, x2, x3: string; end;

function IniRead(IniFile: TIniFile; rec: TiniRec): TiniRec; stdcall;
begin
result.x1:=IniFile.ReadString('key_1', 'section1', 'faild_0');
result.x2:=IniFile.ReadString('key_1', 'section2', 'faild_1');
result.x3:=IniFile.ReadString('key_1', 'section3', 'faild_2');
end;
Код:
function IniRead(IniFile:TINIFile):string; stdcall; external 'list.dll' index 4;

procedure TForm1.IniFileRead;
begin
IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'key.ini');
IniRead(IniFile,x1);
form1.Memo5.Lines.Text:=IniRead(x1);
IniFile.Free;
end;
leon2009sp вне форума Ответить с цитированием
Старый 14.02.2023, 12:23   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда прототипы функции должны совпадать в импорте и объявлении
Код:
type TiniRec =record x1, x2, x3: string; end;

function IniRead(IniFile: TIniFile; rec: TiniRec): String; stdcall;
begin
   Result := IniFile.ReadString('key_1', rec.x1, 'faild_0') +
             IniFile.ReadString('key_1', rec.x2, 'faild_1') +
             IniFile.ReadString('key_1', rec.x3, 'faild_2');
end;
Код:
type TiniRec =record x1, x2, x3: string; end;

function IniRead(IniFile:TINIFile; rec: TiniRec): String; stdcall; external 'list.dll' index 4;

procedure TForm1.IniFileRead;
var
   IniFile: TIniFile;
   strs: TIniRec
begin
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'key.ini');
   strs.x1 := 'section1';
   strs.x2 := 'section2';
   strs.x3 := 'section3';
   form1.Memo5.Lines.Text:=IniRead(IniFile, strs);
   IniFile.Free;
end;
macomics вне форума Ответить с цитированием
Старый 14.02.2023, 13:50   #6
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
По умолчанию

Код:
var
   IniFile: TIniFile;
   strs: TIniRec;
begin
 IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'key.ini');
   strs.x1 := 'section1';
   strs.x2 := 'section2';
   strs.x3 := 'section3';
  // form1.Memo5.Lines.Text:=IniRead(IniFile, strs);
  form1.Edit1.Text:=IniRead(IniFile, strs.x1);
  form1.Edit2.Text:=strs.x2;
  form1.Edit3.Text:=strs.x3;
  IniFile.Free;
= каша все вместе смешалось
leon2009sp вне форума Ответить с цитированием
Старый 14.02.2023, 14:01   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Правильно. т.к. у вас не задается для функции ничего разумного. Но на выходе вы получаете строку (см. #1 пост). Если вам надо получать структуру обратно, тогда ее и возвращайте (см. #2 пост). Это будет вот так
Код:
type TiniRec =record x1, x2, x3: string; end;

function IniRead(IniFile: TIniFile; rec: TiniRec): TiniRec; stdcall;
begin
   Result.x1 := IniFile.ReadString('key_1', rec.x1, 'faild_0');
   Result.x2 := IniFile.ReadString('key_1', rec.x2, 'faild_1');
   Result.x3 := IniFile.ReadString('key_1', rec.x3, 'faild_2');
end;
Код:
type TiniRec =record x1, x2, x3: string; end;

function IniRead(IniFile:TINIFile; rec: TiniRec): TIniRec; stdcall; external 'list.dll' index 4;

procedure TForm1.IniFileRead;
var
   IniFile: TIniFile;
   strs: TIniRec
begin
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'key.ini');
   strs.x1 := 'section1';
   strs.x2 := 'section2';
   strs.x3 := 'section3';
   with IniRead(IniFile, strs) do begin
      Edit1.Text:=x1;
      Edit2.Text:=x2;
      Edit3.Text:=x3;
   end;
   IniFile.Free;
end;
Или можно возвращать результат в том же параметре
Код:
type TiniRec =record x1, x2, x3: string; end;

procedure IniRead(IniFile: TIniFile; var rec: TiniRec); stdcall;
begin
   rec.x1 := IniFile.ReadString('key_1', rec.x1, 'faild_0');
   rec.x2 := IniFile.ReadString('key_1', rec.x2, 'faild_1');
   rec.x3 := IniFile.ReadString('key_1', rec.x3, 'faild_2');
end;
Код:
type TiniRec =record x1, x2, x3: string; end;

procedure IniRead(IniFile:TINIFile; var rec: TiniRec); stdcall; external 'list.dll' index 4;

procedure TForm1.IniFileRead;
var
   IniFile: TIniFile;
   strs: TIniRec
begin
   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'key.ini');
   strs.x1 := 'section1';
   strs.x2 := 'section2';
   strs.x3 := 'section3';
   IniRead(IniFile, strs);
   with strs do begin
      Edit1.Text:=x1;
      Edit2.Text:=x2;
      Edit3.Text:=x3;
   end;
   IniFile.Free;
end;

Последний раз редактировалось macomics; 14.02.2023 в 14:03.
macomics вне форума Ответить с цитированием
Старый 14.02.2023, 20:21   #8
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
По умолчанию

понял ошибку! Спасибо! через процедуру я сделал получилось! через функцию не получалось, то ошибку $0000005 то еще что нить выдавала. Спасибо!
leon2009sp вне форума Ответить с цитированием
Старый 14.02.2023, 20:53   #9
leon2009sp
Форумчанин
 
Регистрация: 22.12.2015
Сообщений: 119
По умолчанию

А! что делать если у меня section1-500шт FOR X:=X+'1' ругается ^)
я остановился на 100м

Последний раз редактировалось leon2009sp; 14.02.2023 в 20:54. Причина: лохматый
leon2009sp вне форума Ответить с цитированием
Старый 14.02.2023, 20:55   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А нельзя так
Код:
for x := 1 to 500 do begin
  sec := 'section' + inttostr(x);
...
macomics вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск