Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
1

Работа с Ini-файлами, простая задача (считывание)

05.03.2018, 15:54. Просмотров 305. Ответов 16
Метки нет (Все метки)

Помогите сделать так, чтоб выбирая породу из ComboBox (которая берется из Ini файла), выводилась цена в Edit (которая тоже из Ini файла). Проект прикрепил. Спасибо заранее)
0
Вложения
Тип файла: rar ини.rar (165.5 Кб, 5 просмотров)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2018, 15:54
Ответы с готовыми решениями:

Работа с ini файлами
Добрый день, появился не большой вопрос! Мне нужно в программе работать с ini файлом который...

Работа с Ini-файлами
Добрый день читающие и просматривающие. Обращаюсь к вам за помощью/советом. Развивая свой проект...

Работа с ini файлами
Вобщем пишу игрушку Тамагочи для себя, что бы разбираться с ООП. Игра конечно не доработана, но...

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

Работа с INI файлами
ПРИВЕТСТВУЮ уважаемый читатель!!!))). У меня такая проблема нужно сделать чтоб из ини файла...

16
qwertehok
2745 / 2426 / 642
Регистрация: 29.08.2013
Сообщений: 16,407
05.03.2018, 16:47 2
Цитата Сообщение от olympic43 Посмотреть сообщение
Помогите сделать так
что именно помочь?

покажи как ты с ini файлами работаешь
0
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 17:28  [ТС] 3
Цитата Сообщение от qwertehok Посмотреть сообщение
что именно помочь?
покажи как ты с ini файлами работаешь
Ох, ну я же всё описал и архив прикрепил. Там есть ini файл. (Прикрепил скрины)

Надо как то разобраться и чтоб в комбо боксе был выпадающий список пород древесины, а в едите появлялась цена)
0
Миниатюры
Работа с Ini-файлами, простая задача (считывание)   Работа с Ini-файлами, простая задача (считывание)  
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 17:45  [ТС] 4
Если что-то не так с ini файлом, прошу подправить
0
05.03.2018, 17:45
D1973
Модератор
4504 / 3210 / 1504
Регистрация: 21.01.2014
Сообщений: 13,716
Записей в блоге: 3
Завершенные тесты: 1
05.03.2018, 17:47 5
1. А что это за красота такая:
Древесина=Цена
2.
Цитата Сообщение от olympic43 Посмотреть сообщение
ну я же всё описал и архив прикрепил
И что? Где там хоть какая-то попытка поработать с ini-файлом?
0
qwertehok
2745 / 2426 / 642
Регистрация: 29.08.2013
Сообщений: 16,407
05.03.2018, 18:13 6
Цитата Сообщение от olympic43 Посмотреть сообщение
Ох, ну я же всё описал и архив прикрепил.
зачем мне весь проект? вдруг у тебя там 100500 форм и мне нужно будет лазить и искать
напиши процедуру считывания из Ini и все
нужен будет весь проект - тебя попросят выложить
0
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 18:21  [ТС] 7
Цитата Сообщение от D1973 Посмотреть сообщение
1. А что это за красота такая:
Древесина=Цена
Опечатка)

Добавлено через 2 минуты
Цитата Сообщение от D1973 Посмотреть сообщение
ну я же всё описал и архив прикрепил
И что? Где там хоть какая-то попытка поработать с ini-файлом?

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var 
 IniFile: TIniFile;
begin
IniFile:= TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'myini.ini');
IniFile.WriteString('Brevna', ComboBox4.Text,Edit3.Text);
end;
как- то так...

Добавлено через 1 минуту
Цитата Сообщение от qwertehok Посмотреть сообщение
зачем мне весь проект? вдруг у тебя там 100500 форм и мне нужно будет лазить и искать
напиши процедуру считывания из Ini и все
нужен будет весь проект - тебя попросят выложить
Специально создал 1 форму и эту функцию выполнить.

Вообщем вот код который пробовал писать....

Delphi
1
2
3
4
5
6
7
procedure TForm1.Button1Click(Sender: TObject);
var
 IniFile: TIniFile;
begin
IniFile:= TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'myini.ini');
IniFile.WriteString('Brevna', ComboBox4.Text,Edit3.Text);
end;
Добавлено через 35 секунд
Хотя причем тут кнопка вообще...

Добавлено через 1 минуту
Delphi
1
2
3
4
5
6
7
procedure TForm1.FormCreate(Sender: TObject);
var
 IniFile: TIniFile  ;
begin
   IniFile:= TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'myini.ini');
IniFile.WriteString('Brevna', ComboBox1.Text,Edit1.Text);
end;
были такие мысли
0
D1973
Модератор
4504 / 3210 / 1504
Регистрация: 21.01.2014
Сообщений: 13,716
Записей в блоге: 3
Завершенные тесты: 1
05.03.2018, 18:28 8
Цитата Сообщение от olympic43 Посмотреть сообщение
были такие мысли
А таких мыслей не было, что Write - это "писАть", т.е. эта команда что-то там запишет в ини. А вот "читать" - это Read...
0
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 18:31  [ТС] 9
Цитата Сообщение от D1973 Посмотреть сообщение
А таких мыслей не было, что Write - это "писАть", т.е. эта команда что-то там запишет в ини. А вот "читать" - это Read...
Ошибка
0
Миниатюры
Работа с Ini-файлами, простая задача (считывание)  
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 18:33  [ТС] 10
Цитата Сообщение от D1973 Посмотреть сообщение
А таких мыслей не было, что Write - это "писАть", т.е. эта команда что-то там запишет в ини. А вот "читать" - это Read...
Так же и пробовал на комбо бокс писать, ошибки нет, но безрезультатно
0
D1973
Модератор
4504 / 3210 / 1504
Регистрация: 21.01.2014
Сообщений: 13,716
Записей в блоге: 3
Завершенные тесты: 1
05.03.2018, 18:42 11
Цитата Сообщение от olympic43 Посмотреть сообщение
но безрезультатно
Значит, плохо пробовали. Ваш ини-файл не трогал совсем, каой есть - такой и ладно, остальное - см. код...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, INIFiles;
 
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox; //изначально Enabled = false
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    RadioGroup1: TRadioGroup;
    procedure RadioGroup1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private { Private declarations }
    ini: TINIFile;
    Sect: String;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 ini := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'myini.ini');
end;
 
procedure TForm1.RadioGroup1Click(Sender: TObject);
var L: TStringList;
begin
 L := TStringList.Create;
 ComboBox1.Enabled := RadioGroup1.ItemIndex <> -1;
 if RadioGroup1.ItemIndex = 0 then Sect := 'Doski' else Sect := 'Brevna';
 ini.ReadSection(Sect, L);
 ComboBox1.Items.Assign(L);
 ComboBox1.ItemIndex := -1;
 ComboBox1.Text := '';
 Edit1.Clear;
 L.Free;
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 Edit1.Text := ini.ReadString(Sect, ComboBox1.Items[ComboBox1.ItemIndex], '0');
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 ini.Free;
end;
 
end.
1
Миниатюры
Работа с Ini-файлами, простая задача (считывание)  
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 18:45  [ТС] 12
Цитата Сообщение от D1973 Посмотреть сообщение
Значит, плохо пробовали. Ваш ини-файл не трогал совсем, каой есть - такой и ладно, остальное - см. код...
Спасибо большое) Но сейчас еще вопросик задам как напишу код
0
D1973
05.03.2018, 18:48
  #13

Не по теме:

Цитата Сообщение от olympic43 Посмотреть сообщение
Но сейчас еще вопросик задам
Ой, боюсь, боюсь :swoon:

0
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 18:56  [ТС] 14
Цитата Сообщение от D1973 Посмотреть сообщение
Ой, боюсь, боюсь
У меня в приложении 2 таких вкладки , как то нужно переделать, чтоб было не RadioGroup, а вкладки)))
0
Изображения
 
olympic43
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 76
05.03.2018, 20:02  [ТС] 15
Цитата Сообщение от D1973 Посмотреть сообщение
Ой, боюсь, боюсь
и на каждом свой комбобокс и едит (слишком очевидно)

Добавлено через 1 час 5 минут
Цитата Сообщение от D1973 Посмотреть сообщение
Ой, боюсь, боюсь
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.PageControl1Change(Sender: TObject);
begin
 if PageControl1.TabIndex = 0
 then Sect := 'Doski' else Sect := 'Brevna';
 ComboBox1.Enabled := True;
 
  if PageControl1.TabIndex = 1
 then Sect2 := 'Brevna' else Sect2 := 'Doski';
 ComboBox2.Enabled := True;
 
 ini.ReadSection(Sect, L);
 ComboBox1.Items.Assign(L);
 ComboBox1.ItemIndex := -1;
 ComboBox1.Text := '';
 Edit1.Clear;
 
 ini.ReadSection(Sect2, L2);
 ComboBox2.Items.Assign(L2);
 ComboBox2.ItemIndex := -1;
 ComboBox2.Text := '';
 Edit2.Clear;
end;
сделал так. норм? если не оч, то оптимизируй плиз)
0
D1973
Модератор
4504 / 3210 / 1504
Регистрация: 21.01.2014
Сообщений: 13,716
Записей в блоге: 3
Завершенные тесты: 1
06.03.2018, 06:37 16
Цитата Сообщение от olympic43 Посмотреть сообщение
норм?
нет! Объясняю, почему:
Что у Вас сейчас:
2 вкладки - и, соответственно, 2 переменные для имени секции и 2 абсолютно аналогичных блока кода. А если учесть, что все это надо проделать не только при изменинии закладки, но и при стрте программы, то блоков получается - 4. Более того, Вы это не озвучили, но скорее всего так оно и есть, на каждый комбобокс у Вас - свой обработчик события OnChange, т.е. еще 2 совершенно одинаковые процедуры...
Что будет, если...
Добавить еще 2 вкладки: "Брус" и "Некондиция" к примеру... А будет следующее: 4 глобальных переменных, 8 одинаковых блоков кода для заполнения комбобоксов и 4 одинаковых обработчика OnChange комбобоксов... Грустно!
Что надо:
1. только одну переменную для имени секции
2. Одну процедуру для заполнения комбобоксов, которая будет отрабатывать и при старте программы и при смене вкладки.
3. Один обработчик события OnChange для всех комбобоксов. Создать этот обработчик для ComboBox1, к примеру, и назначить его для всех остальных через инспектор объектов...
код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, INIFiles, StdCtrls, ComCtrls;
 
type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    ComboBox1: TComboBox;
    Label3: TLabel;
    Label4: TLabel;
    Edit2: TEdit;
    ComboBox2: TComboBox;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
  private { Private declarations }
    ini: TINIFile;
    Sect: String;
    E: TEdit;
    procedure FillCombo(k: integer);
    function GetCombo(k: integer): TComboBox;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FillCombo(k: integer);
var L: TStringList;
    CB: TComboBox;
begin
 CB := GetCombo(k);
 case k of
  0 : Sect := 'Doski';
  1 : Sect := 'Brevna';
 end;
 L := TStringList.Create;
 ini.ReadSection(Sect, L);
 CB.Items.Assign(L);
 CB.Text := '';
 CB.ItemIndex := -1;
 E.Clear;
 L.Free;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 PageControl1.ActivePageIndex := 0;
 ini := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'myini.ini');
 FillCombo(PageControl1.ActivePageIndex);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 ini.Free;
end;
 
procedure TForm1.PageControl1Change(Sender: TObject);
begin
 FillCombo(PageControl1.ActivePageIndex);
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 E.Text := ini.ReadString(Sect, TComboBox(Sender).Items[TComboBox(Sender).ItemIndex], '0');
end;
 
function TForm1.GetCombo(k: integer): TComboBox;
var i: integer;
    TS: TTabSheet;
begin
 result := nil;
 E := nil;
 TS := PageControl1.Pages[k];
 with TS do
  for i := 0 to ControlCount - 1 do
   begin
    if Controls[i] is TComboBox then result := TComboBox(Controls[i]);
    if Controls[i] is TEdit then E := TEdit(Controls[i]);
   end;
end;
 
end.
0
D1973
Модератор
4504 / 3210 / 1504
Регистрация: 21.01.2014
Сообщений: 13,716
Записей в блоге: 3
Завершенные тесты: 1
06.03.2018, 09:33 17
Кстати, вот о чем подумалось... Если на каждой из закладок один и тот же набор компонентов и один и тот же функционал - зачем тогда использовать PageControl, где на каждую вкладку нужен свой набор (Комбобокс + Эдит)? Можно ведь воспользоваться TabControl и достаточно будет одного набора...
код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, INIFiles;
 
type
  TForm1 = class(TForm)
    TabControl1: TTabControl;
    ComboBox1: TComboBox;
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure TabControl1Change(Sender: TObject);
  private { Private declarations }
    ini: TINIFile;
    Sect: String;
    procedure FillCombo(k: integer);
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 ini := TINIFile.Create(ExtractFilePath(ParamStr(0)) + 'myini.ini');
 TabControl1.TabIndex := 0;
 FillCombo(TabControl1.TabIndex);
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
 ini.Free;
end;
 
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 Edit1.Text := ini.ReadString(Sect, ComboBox1.Items[ComboBox1.ItemIndex], '0');
end;
 
procedure TForm1.FillCombo(k: integer);
var L: TStringList;
begin
 case k of
  0 : Sect := 'Doski';
  1 : Sect := 'Brevna';
 end;
 L := TStringList.Create;
 ini.ReadSection(Sect, L);
 ComboBox1.Items.Assign(L);
 ComboBox1.Text := '';
 ComboBox1.ItemIndex := -1;
 Edit1.Clear;
 L.Free;
end;
 
procedure TForm1.TabControl1Change(Sender: TObject);
begin
 FillCombo(TabControl1.TabIndex);
end;
 
end.
0
Миниатюры
Работа с Ini-файлами, простая задача (считывание)  
06.03.2018, 09:33
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2018, 09:33

Работа с ini файлами
Всем доброго времени суток дороги форумчани! Заранее приношу свои извинение за столь нубскую тему...

Работа ini файлами
Делаю программу по визуальным компонентам, нужно чтобы изменения в программе сохранялись, пишет...

Работа с ini файлами в Delphi
Почему у меня не считывает, и нет ошибки? Как думаете?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru