DELPHI
Создана: 30 Марта 2007 Птн 16:34:47.
Раздел: "Компьютерный раздел"
Сообщений в теме: 85, просмотров: 14737
-
-
-
-
-
WOLF3848 писал :я ваще настройки не разу не пробывал сохранять мне главное что он запомнил как я настроил эквалайзер!
Код:
Equalizer.SaveToFile('eq.sav');
А если серьезно, уточни что именно нужно сохранять: значения ползунков, полей или др. и как должно сохраняться - для каждого пользователя или для всех одинаково и пр. Ато както размыто: "сохранить эквалайзер" -
-
-
-
1) в секцию USES добавляеш Registry:
Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Registry;
2) гденибудь в public прописываеш 2 процедуры:
Код:
public
{ Public declarations }
procedure ReadSettings; //- чтение
procedure WriteSettings; //- запись
end;
3) в секции implementation делаеш реализацию этих 2х процедур:
Код:
procedure TForm1.ReadSettings;
var Reg: TRegIniFile;
begin
Reg:=TRegIniFile.Create('MySoft');
try
Reg.RootKey:=HKEY_CURRENT_USER; //- ветка для текущего юзера
Reg.OpenKey('Software',True); //- открываем ветку
// Читаем настройки (надеюсь тут всё понятно)
Form1.Left:=Reg.ReadInteger('MySoft','Left',10); //- положение и размер формы
Form1.Top:=Reg.ReadInteger('MySoft','Top',10);
Form1.Width:=Reg.ReadInteger('MySoft','Width',300);
Form1.Height:=Reg.ReadInteger('MySoft','Height',200);
TrackBar1.Position:=Reg.ReadInteger('MySoft','EQ1',0); //- ползунки
TrackBar2.Position:=Reg.ReadInteger('MySoft','EQ2',0);
TrackBar3.Position:=Reg.ReadInteger('MySoft','EQ3',0);
RadioButton1.Checked:=Reg.ReadBool('MySoft','RadioButton1',false); //- радиобутоны
RadioButton2.Checked:=Reg.ReadBool('MySoft','RadioButton2',true);
finally
Reg.Free;
end;
end;
procedure TForm1.WriteSettings;
var Reg: TRegIniFile;
begin
Reg:=TRegIniFile.Create('MySoft');
try
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software',True);
Reg.WriteInteger('MySoft','Left',Form1.Left);
Reg.WriteInteger('MySoft','Top',Form1.Top);
Reg.WriteInteger('MySoft','Width',Form1.Width);
Reg.WriteInteger('MySoft','Height',Form1.Height);
Reg.WriteInteger('MySoft','EQ1',TrackBar1.Position);
Reg.WriteInteger('MySoft','EQ2',TrackBar2.Position);
Reg.WriteInteger('MySoft','EQ3',TrackBar3.Position);
Reg.WriteBool('MySoft','RadioButton1',RadioButton1.Checked);
Reg.WriteBool('MySoft','RadioButton2',RadioButton2.Checked);
finally
Reg.Free;
end;
end;
4) при создании формы вызываеш чтение настроек, при уничтожении формы запись настроек:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
ReadSettings;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
WriteSettings;
end;
5) Запускаеш и радуешся -
-
Народ помогите! Я решил переделать свой мп3 плеер чуток мне надо чтобы при открытие файл добавился в плей-лист код при открытие у меня такой-
[b]if dlgOpen.Execute then
begin
FFileName:= dlgOpen.FileName;
if not BASS_PlaySoundFile(FFileName) then
Error(ERR_NOT_SUPPORTED_FORMAT)
else begin
lbFileName_face.Caption:= ExtractFileName(FFileName);
end;
end;
Что нужно добавить чтобы файл добавилсЯ в плей-лист? -
чтоб открыть плейлис:
1) на форме размещаеш к примеру ListBox для списка тэгов
2) добавляеш в секцию USES модуль IniFiles:
Код:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Registry, IniFiles;
3) в секцию public перед описанием процедур добавляеш переменную FilesList: TStringList (это для хранения путей к файлам) и процедуру чтения плейлиста:
Код:
public
{ Public declarations }
FilesList: TStringList;
procedure ReadPlayList(const FileName: string);
// дальше остальные процедуры
// ...
end;
4) при создании формы создаеш FilesList, при уничтожении удаляеш:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
// .... - тут твое
FilesList:=TStringList.Create;
FilesList.Clear;
ListBox1.Items.Clear;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
// .... - тут твое
FilesList.Free;
end;
5) делаеш реализацию процедуры ReadPlayList :
Код:
procedure TForm1.ReadPlayList(const FileName: string);
var IniPls: TIniFile;
i,n,k,l: integer;
M3UPls: TextFile;
str, ext, tm :string;
begin
if FileExists(FileName) then
// если файл существует:
begin
ListBox1.Items.Clear; // -зачищаем список
FilesList.Clear;
ext:=AnsiUpperCase(ExtractFileExt(FileName)); // -получаем расширение в верхнем регистре
if (ext='.PLS') then
// если это PLS, то можно работать как с INI-файлом:
begin
IniPls:=TIniFile.Create(FileName);
try
// читаем количество файлов:
n:=IniPls.ReadInteger('Playlist','NumberOfEntries',0);
if n > 0 then // -если список не пустой
for i:=1 to n do // -читаем файлы поочереди:
begin
// считываем путь к файлу:
str:=IniPls.ReadString('Playlist','File'+IntToStr(i),'error file');
k:=FilesList.Add(str); // -добавляем файл в список
// читаем время в секундах:
l:=IniPls.ReadInteger('Playlist','Length'+IntToStr(i),0);
// переводим в минуты:
tm:=IntToStr( l-60*Trunc(l/60) );
if Length(tm)<2 then tm:='0'+tm;
tm:=IntToStr( Trunc(l/60) )+':'+tm;
// читаем заголовок:
str:=IniPls.ReadString('Playlist','Title'+IntToStr(i),'');
if (str = '') then
// если нет заголовка, записываем имя файла:
ListBox1.Items.Add(ExtractFileName(FilesList.Strings[k])+' ['+tm+']') else
// иначе записываем заголовок :
ListBox1.Items.Add(str+' ['+tm+']');
end;
finally
IniPls.Free;
end;
end else
if (ext='.M3U') then
// если M3U, то работаем как с текстовым файлом:
begin
AssignFile(M3UPls,FileName);
Reset(M3UPls); // - открываем файл
Readln(M3UPls,str);
if (UpperCase(str)='#EXTM3U') then
while (not eof(M3UPls)) do
begin
Readln(M3UPls,str);
if (UpperCase(Copy(str,1,8))='#EXTINF:') then
begin
n:=Pos(',',str);
// читаем время:
l:=StrToInt( Trim(Copy(str,9, n-9)) );
// переводим в минуты:
tm:=IntToStr( l-60*Trunc(l/60) );
if Length(tm)<2 then tm:='0'+tm;
tm:=IntToStr( Trunc(l/60) )+':'+tm;
// получаем заголовок:
Delete(str,1,n);
ListBox1.Items.Add(str+' ['+tm+']');
// читаем имя файла:
if not eof(M3UPls) then
begin
Readln(M3UPls,str);
FilesList.Add(str);
end;
end else
begin
FilesList.Add(str);
ListBox1.Items.Add(ExtractFileName(str));
end;
end;
CloseFile(M3UPls);
end;
end else
// если файла нет, выдаем сообщение:
MessageDlg('Файл "'+FileName+'" не найден.', mtError, [mbOK],0);
end;
6) при запуске диалога открытия файла вызываеш процедуру:
Код:
...
if OpenDialog1.Execute then
ReadPlayList(OpenDialog1.FileName);
...
пояснения:
для каждого тэга из списка ListBox1 ставится в соответствие путь к файлу в FilesList. при выборе трека в ListBox1 нужно открывать файл из FilesList под тем же номером. Если будеш делать сортировку учитывай порядок в обоих списках. Это самый простой способ есть и другие.
п.с. WOLF3848, может всётаки сначала научиться работать с файлами и реестром, а потом браться за написание плееров и пр. серьезных программ. (это только совет) -
-
-
Блин!Ошибку пишет я когда прогу уже запустил всё жму отурыть -выбираю файл а он мне пишет-EACCESSVIOLATION AT ADDRESS 00462f5e in module 'player.exe' И ета отшибка стала появляться когда я добавил :
procedure TfrmMain.btnOpenClick(Sender: TObject);
begin
if dlgOpen.Execute then
ReadPlayList(dlgopen.FileName);
end;
(ето когда я жму на-открыть) -