AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Wie kann ich Sender über eine listbox Laden für ein Radio
Thema durchsuchen
Ansicht
Themen-Optionen

Wie kann ich Sender über eine listbox Laden für ein Radio

Ein Thema von maik1481 · begonnen am 4. Jan 2007 · letzter Beitrag vom 7. Jan 2007
Antwort Antwort
maik1481

Registriert seit: 29. Okt 2006
Ort: OSLO
21 Beiträge
 
#1

Wie kann ich Sender über eine listbox Laden für ein Radio

  Alt 4. Jan 2007, 16:02
Ich möchte mir ein Radio mit hilfe der Bass Kompo Bauen aber habe nicht so wirklich ahnung wie es geht mit dem Sendern.

Habe mir zwar das Beispiel angesehen aber werde nicht wirklich schlau draus.
Kann mir einer von euch sagen wie ich das machen könnte?

Habe noch nich angefagen daher kein Code Naja keine Peilung wie ich das machen könnte. Grübelnd...


Habe mir folgendes Gedacht:
======================================

Sender über eine Listbox wählen
dann über ein Button Verbinden lassen

======================================

Danke schon mal Voraus

Maik
  Mit Zitat antworten Zitat
4. Jan 2007, 16:33
Dieses Thema wurde von "Phoenix" von "Neuen Beitrag zur Code-Library hinzufügen" nach "VCL / WinForms / Controls" verschoben.
Ist kein neuer Beitrag zur Codelib sondern eine Frage zu Komponenten...
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Wie kann ich Sender über eine listbox Laden für ein Radi

  Alt 4. Jan 2007, 16:57
Hast du dir mal die Beispiel-Projekte bei der Bass.dll angeguckt? Da ist auch eins mit Radio dabei (iirc im Ordner "Net"). Zwar geht das da über Buttons, aber mit ner Listbox, in der die Senderdaten stehen, dürfte das prinzipiell genauso gehen.

Edit: Oh, ich sehe grade noch, dass du diese Komponente nutzen willst - da weiß ich nichts zu.
  Mit Zitat antworten Zitat
maik1481

Registriert seit: 29. Okt 2006
Ort: OSLO
21 Beiträge
 
#4

Re: Wie kann ich Sender über eine listbox Laden für ein Radi

  Alt 4. Jan 2007, 17:01
Ja hab mir das Beispiel angesehen aber das läuft da ja über 2 Adressen daher mein Problem.

Mfg
Maik
  Mit Zitat antworten Zitat
maik1481

Registriert seit: 29. Okt 2006
Ort: OSLO
21 Beiträge
 
#5

Re: Wie kann ich Sender über eine listbox Laden für ein Radi

  Alt 7. Jan 2007, 20:55
Habe die Lössung Gefunden es wirklich Simpel.

Man Arbeitet mit der Listbox index Function
dammit kannn man die Daten Verlinken auf eine andere Listbox wo die URL drin Steht.

Zugegeben es ist nicht gerade so Sogut aber zimlich Einfach Handzuhaben.

Naja hier mal der Code


Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, bass, StdCtrls, Buttons, Gauges, ExtCtrls, LMDControl,
  LMDBaseControl, LMDBaseGraphicControl, LMDGraphicControl, LMDBaseMeter,
  LMDCustomProgress, LMDProgress, JvComponentBase, JvComputerInfoEx;

const
  WM_INFO_UPDATE = WM_USER + 101;
type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    ListBox1: TListBox;
    ComboBox1: TComboBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    Image1: TImage;
    Label1: TLabel;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    StaticText3: TStaticText;
    StaticText4: TStaticText;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    StaticText5: TStaticText;
    Label6: TLabel;
    Gauge: TLMDProgress;
    Label3: TLabel;
    StaticText6: TStaticText;
    Timer1: TTimer;
    JvComputerInfoEx1: TJvComputerInfoEx;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ListBox1Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure WndProc(var Msg: TMessage); override;
  end;

var
  Form1  : TForm1;
  cthread: DWORD = 0;
  chan  : HSTREAM = 0;
  win   : hwnd;
  URLS  : String;
  RFName : String;
implementation

uses Unit2;

{$R *.dfm}

procedure Error(es: string);
begin
  MessageBox(win, PChar(es + #13#10 + '(error code: ' + IntToStr(BASS_ErrorGetCode) +
    ')'), nil, 0);
end;

procedure DoMeta(meta: PChar);
var
  p: Integer;
begin
  if (meta <> nil) then
  begin
    p := Pos('StreamTitle=', meta);
    if (p = 0) then
      Exit;
    p := p + 13;
    SendMessage(win, WM_INFO_UPDATE, 7, DWORD(PChar(Copy(meta, p, Pos(';', meta) - p - 1))));
  end;
end;

procedure MetaSync(handle: HSYNC; channel, data, user: DWORD); stdcall;
begin
  DoMeta(PChar(data));
end;

procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
  if (buffer <> nil) and (len = 0) then
    SendMessage(win, WM_INFO_UPDATE, 8, DWORD(PChar(buffer)));
end;

function OpenURL(url: PChar): Integer;
var
  icy: PChar;
  Len, Progress: DWORD;
begin
  Result := 0;
  BASS_StreamFree(chan); // close old stream
  progress := 0;
  SendMessage(win, WM_INFO_UPDATE, 0, 0); // reset the Labels and trying connecting

  chan := BASS_StreamCreateURL(url, 0, BASS_STREAM_STATUS, @StatusProc, 0);
  if (chan = 0) then
  begin
    SendMessage(win, WM_INFO_UPDATE, 1, 0); // Oops Error
  end
  else
  begin
    // Progress
    repeat
      len := BASS_StreamGetFilePosition(chan, BASS_FILEPOS_END);
      if (len = DW_Error) then
        break; // something's gone wrong! (eg. BASS_Free called)
      progress := (BASS_StreamGetFilePosition(chan, BASS_FILEPOS_DOWNLOAD) -
        BASS_StreamGetFilePosition(chan, BASS_FILEPOS_CURRENT)) * 100 div len;
      // percentage of buffer filled
      SendMessage(win, WM_INFO_UPDATE, 2, progress); // show the Progess value in the label

    until
      progress > 75;
      form1.Gauge.maxValue:=75;

    // get the broadcast name and bitrate
    icy := BASS_ChannelGetTags(chan, BASS_TAG_ICY);
    if (icy <> nil) then
      while (icy^ <> #0) do
      begin
        if (Copy(icy, 1, 9) = 'icy-name:') then
          SendMessage(win, WM_INFO_UPDATE, 3, DWORD(PChar(Copy(icy, 10, MaxInt))))

        else if (Copy(icy, 1, 7) = 'icy-br:') then

          SendMessage(win, WM_INFO_UPDATE, 4, DWORD(PChar('bitrate: ' + Copy(icy, 8, MaxInt))));
        icy := icy + Length(icy) + 1;
      end;
    // get the stream title and set sync for subsequent titles
    DoMeta(BASS_ChannelGetTags(chan, BASS_TAG_META));
    BASS_ChannelSetSync(chan, BASS_SYNC_META, 0, @MetaSync, 0);
    // play it!
    BASS_ChannelPlay(chan, FALSE);
  end;
  cthread := 0;
end;

procedure TForm1.WndProc(var Msg: TMessage);
begin
  inherited;
  if Msg.Msg = WM_INFO_UPDATE then
    case msg.WParam of
      0:
        begin
          Gauge.Caption := 'connecting...';
          statictext2.Caption := '';

        end;
      1:
        begin
          Gauge.Caption := 'not playing';
          Error('Can''t play the stream');
        end;
      2: Gauge.Position:=msg.LParam;
      3: statictext1.Caption := PChar(msg.LParam);
      4: Gauge.Caption := PChar(msg.LParam);
      5: statictext2.Caption := PChar(msg.LParam);
      6: statictext2.Caption := PChar(msg.LParam);
      7: statictext2.Caption := PChar(msg.LParam);
      8: statictext6.Caption := PChar(msg.LParam);
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
try
statictext3.Caption:=inttostr(JvComputerInfoEx1.Memory.FreePhysicalMemory);
statictext4.Caption:=inttoStr(JvComputerInfoEx1.Memory.TotalPhysicalMemory);
statictext6.Caption:='OFF';
win := handle;
  if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
  begin
    MessageBox(0, 'An incorrect version of BASS.DLL was loaded', nil, MB_ICONERROR);
    Halt;
  end;
  if (not BASS_Init(-1, 44100, 0, Handle, nil)) then
  begin
    Error('Can''t initialize device');
    Halt;
  end;
 combobox1.Items.LoadFromFile('\HelixSoftware\NetRadio\Country\Default.dat');
 combobox1.ItemIndex:=0;
 listbox1.Items.LoadFromFile('\HelixSoftware\NetRadio\Sender\'+combobox1.Text+'.dat');
Except
 ShowMessage('File Notfound Please RestInstall this Application');
 end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
RFName := Statictext2.Caption;
statictext5.Caption:='Recording Saved as: '+RFName+'.ogg';
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 BASS_Free;
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  ThreadId: Cardinal;
begin
URLS:= form2.ListBox1.Items[form1.ListBox1.ItemIndex];
  if (cthread <> 0) then
    MessageBeep(0)
  else
    cthread := BeginThread(nil, 0, @OpenURL, PChar(urls), 0, ThreadId);
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 form2.listbox1.Items.LoadFromFile('\HelixSoftware\NetRadio\Sender\'+form1.ComboBox1.Text+'.hpls');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 application.ProcessMessages;
end;

end.
Miniaturansicht angehängter Grafiken
shoot_301.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz