Entwickler-Ecke

Multimedia / Grafik - BassdllPlayer1.GetSongTimeInfo(stUp); ???


Terra - Mo 28.08.06 11:04
Titel: BassdllPlayer1.GetSongTimeInfo(stUp); ???
Hallöchen...

ich hätte da mal ein Problem.

Ich habe zumindest schonmal rausgefunden, wie die Funktion GetSongTimeInfo(); von der Komponente BasDllPlayer zugewiesen wird. Jetzt möchte ich die grade gespielte Zeit anzeigen lassen. Also "BassdllPlayer1.GetSongTimeInfo(stUp);". Jetzt habe ich mein Label, wo die Zeit angezeigt werden soll. Wie verbinde ich jetzt also beide Funktionen ???

Label3 := BassdllPlayer1.GetSongTimeInfo(stUp); geht nicht.

Könnt mir da bitte jemand helfen ???

Terra


Gausi - Mo 28.08.06 11:39

Ich kenne die Komponente nicht, aber ich bezweifle, dass diese Funktion eine Variable vom Typ TLabel zurückliefert. Sinnvoll wäre da z.B. Integer, was man dann der Caption des Labels zuweisen kann:

Delphi-Quelltext
1:
Label3.Caption := IntToStr(BassdllPlayer1.GetSongTimeInfo(stUp));                    


Terra - Mo 28.08.06 12:08

Hallo Gausi,

hatte mich verschrieben, wollte das label natürlich mit Caption schreiben.
Also: Label3.Caption .....

So wie du es aber geschrieben hast, geht es nicht.
Bekomm die Meldung:

[Pascal Error] Unit1.pas(30):E2250 There is no overload version of 'IntToStr' that can be called with these arguments.

Hier mal die Funktion:


Delphi-Quelltext
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:
type
  TPlayerModus  = (moSamples, moMusik,  moStream);
  TBassSongStatusInfo = (stUp, stDown, stLength);


function TBassdllPlayer.GetSongTimeInfo(InfoStatus:TBassSongStatusInfo): TBassSongInfo;
var Time: Integer;
begin
  if Status = sndNotLoaded then begin
    Result.asInteger:=0;
    Result.asString := '--:--';
  end
  else begin
    case Modus of
      moSamples:
        case InfoStatus of
          stUp:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_ChannelGetPosition(Channel)));
          stDown:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_ChannelGetPosition(Channel))) -
                                 round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_StreamGetLength(Channel)));
          stLength:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_StreamGetLength(Channel)));
        end;
      moMusik:
        case InfoStatus of
          stUp:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_ChannelGetPosition(Channel)));
          stDown:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_MusicGetLength(Channel, True)) *
                                 (SpeedinProzent / 100)) - round(
                                 BASS_ChannelBytes2Seconds(Channel,
                                BASS_ChannelGetPosition(Channel)));
          stLength:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_MusicGetLength(Channel, True)) *
                                 (SpeedinProzent / 100));
        end;
      moStream:
        case InfoStatus of
          stUp:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_ChannelGetPosition(Channel)));
          stDown:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_StreamGetLength(Channel))) -
                                 round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_StreamGetLength(Channel)));
          stLength:
            Result.asInteger:= round(BASS_ChannelBytes2Seconds(Channel,
                                 BASS_StreamGetLength(Channel)));
        end;
    end;
    if Result.asInteger <> 0 then begin
      Time := Trunc(Result.asInteger);
      Result.asString := Format('%.2d:%.2d', [Time div 60, abs(Time mod 60)]);
    end
    else Result.asString := '00:00';
  end;
end;


Gausi - Mo 28.08.06 12:18

Edit: Hab Quatsch geschrieben, so sollte es gehen:


Delphi-Quelltext
1:
2:
3:
Label3.Caption := IntToStr(
   BassdllPlayer1.GetSongTimeInfo(stUp).asInteger 
   );


Oder, noch einfacher:

Delphi-Quelltext
1:
2:
Label3.Caption := 
   BassdllPlayer1.GetSongTimeInfo(stUp).asString;


Terra - Mo 28.08.06 12:38

Vielen Dank Gausi ... ich war schon am verzweifeln.

Wann weis ich eigentlich, wann ich so ein .asString bzw. ein .asInteger einsetzen muss?
Wär da im Leben nie selbst drauf gekommen.

Terra


Gausi - Mo 28.08.06 12:49

Schau dir doch einfach mal an, was du eben an Quelltext gepostet hast. Da steht sowas von result.asString. Daraus habe ich abgeleitet, dass der Ergebnistyp TBassSongInfo von GetSongTimeInfo eine Eigenschaft asString haben sollte.
Da ich erstmal annehme, dass die Kompo ganz gut ist, und Variablen/Funktionen sinnvoll belegt sind, habe ich die kühne Behauptung gewagt, dass
GetSongTimeInfo({Parameter}).asString eine Angabe über die SongTime liefert, und zwar in Form eines Strings ;-)


Terra - Mo 28.08.06 12:56

Hmm, jetzt wo du das so beschreibst, hört es sich logisch an ^^ muss ich mir echt mal merken solche kleinigkeiten ...

Vielen Dank für deine Mühe.

Bis zur nächsten Frage,

Terra