AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi TstringList // Form2 daten aus einer anderen Klasse lesen

TstringList // Form2 daten aus einer anderen Klasse lesen

Ein Thema von sonny2007 · begonnen am 28. Aug 2009 · letzter Beitrag vom 28. Aug 2009
Antwort Antwort
Seite 2 von 2     12
sonny2007

Registriert seit: 27. Aug 2009
39 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 09:13
JA hat es. Denn ich kann immernoch nicht von 2 Forms auf meine PlaylistKlasse zu greifen. LEIDER

mfg s0n
  Mit Zitat antworten Zitat
sonny2007

Registriert seit: 27. Aug 2009
39 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 09:29
Juhu ich habe es. Danke LEute. Die Idee war richtig. DAnke taaktaak.

Ich habe jetzt von der Main Form es so aufgerufen Player_s0n_Klasse.playlist.GetCount;

Thx. Endlich kann ich weiter machen

mfg s0n
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 09:35
Die Unit beim Zugriff mit anzugeben ist nur notwendig, wenn es irgendwo noch eine weitere Variable gibt, die Playlist heist.
Das Chaos ist vorprogrammiert.
Entweder eine der Variable entsorgen oder einen anderen Namen vergeben.
  Mit Zitat antworten Zitat
sonny2007

Registriert seit: 27. Aug 2009
39 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 09:50
@Blub. Ich habe jetzt extra nochmal geschaut. ICh finde in meiner MainForm keine weitere Variable mit der Bezeichnung Playlist .

Ich habe mal die Main Unit . Playlist_Klasse , und dir Form2 Unit hier aufgelstet




Main Unit

Delphi-Quellcode:
unit Player_V0_2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, Menus, playlist_s0n_Klasse, player_s0n_Klasse,
  ExtCtrls ;

type
  TForm1 = class(TForm)

    Button_Play: TButton;
    Button_previous: TButton;
    Button_stop: TButton;
    Button_next: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    Open: TMenuItem;
    Open_Folder: TMenuItem;
    Save_Playlist: TMenuItem;
    Process: TMenuItem;
    Stop1: TMenuItem;
    Previous: TMenuItem;
    Next: TMenuItem;
    View1: TMenuItem;
    Playlist: TMenuItem;
    FileOpenDialog: TOpenDialog;
    Timer_Ablauf: TTimer;
    Namefield: TPanel;
    Timefield: TPanel;
    CpuField: TPanel;
    ScrollBar_Volume: TScrollBar;
    Label_Volume: TLabel;
    Id3TagInfo1: TMenuItem;
    ScrollBar_Position: TScrollBar;
    N2: TMenuItem;
    Info1: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure OpenClick(Sender: TObject);
    procedure Timer_AblaufTimer(Sender: TObject);
    procedure ScrollBar_VolumeChange(Sender: TObject);
    procedure ScrollBar_PositionScroll(Sender: TObject;
      ScrollCode: TScrollCode; var ScrollPos: Integer);
    procedure PlaylistClick(Sender: TObject);
    procedure Button_nextClick(Sender: TObject);
    procedure Button_previousClick(Sender: TObject);
    procedure Info1Click(Sender: TObject);
    procedure Button_PlayClick(Sender: TObject);
    procedure Button_stopClick(Sender: TObject);
    procedure FormClick(Sender: TObject);

 



       

  private
    { Private-Deklarationen }
  public

  end;

  var
  Form1: TForm1;
  sPlayer: Ts0nPlayer;
  posScroll: longword;
  ScrollMAx: integer;
  Const
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;

implementation

uses window_playlist;
{$R *.dfm}


//*************************************************************
//Beim Starten des Hauptfensters wird diese Procedur ausgeführt
//*************************************************************
procedure TForm1.FormCreate(Sender: TObject);
var tempL: real;
begin
      // Objekte erstellen
        sPlayer := ts0nplayer.Create;

      // Bass Engine initialisieren
        sPlayer.BassEngineInit(handle);

      // Anfangs Lautstärke auf 30 % setzen
        tempL:=30;
        sPlayer.Lauststaerke(tempL);

      // ScrollBar für Volume setzen
        scrollbar_Volume.Position := Round(tempL);
end;



//*************************************************************
// Action nach Open Klick
//*************************************************************
procedure TForm1.OpenClick(Sender: TObject);
var sadded: string;
      i : integer;
begin
    // Eigenschaften des Open Dialog setzen
    FileOpenDialog.Title:='Open Files ...';
    FileOpenDialog.Filter:='MP3 Dateien|*.mp3|Wave Dateien|*.wav';
    if FileOpenDialog.Execute then
   for i := 0 to FileOpenDialog.Files.Count - 1 do
      begin
        sAdded:= FileOpenDialog.Files[i] ;
// sPlaylist.AddTrack(sAdded);
        playlist_s0n_Klasse.Playlist.AddTrack(sadded);
      end;


end;



//*************************************************************
// Tímer
//*************************************************************
procedure TForm1.Timer_AblaufTimer(Sender: TObject);
var temp: integer;
    temp2: string;
begin
  Timer_Ablauf.Interval:=100;
  CpuField.Caption:= 'CPU: ' + sPlayer.GetCpuStatus + '%';
  // Wenn die interne Playlist keine Traxx enthält dann werden die Buttons gesperrt
    if playlist_s0n_Klasse.Playlist.Getcount > 0 then
      begin
        Button_Play.Enabled := true;
        Button_previous.Enabled := true;
        Button_Next.Enabled := true;
        Button_Stop.Enabled := true;
      end else
      begin
        Button_Play.Enabled := false;
        Button_previous.Enabled := false;
        Button_Next.Enabled := false;
        Button_Stop.Enabled := false;
      end;
   // Wenn Wiedergabe gestartet wird der Position Regler freigegeben und die Zeiten aktualisiert
    if splayer.GetBassStatus = BASS_ACTIVE_PLAYING then
     begin

       ScrollBar_Position.Enabled := true ;
       temp:= Round( sPlayer.GetTrackTimeRunSec / sPlayer.GetTrackTimeLoadSec * 1000);

      if ScrollBar_Position.Tag = 0 then
       ScrollBar_Position.Position:= temp;
       Namefield.Caption:=extractfilename(playlist_s0n_Klasse.Playlist.ActTrackName);
       TimeField.Caption:= sPlayer.GetActualTime + '/' + splayer.GetTrackTimeRun;
     end;

    if Scrollbar_Position.Position = 1000 then
      begin
        temp2:= playlist_s0n_Klasse.Playlist.GetNextTrackName;
        sPlayer.Abspielen(temp2);
      end;

end;



//*************************************************************
// Volume Scroller
//*************************************************************
procedure TForm1.ScrollBar_VolumeChange(Sender: TObject);
var tempScroll: real;
begin
    tempScroll:=ScrollBar_Volume.Position / 100;
    sPlayer.Lauststaerke(tempScroll);
    Label_Volume.Caption:=(FloatToStr(tempScroll*100)) + ' %';
end;





//Button Play
procedure TForm1.Button_PlayClick(Sender: TObject);
begin
  playlist_s0n_Klasse.Playlist.PlayActTrack;
end;

//Button Next Track
procedure TForm1.Button_nextClick(Sender: TObject);
begin
playlist_s0n_Klasse.Playlist.PlayNextTrack;
end;

//Button Previous Track
procedure TForm1.Button_previousClick(Sender: TObject);
begin
playlist_s0n_Klasse.Playlist.PlayPreviousTrack;
end;

//Button Stop
procedure TForm1.Button_stopClick(Sender: TObject);
begin
playlist_s0n_Klasse.Playlist.StopActTrack;
ScrollBar_Position.Position:=0;
end;




//ScrollBar Action nach beenden des Scrollens
procedure TForm1.ScrollBar_PositionScroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
    if Scrollcode = scEndScroll then
    begin
    ScrollMax:=ScrollBar_Position.Max;
    posScroll:= ScrollBar_Position.Position;
    sPlayer.SetPosition(posScroll,ScrollMax);
    ScrollBar_Position.Tag:=0;
    end else
    ScrollBar_Position.Tag:=1;

end;

// Menu Einträge die angelkickt werden


//Menu View - Show - Anzeigen des Playlist Fensters
procedure TForm1.PlaylistClick(Sender: TObject);
begin
Form2.Show;
end;

// Menu ? - Info
procedure TForm1.Info1Click(Sender: TObject);
begin
ShowMessage('programmed by s0n: Version 0.2');

end;



procedure TForm1.FormClick(Sender: TObject);
begin
showMessage(inttostr(playlist_s0n_Klasse.Playlist.Getcount));
end;


end.
Playlist_Klasse

Delphi-Quellcode:
unit playlist_s0n_Klasse;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Bass, StdCtrls, ComCtrls, IniFiles, player_s0n_klasse;


type
  Ts0nplaylist = class
  scPlayList: THashedStringList ; // In dieser Liste werden die Namen der Traxx gespeichert
  scActTrackIndex: Integer; // Variable für den aktuellen TrackIndex
  sPlayer: Ts0nPlayer; // Player Klassenverknüpfung setzen
  constructor Create;
  destructor Destroy; override;

  private

  public

  procedure AddTrack(var scFile: String); // Fügt einen Track zu der String List
  function GetNextTrackIndex: Integer; // Ermittelt die nächste Track Indexnummer
  function GetNextTrackName: String; // Ermittel den nächsten Tracknamen ( benötigt die nächste Indexnummer )
  function GetPreviousTrackIndex: Integer; // Ermittelt die vorherige Track Indexnummer
  function GetPreviousTrackName: String; // Ermittelt den vorherigen Tracknamen
  function Getcount: integer; // Gesamtanzahl der Einträge in der StringList
  function ActTrackName: String; // Gibt den Eintrag aus der per Index augerufen wurde

  procedure PlayActTrack; // aktuellen Track abspielen
  procedure PlayNextTrack; // nächsten Track abspielen
  procedure PlayPreviousTrack; // vorherigen Track abspielen
  procedure StopActTrack; // stoppt den aktuell laufen Track
end;

var Playlist: Ts0nPlaylist;

implementation




constructor Ts0nplaylist.Create;
    begin
      inherited create;
      Playlist := Ts0nPlaylist.Create;
      scPlayList := THashedStringList.Create;
      scActTrackIndex:= 0;
    end;

destructor Ts0nplaylist.Destroy;
  begin
    scPlaylist.Free;
    FreeAndNil (Playlist);
    inherited destroy;
  end;


//***********************************************************
// Adden
//***********************************************************
procedure ts0nplaylist.AddTrack(var scFile: String);
  begin
    scPlayList.Add(SCFile);
  end;

//***********************************************************
// Den aktuellen Tracknamen auslesen
//***********************************************************
function Ts0nPlaylist.ActTrackName: String;
  begin
  result:=scPlaylist.Strings[scActTrackIndex];
  end;


//***********************************************************
// Die nächste List Indexnummer auslesen
//***********************************************************
function ts0nplaylist.GetNextTrackIndex: Integer;
  begin
    if scActTrackIndex = scPlaylist.Count-1 then
    begin
    scActTrackIndex := 0;
    end else
    begin
    scActTrackIndex := scActTrackIndex + 1;
    end;
    result:=scActTrackIndex;
  end;

//***********************************************************
// Die vorherige List Indexnummer auslesen
//***********************************************************
function ts0nplaylist.GetPreviousTrackIndex: Integer;
  begin
if scActTrackIndex = 0 then
    begin
    scActTrackIndex := scPlaylist.Count-1;
    end else
    begin
    scActTrackIndex := scActTrackIndex -1 ;
    end;
    result:=scActTrackIndex;
  end;

//***********************************************************
// Den nächsten Track Name auslesen
//***********************************************************
function ts0nplaylist.GetNextTrackName: String;
  begin
    result:= scPlaylist.Strings[GetNextTrackIndex];
  end;


//***********************************************************
// Den vorherigen Track Name auslesen
//***********************************************************
function ts0nplaylist.GetPreviousTrackName: String;
  begin
    result:= scPlaylist.Strings[GetPreviousTrackIndex];
  end;


//***********************************************************
// Count ausgeben
//***********************************************************
function ts0nplaylist.getcount: integer;
begin
    result:=scPlaylist.Count;
end;


//***********************************************************
// Den aktuellen Track abspielen
//***********************************************************
procedure Ts0nPlaylist.PlayActTrack;
var sct: string;
  begin
    case sPlayer.BassStatus of

      BASS_ACTIVE_STOPPED:
      begin
      sct:=ActTrackName;
      sPlayer.Abspielen(sct);
      end;
      BASS_ACTIVE_PLAYING: sPlayer.Pausieren;
      BASS_ACTIVE_PAUSED: sPlayer.Fortsetzen;
      end;
end;
//***********************************************************
// Den nächsten Track abspielen
//***********************************************************
procedure Ts0nPlaylist.PlayNextTrack;
var sct: string;
  begin
  sct:= GetNextTrackName;
  sPlayer.Abspielen(sct);
  end;
//***********************************************************
// Den vorherigen Track abspielen
//***********************************************************
procedure Ts0nPlaylist.PlayPreviousTrack;
var sct: string;
  begin
  sct:= GetPreviousTrackName;
  sPlayer.Abspielen(sct);
  end;
//***********************************************************
// Den aktuellen Track stoppen
//***********************************************************
procedure Ts0nPlaylist.StopActTrack;
  begin
  sPlayer.Stoppen;
  end;


end.
Form2 Unit

Delphi-Quellcode:
unit window_playlist;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,playlist_s0n_Klasse, player_s0n_Klasse, ComCtrls;

type
  TForm2 = class(TForm)
    MainPlayList: TListView;
    procedure FormActivate(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}







procedure TForm2.FormActivate(Sender: TObject);
var myList : TListItem;
begin
myList := MainPlayList.Items.Add;
myList.Caption:=Playlist.ActTrackName;

end;


end.
Ich hoffe das war jetzt nicht zu viel.Was muß ich in der Main Unit ändern damit ich dieses Chaos beseitigen kann.

mfg s0n
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 10:24
Hallo,

1.
Delphi-Quellcode:
var
  Form1: TForm1;
  sPlayer: Ts0nPlayer;
  posScroll: longword;
  ScrollMAx: integer;
Bis auf Form1 sind das alles globale Variablen,
die hier nichts zu suchen haben.
Sie kommen in den private-Teile von TForm1.

Bei sPlayer steht wieder die Frage,
ob er auch von anderen Units/Forms benutzt wird,
wenn ja, die hast ja jetzt eine eigene Klasse dafür.

2.
Delphi-Quellcode:
  Const
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;
Das kommt in die eigene Klasse.

3. Der Schreibstil !!!

Delphi-Quellcode:
//Button Play
procedure TForm1.Button_PlayClick(Sender: TObject);
begin
  playlist_s0n_Klasse.Playlist.PlayActTrack;
end;

//Button Next Track
procedure TForm1.Button_nextClick(Sender: TObject);
begin
playlist_s0n_Klasse.Playlist.PlayNextTrack;
end;
Einmal eingerückt, dann wie der nicht

Delphi-Quellcode:
begin
Code
end

begin
  Code
end

Das ist total unleserlich.
Erwarte nicht, dass sich das jemand komplett ansieht
Augenkrebs !!!

Noch ein Bsp.
Delphi-Quellcode:
if Bedingung then
begin
  Code1
end
else
begin
  Code2
end;
Ober das begin/end des else noch eingerückt werdne sollte,
Ansichtssache ...


Heiko
Heiko
  Mit Zitat antworten Zitat
sonny2007

Registriert seit: 27. Aug 2009
39 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 10:34
Danke für die konstruktive Kritik. Werde ich mir zu Herzen. Nehmen. Wie gesagt ich programmiere jetzt erst 2 Wochen.

Aber ich bin immer offen für Tipps. Es währe super wenn Delphi es selber einrücken würde.
Das Problem bei diesem Stück ist

Delphi-Quellcode:
  Const
  BASS_ACTIVE_STOPPED = 0;
  BASS_ACTIVE_PLAYING = 1;
  BASS_ACTIVE_STALLED = 2;
  BASS_ACTIVE_PAUSED = 3;
mache ich es nicht, muß ich die Bass Unit mit in die uses schreiben. Weiß halt leider ob das wieder Speicher kostet ( wobei das bei meinen vielen Fehlern soweiso egal ist )

Die sPlayer Variable werde ich jetzt auch rausschreiben. Da dies genau dasselbe Problem ist wie mit der Playlist Klasse. Ich merke schon, es liegt ein langer Weg vor mir ...
Wie sieht denn der, sagen wir mal "leserlichste Schreibstil" aus? Will ja nicht doch dem Augenarzt neue Kundschaft bescheeren .

@Blub Danke dafür. Schon umgesetzt. Und siehe da es funzt. Man wenn alles so einfach gehen würde.

Super von euch... Danke für eure hilfe

mfg s0n
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 10:40
Hallo,

2 Wochen, OK, Entschuldigung angenommen.
Schau dir einfach mal die Standard-Units von Delphi an,
um den Stil zu erlernen (Strg + linke Maustaste auf die Unit).

Oder suche im Programme\Borland nach Pas-Dateien.

Zitat:
muß ich die Bass Unit mit in die uses schreiben
DRY (Don't repeat yourself) oder andere

Beim uses wird nur das in die Exe reinkompiliert,
was auch benutzt wird (der Linker schmeisst den Rest raus)

Und ausserdem:
Wie gross war noch mal deine Festplatte, 20 oder 30 MB ?
Ich habe ne 170er ätsch
Im Ernst, zum Anfang brauchst du dir um Exe-Grösse keine Sorgen machen.


Heiko
Heiko
  Mit Zitat antworten Zitat
sonny2007

Registriert seit: 27. Aug 2009
39 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#18

Re: TstringList // Form2 daten aus einer anderen Klasse lese

  Alt 28. Aug 2009, 10:44
@ hoika Danke
Okay dann nehme ich den einfachen Weg und nehme die Bass mit in die uses auf.

mfg s0n
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:19 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