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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2011, 00:05   #1
L.A.M.E.R.
Пользователь
 
Аватар для L.A.M.E.R.
 
Регистрация: 17.07.2009
Сообщений: 14
Вопрос ini не пашет

доброе время суток! У меня такая проблема: пишу проект поддержкой ini. Но почему то когда я вписываю команды на создание ini, чтение, запись ничего не происходит... Пробовал менять версии компилятора, тоже не помогло... Что посоветуете сделать мне??
L.A.M.E.R. вне форума Ответить с цитированием
Старый 12.08.2011, 00:19   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Продемостировать Ваш код
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 12.08.2011, 00:28   #3
L.A.M.E.R.
Пользователь
 
Аватар для L.A.M.E.R.
 
Регистрация: 17.07.2009
Сообщений: 14
По умолчанию

кода как такового проекта нет, но я набросал код как я делал:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Inifiles;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ini: Tinifile;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 Ini:=TiniFile.Create('My.ini');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ini.WriteString('Name', 'Key_Name', 'String Value');
end;

end.



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.08.2011 в 08:08.
L.A.M.E.R. вне форума Ответить с цитированием
Старый 12.08.2011, 02:45   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

'My.ini' - и в КАКОЙ ПАПКЕ это будет, как по-вашему?

Читаем:

Цитата:
If the lpFileName parameter does not contain a full path and file name for the file, WritePrivateProfileString searches the Windows directory for the file. If the file does not exist, this function creates the file in the Windows directory.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2011, 08:16   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
ничего не происходит...
а что должно происходить? Фейверк? Музыкальное сопровождение?!
Чтение параметров нормально происходит?!


GunSmoker, как всегда, в точку! +1

я обычно использую такой трюк:
(это чтобы INI файл имел имя запускаемого exeшника и лежал всегда рядом с ним
Код:
  AppIniFile := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
или, если хотите, чтобы имя INI не зависело от EXEшника, но находилось в том же каталоге, что и EXE, тогда можно так:
Код:
   AppIniFile := TIniFile.Create(
      ExtractFilePath(Application.ExeName) + 'my.ini');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2011, 11:41   #6
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

А я делаю так:
Код:
AppIniFile := TIniFile.Create(
      GetCurrentDir  + '\my.ini');
тогда ini будет браться из рабочего каталога программы, которую можно в ярлыке указать. Получится, что можно иметь 1 исполн модуль (ехе) и несколько ярлыков с разными раб. каталогами, и соответственно запускающими приложение с разными настройками :-)
astecenko вне форума Ответить с цитированием
Старый 12.08.2011, 11:44   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
тогда ini будет браться из рабочего каталога программы, которую можно в ярлыке указать.
если на форме есть TOpenDialog, то код обломится.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.08.2011, 11:54   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

astecenko, это неправильный код.
GetCurrentDir может меняться во время работы программы (например, OpenDialog и SaveDialog его меняют!) Сохраните свой ини неизвестно куда.
да и ещё есть нюансы..
НЕ РЕКОМЕНДУЮ так делать!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.08.2011, 11:57   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Получится, что можно иметь 1 исполн модуль (ехе) и несколько ярлыков с разными раб. каталогами, и соответственно запускающими приложение с разными настройками :-)
Вообще-то такие вещи делаются через указание файла-конфигурации в параметрах к программе, например:

Код:
C:\Program Files\MyApp\MyApp.exe /config=D:\alt.ini
А использовать текущую папку - крайне плохая идея.

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

Фактически, делая такую логику, вы неявно говорите: запускать меня можно или только строго одним способом (дойной клик по программе в проводнике) или обладая секретным знанием (устанавливать текущую папку перед запуском вполне определённым образом).

Цитата:
если на форме есть TOpenDialog, то код обломится.
Не обязательно, там же есть NoChangeDir.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.08.2011, 11:59   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Не обязательно, там же есть NoChangeDir.
ну как показывает практика не часто его ставят..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ActiveX не пашет Agent3004 Windows 4 25.06.2010 14:08
Как пересмотреть все секции в INI.ini ? iskurt Помощь студентам 1 31.01.2010 07:48
Служба не пашет! Basketman Общие вопросы Delphi 10 28.09.2009 22:25
На 98 пашет-на ХР нет. CMP Помощь студентам 3 04.04.2007 22:26