AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language prozedur verhaelt sich je nach aufrufposition anders
Thema durchsuchen
Ansicht
Themen-Optionen

prozedur verhaelt sich je nach aufrufposition anders

Ein Thema von 1234588 · begonnen am 16. Mär 2008 · letzter Beitrag vom 16. Mär 2008
 
1234588

Registriert seit: 14. Jan 2007
Ort: Stuttgart
164 Beiträge
 
#1

prozedur verhaelt sich je nach aufrufposition anders

  Alt 16. Mär 2008, 15:11
hallo community
ich arbeite derzeit an einem moeglichst schlanken programm, was musik mit hilfe der bass.dll abspielen soll.
im hauptfenster befindet sich eine playlist, in die man mittels einer prozedur lieder hinzufuegen kann. die prozedur:

Delphi-Quellcode:
procedure AddTrack(s: String);
var
  //TStrList ist ein nachbau der TStrlinglist klasse. in wesentlichen ist es das selbe
  m3ulist: TStrList;
  i: LongInt;
  //HSTREAM ist in der bass.pas definiert. ist vom typ LongWord
  tmpstream: HSTREAM;
begin
  //unsere datei wird gerendert
  tmpstream := BASS_StreamCreateFile(False, @s[1], 0, 0, 0);
  //wenn das handle nicht 0 ist, die datei also eine gueltige audio datei ist..
  if tmpstream <> 0 then
  begin
    //playlist ist mein TStrList objekt, indem ich meine dateinamen der playlist sichere
    Playlist.Add(s);
    SendMessage(hList, LB_ADDSTRING, 0, LongInt(PChar(ExtractFileName(s))));
    //den stream wieder freigeben, da er nur erstellt wurde um die gueltigkeit der audio datei zu pruefen
    BASS_StreamFree(tmpstream);
    //wenn das neu hinzugefuegte lied das erste ist, soll es auch gleich abgespielt werden
    if SendMessage(hList, LB_GETCOUNT, 0, 0) = 1 then play(track);
  end else
  begin
    //wenn die datei keine gueltige audio datei ist, wird die extension der datei geprueft
    //ist diese nicht m3u, wird die procedure verlassen
    if FileExt(s) <> 'm3uthen exit;
    //die stringlist wird erstellt und die playlist geladen
    m3ulist := TStrList.Create;
    m3ulist.loadfromfile(s);
    //der pfad der playlist wird ermittelt. im grunde das selbe wie ExtractFilePath()
    while s[length(s)] <> '\do
      Delete(s, length(s), 1);

    //schleife die jedes element durchgehen soll
    for i := 0 to m3ulist.Count - 1 do
      //ist das erste zeichen ein #, handelt es sich um eine extended m3u playlist. die zeile ist ein kommentar oder eine zusatz information. ich ignoriere diese informationen vorerst
      if m3ulist.strings[i][1] <> '#then
        //IsDrive() prueft den pfad. gibt true zurueck, wenn der pfad mit einem laufwerksbuchstaben beginnt
        if IsDrive(m3ulist.strings[i]) then
          AddTrack(m3ulist.strings[i]) else
            AddTrack(s + m3ulist.strings[i]);
    m3ulist.Free;
  end;
end;
diese prozedur funktioniert tadellos. auch m3u playlist werden erfolgreich ausgelesen. allerdings beobachte ich ein seltsames phaenomen. will ich eine playlist per drag&drop hinzufuegen, sind die dateien nur bedingt abspielbar. man kann beispielsweise das lied nicht per doppelklick abspielen. der aufruf ist genau der selbe, nur findet er an einer anderen position statt

mein drag&drop teil:

Delphi-Quellcode:
var
  tmpstr: String;
  iDrop,
  fSize: LongInt;

..

  WM_DROPFILES:
  begin
    for iDrop := 0 to DragQueryFile(wParam, $FFFFFFFF, @tmpstr[1], 255) - 1 do
    begin
      fSize := DragQueryFile(wParam, iDrop, nil, 0) + 1;
      SetLength(tmpstr, fSize);
      DragQueryFile(wParam, iDrop, @tmpstr[1], fSize);
      AddTrack(tmpstr);
    end;
    DragFinish(wParam);
  end;
ich bin langsam ratlos. ich verstehe nicht, warum der selbe aufruf an einer anderen position nichtmehr funktioniert. ich hoffe, ich habe mich verstaendlich gemacht :)
falls es helfen soll, gebe ich auch gerne den gesamten quelltext raus. das programm soll ohnehin open source werden
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz