Var SoundPath : String[255]; min, sec : integer; volume : LongWord; Procedure TForm1.PlayList(Path : String); Var IpBuf : PChar; SWinDir : String[128]; SearchRec : TSearchRec; Begin ListBox1.Clear; if FindFirst(Path +*.mp3, fAnyFile, SearchRec) = 0 then then begin ListBox1.Items.Add(SearchRec.Name); While(FindNext(SearchRec) = 0) do ListBox1.Items.Add(SearchRec.Name); end; ListBox1.ItemIndex := 0; End; Procedure TForm1.FormCreate(Sender : TObject); Begin SpeedButton2.AllowAllUp := True; SpeedButton2.GroupIndex := 1; PlayList(' '); ListBox1.ItemIndex := 0; Label1.Caption := ListBox1.Item[ListBox1.ItemIndex]; TrackBar1.Position := 15; volume := (TrackBar1.Position - TrackBar1.Max + 1) * 6500; volume := volume + (volume shl 16); Wave OutSetVolume(Wave_Mapper, volume); End; Procedure TForm1.ListBox1Click(Sender : TObject); Begin if not SpeedButton2.Down then SpeedButton2.Down := True; Label1.Caption := ListBox1.Items[ListBox1.itemIndex]; Play; End; Procedure TForm1.SpeedButton2Click(Sender : TObject); Begin if SpeedButton2.Down then Play else begin MediaPlayer1.Stop; Timer1.Enabled := False; SpeedButton2.Down := False; SpeedButton2.Hint := 'Пуск'; end; End; Procedure TForm1.SpeedButton1Click(Sender : TObject); Begin if ListBox1.ItemIndex>0 then ListBox1.ItemIndex := ListBox1.ItemIndex - 1; Play; End; Procedure TForm1.SpeedButton3Click(Sender : TObject); Begin if ListBox1.ItemIndex<ListBox1.Count then ListBox1.ItemIndex := ListBox1.ItemIndex + 1; Play; End; Procedure TForm1.TrackBar1Change(Sender : TObject); Begin volume := 6500*(TrackBar1.Max - TrackBar1.Position); volume := volume+(volume shl 16); Wave OutSetVolume(Wave_Mapper, volume); End; Procedure TForm1.Play; Begin Timer1.Enabled := False; Label1.Caption := ListBox1.Items[ListBox1.itemIndex]; MediaPlayer1.FileName := SoundPath+ListBox1.Items[ListBox1.itemIndex]; try MediaPlayer1.Open; except on EMCIDeviceError do begin ShowMessage ('Ошибка ' + ListBox1.items[ListBox1.itemIndex]); SpeedButton2.Down := False; exit; end; End; MediaPlayer1.Play; min := 0; sec := 0; Timer1.Enabled := True; SpeedButton2.Hint := 'Стоп'; End; Procedure TForm1.Timer1Timer(Sender : TObject); Begin if sec<59 then inc(sec) else begin sec := 0; inc(min); end; Label2.Caption := IntToStr(min) + ':'; if sec<10 then Label2.Caption := Label2.Caption + IntToStr(sec); if MediaPlayer1.Position<MediaPlayer1.Length then Exit; Timer1.Enabled := False; MediaPlayer1.Stop; if ListBox1.ItemIndex<ListBox1.Count then begin ListBox1.ItemIndex := ListBox.ItemIndex + 1; Play; end; End; Procedure TForm1.SpeedButton4Click(Sender : TObject); Var Root : String; PWRoot : PWideChar; Dir : String; Begin Root := ' '; GetMem(PWRoot, (Lenght(Root)+1)*2); PWRoot := StringToWideChar(Root, PWRoot, Max_PATH*2); if not SelectDirectory('Выберите', PWRoot, Dir) then Dir := ' ' else Dir := Dir+'\'; SoundPath := Dir; PlayList(SoundPath); end; end.
Ошибки: [Warning] MP.pas(3): Unit 'FileCtrl' is specific to a platform [Error] MP.pas(35): Undeclared identifier: 'PlayList' [Error] MP.pas(40): This form of method call only allowed for class methods [Error] MP.pas(41): Undeclared identifier: 'Path' [Error] MP.pas(41): Incompatible types: 'String' and 'Integer' [Error] MP.pas(42): Statement expected but 'THEN' found [Error] MP.pas(44): Method identifier expected [Error] MP.pas(46): Method identifier expected [Error] MP.pas(48): Method identifier expected [Error] MP.pas(50): Undeclared identifier: 'FormCreate' [Error] MP.pas(52): Method identifier expected [Error] MP.pas(56): Undeclared identifier: 'Item' [Error] MP.pas(60): Undeclared identifier: 'Wave' [Error] MP.pas(62): Undeclared identifier: 'ListBox1Click' [Error] MP.pas(62): ';' expected but '(' found [Error] MP.pas(69): Undeclared identifier: 'SpeedButton2Click' [Error] MP.pas(74): This form of method call only allowed for class methods [Error] MP.pas(92): Undeclared identifier: 'TrackBar1Change' И это далеко не все. Основные.
Почему вылезает - не понимаю. Видимо, совсем туп. http://mmorpgteam.3dn.ru
Сообщение отредактировал LexTailor - Воскресенье, 13 Февраля 2011, 15:04
Интересно. Я ведь не говорил, сколько я его изучаю) Откуда вдруг возникло впечатление, будто бы я ЗНАЮ этот язык? Я даже на учёбе ещё им не занимался. Паскаль экстерном, вот к Delphi подошёл. Правда, я его и дня не изучал... Так, часа три от силы... Да, нуб, согласен. Но я быстро учусь. Просто нужна некоторая помощь. Код отредактирую, выложу.
http://mmorpgteam.3dn.ru
Сообщение отредактировал LexTailor - Воскресенье, 13 Февраля 2011, 16:05
Procedure TForm1.ListBox1Click(Sender : TObject); Begin if not SpeedButton2.Down then SpeedButton2.Down := True; Label1.Caption := ListBox1.Items[ListBox1.itemIndex]; Play; End;
Procedure TForm1.SpeedButton2Click(Sender : TObject); Begin if SpeedButton2.Down then Play else begin MediaPlayer1.Stop; Timer1.Enabled := False; SpeedButton2.Down := False; SpeedButton2.Hint := 'Пуск'; end; End;
Procedure TForm1.SpeedButton1Click(Sender : TObject); Begin if ListBox1.ItemIndex>0 then ListBox1.ItemIndex := ListBox1.ItemIndex - 1; Play; End;
Procedure TForm1.SpeedButton3Click(Sender : TObject); Begin if ListBox1.ItemIndex<ListBox1.Count then ListBox1.ItemIndex := ListBox1.ItemIndex + 1; Play; End;
Procedure TForm1.Play; Begin Timer1.Enabled := False; Label1.Caption := ListBox1.Items[ListBox1.itemIndex]; MediaPlayer1.FileName := SoundPath+ListBox1.Items[ListBox1.itemIndex]; try MediaPlayer1.Open; except on EMCIDeviceError do begin ShowMessage ('Ошибка ' + ListBox1.items[ListBox1.itemIndex]); SpeedButton2.Down := False; exit; end; End; MediaPlayer1.Play; min := 0; sec := 0; Timer1.Enabled := True; SpeedButton2.Hint := 'Стоп'; End;
Procedure TForm1.Timer1Timer(Sender : TObject); Begin if sec<59 then inc(sec) else begin sec := 0; inc(min); end; Label2.Caption := IntToStr(min) + ':'; if sec<10 then Label2.Caption := Label2.Caption + IntToStr(sec); if MediaPlayer1.Position<MediaPlayer1.Length then Exit; Timer1.Enabled := False; MediaPlayer1.Stop; if ListBox1.ItemIndex<ListBox1.Count then begin ListBox1.ItemIndex := ListBox.ItemIndex + 1; Play; end; End;
Procedure TForm1.SpeedButton4Click(Sender : TObject); Var Root : String; PWRoot : PWideChar; Dir : String; Begin Root := ' '; GetMem(PWRoot, (Lenght(Root)+1)*2); PWRoot := StringToWideChar(Root, PWRoot, Max_PATH*2); if not SelectDirectory('Выберите', PWRoot, Dir) then Dir := ' ' else Dir := Dir+'\'; SoundPath := Dir; PlayList(SoundPath); end; end.
Вот чёрт, в спойлере нельзя пробелы-отступы делать -___-
http://mmorpgteam.3dn.ru
Сообщение отредактировал LexTailor - Воскресенье, 13 Февраля 2011, 21:50
так будет удобней читать и копировать. Чтобы исправить любую ошибку, выдаваемую компилятором Delphi, обычно нужно просто прочитать её. Ты английский-то знаешь, надеюсь? Даже если нет, то любая программа-переводчик тебе в помощь, хотя они фигово переводят. А если всё равно не понятна ошибка - поисковик используй. ВСЕ ошибки компиляторов известны и много раз обсуждены на самых разных форумах. Ну ладно, в первый раз объясню подробно:
Code
[Warning] MP.pas(3): Unit 'FileCtrl' is specific to a platform //Предупреждение: модуль "FileCtrl" специфичен для платформы [Error] MP.pas(35): Undeclared identifier: 'PlayList' //Не декларированная переменная, т.е. ты используешь ту переменную, которой просто не существует [Error] MP.pas(40): This form of method call only allowed for class methods //"Эта форма метода может быть вызвано только для методов классов" - не знаю, что это [Error] MP.pas(41): Undeclared identifier: 'Path' //опять не декларированная переменная... [Error] MP.pas(41): Incompatible types: 'String' and 'Integer' //несовместимые типы переменных, используй StrToInt и IntToStr [Error] MP.pas(42): Statement expected but 'THEN' found //утверждение пропущено, зато обнаружено "then", т.е. ты после If забыл написать условие [Error] MP.pas(44): Method identifier expected //Пропущен идентификатор метода (метод - это процедура или функция класса) [Error] MP.pas(46): Method identifier expected // [Error] MP.pas(48): Method identifier expected // [Error] MP.pas(50): Undeclared identifier: 'FormCreate' //не декларированный идентификатор - ты забыл точку между Form и Create [Error] MP.pas(52): Method identifier expected //опять... [Error] MP.pas(56): Undeclared identifier: 'Item' //нет идентификатора "Итем" [Error] MP.pas(60): Undeclared identifier: 'Wave' //нет и-тора "Ваве" [Error] MP.pas(62): Undeclared identifier: 'ListBox1Click' //нету ид-тора "ЛистФокс1Клик" - ты забыл точку поставить перед Click [Error] MP.pas(62): ';' expected but '(' found //пропущен знак ;, зато найден ( [Error] MP.pas(69): Undeclared identifier: 'SpeedButton2Click' //необъявленный идентификатор "спидбуттон2клик" - ты забыл поставить точку перед Click [Error] MP.pas(74): This form of method call only allowed for class methods //опять какая-то фигня, лень разбираться... [Error] MP.pas(92): Undeclared identifier: 'TrackBar1Change' //...блин, ты опять забыл точку перед Change! Хотя это должно происходить автоматически...
Так, короче, как я вижу, ты несколько раз пропустил точку между названием объекта и названием обработчика события. Возможно, ты что-то пытался исправить и случайно удалил точки, но, возможно, ты в ручную писал названия методов. Так вот: чтобы среда Delphi автоматически создала шаблон для процедуры, можно дважды кликнуть справа от названия события в инспекторе объектов.
Фух, блин, скорей всего, у тебя Delphi 7, так вот мой совет: установи 2007, там среда "на лету" распознаёт ошибки, чуть не тот символ поставишь - сразу красным подчёркивает, мол, что-то не то пишешь, братец. Т.е. и исправить можно сразу, не доходя до компиляции. (2005 и 2006-ые версии очень глючные, не рекомендую, а вот в 2007 я ошибок не замечал. 2009-ая версия и следующие - новый формат, там сменили кодировку символов, и старый код не подойдёт...)
LexTailor, на фиг нам твой проект? Я тебе подробно описал ошибки, по большей части, они из-за неправильного синтаксиса. Вот когда проект успешно откомпилируется, но при этом будет делать что-то фантастическое, но совсем не то, что тебе нужно - тут, скорей всего, потребуется знать код проекта.
Тем более, мы не знаем, что должен делать проект, и чего он не делает.
netkiller, ставь Delphi 2007, должна пойти. И вообще, не обязательно же именно 2010 либо 7! Попробуй, если не лень, 2009. А вообще-то, вот тут есть все версии Delphi: DelphiLab.
П-посмот-тр-рел я т-твой п-п-проЭкт, LexTailor... От одного взгляда на форму можно подохнуть... со смеху... Короче, удали на фиг свой проЭкт, потом скачай любую книгу по Delphi и начинай читать с самой первой страницы.
В общем, я понял причину возникновения твоего проекта - ты попытался "методом тыка" использовать по назначению хоть какой-то стандартный компонент. С одной стороны, это хорошо, но только тогда, когда уже разбираешься в ООП и знаешь синтаксис языка. Т.е. эксперименты с компонентами и т.п. - это хорошо, но если ты не понимаешь элементарных вещей в программировании - такие эксперименты во вред, можешь закрепиться в ложном мнении, что это всё очень сложно. Если ты изучал когда-то Pasсal - то изучить Delphi не составит большого труда, классы очень похожи на записи, использование компонентов вообще очень легко... Но с учётом того, какие ошибки в твоём какбЭ проЫЭкте, у меня создалось впечатление, что ты Pascal либо ни когда не видел, либо давно забыл...
Сообщение отредактировал TimKruz - Пятница, 18 Февраля 2011, 21:08
procedure TForm1.FormCreate(Sender: TObject); var mask: Word; begin mask := SendMessage(RichEdit1.Handle, EM_GETEVENTMASK, 0, 0); SendMessage(RichEdit1.Handle, EM_SETEVENTMASK, 0, mask or ENM_LINK); SendMessage(RichEdit1.Handle, EM_AUTOURLDETECT, Integer(True), 0); //Some text in RichEdit RichEdit1.Text := 'Angevengelist'#13#10 + 'www.gcup.ru. лучший сайт о разработке игр.'; end;
И напиши процедуру в пустом месте кода после
Code
implementation
{$R *.dfm}
Вот этот код
Code
procedure TForm1.WndProc(var Message: TMessage); var p: TENLink; strURL: string; begin if (Message.Msg = WM_NOTIFY) then begin if (PNMHDR(Message.lParam).code = EN_LINK) then begin p := TENLink(Pointer(TWMNotify(Message).NMHdr)^); if (p.Msg = WM_LBUTTONDOWN) then begin SendMessage(RichEdit1.Handle, EM_EXSETSEL, 0, Longint(@(p.chrg))); strURL := RichEdit1.SelText; ShellExecute(Handle, 'open', PChar(strURL), 0, 0, SW_SHOWNORMAL); end end end; inherited; end;
И ссылки будут активные
Добавлено (21.02.2011, 00:33) --------------------------------------------- Да и в uses добавь