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

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

  Alt 7. Jan 2007, 21: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.
Angehängte Grafiken
Dateityp: jpg shoot_301.jpg (47,7 KB, 25x aufgerufen)
  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 13:44 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 by Thomas Breitkreuz