![]() |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
JA hat es. Denn ich kann immernoch nicht von 2 Forms auf meine PlaylistKlasse zu greifen. LEIDER :(
mfg s0n |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
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 |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
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. |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
@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:
Playlist_Klasse
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.
Delphi-Quellcode:
Form2 Unit
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.
Delphi-Quellcode:
Ich hoffe das war jetzt nicht zu viel.Was muß ich in der Main Unit ändern damit ich dieses Chaos beseitigen kann.
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. mfg s0n |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Hallo,
1.
Delphi-Quellcode:
Bis auf Form1 sind das alles globale Variablen,
var
Form1: TForm1; sPlayer: Ts0nPlayer; posScroll: longword; ScrollMAx: integer; 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:
Das kommt in die eigene Klasse.
Const
BASS_ACTIVE_STOPPED = 0; BASS_ACTIVE_PLAYING = 1; BASS_ACTIVE_STALLED = 2; BASS_ACTIVE_PAUSED = 3; 3. Der Schreibstil !!! ;)
Delphi-Quellcode:
Einmal eingerückt, dann wie der nicht
//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;
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:
Ober das begin/end des else noch eingerückt werdne sollte,
if Bedingung then
begin Code1 end else begin Code2 end; Ansichtssache ... Heiko |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
Danke für die konstruktive Kritik. Werde ich mir zu Herzen. Nehmen. Wie gesagt ich programmiere jetzt erst 2 Wochen. :oops:
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:
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 :) )
Const
BASS_ACTIVE_STOPPED = 0; BASS_ACTIVE_PLAYING = 1; BASS_ACTIVE_STALLED = 2; BASS_ACTIVE_PAUSED = 3; 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 |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
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:
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 |
Re: TstringList // Form2 daten aus einer anderen Klasse lese
@ hoika Danke
Okay dann nehme ich den einfachen Weg :) und nehme die Bass mit in die uses auf. mfg s0n |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:31 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