Avatar billede hasan Nybegynder
16. september 2004 - 20:24 Der er 10 kommentarer og
3 løsninger

Hjælp til TStringLis

Jeg er i gang med en Mp3 afspille og jeg bruge en TStringList til at opbevare fil stierne til sangene, men hvordan kan jeg erklær min TStringList så jeg bare kan skrive Playlist.SomeThingToDO fra hvilket som helt sted i mit program

Begin
var
    Playlist : TStringList;
begin
  Playlist := TStringList.Create;
  try
    Playlist.LoadFromFile(C:File);

      finally
    Playlist.Free;
end;
Avatar billede x-masman Nybegynder
16. september 2004 - 20:32 #1
Do erklærer den bare under public. Så kan du bruge den hvordom helst.
Avatar billede x-masman Nybegynder
16. september 2004 - 20:33 #2
Så skal du bare i de andre enheder bruge den enhed hvor den er erklæret:

uses mp3playermain;

eksempelvis
Avatar billede hasan Nybegynder
16. september 2004 - 20:36 #3
kan du ik give et kode eksempel?? jeg ved ikke hvordan jeg erklær public
Avatar billede x-masman Nybegynder
16. september 2004 - 20:42 #4
Din ene enhed: her kan man kalde procedure overalt:

unit Mp3Player;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, MPlayer, ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
    //Her erklærer du procedure og funktioner public
      procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShellExecute(self.WindowHandle,'open','www.hotmail.com',nil,nil, SW_SHOWNORMAL);
  close;
end;

end.

I din anden skriver du så under uses:

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, MPlayer, ShellApi, Mp3Player; //<- her
Avatar billede x-masman Nybegynder
16. september 2004 - 20:44 #5
Så kan du kalde den med:

Mp3Player.button1click([..]) eller i dit tilfælde

Mp3Player.playlist.
Avatar billede x-masman Nybegynder
16. september 2004 - 20:48 #6
Hov. Jeg stener lidt. Hvorfor erklærer du TStrinlisten inde i en funktion. Så er den jo kun variable inden for den funktion. Hvis du istedet erklærer den under public ksn du bruge den overalt.
Avatar billede hasan Nybegynder
16. september 2004 - 20:52 #7
jeg tror ikke du har forstået hvad jeg mener :) jeg har kun en unit, du vil have mig til at oprette en ny unit?? jeg vil bare erklær en TStringList som kan bruges i alle mine functions
Avatar billede hasan Nybegynder
16. september 2004 - 20:54 #8
nu stener jeg hvis :) ja dit sidste indlæg er rigtigt.

jeg vil erklær den under public, men ved ikke hvordan
Avatar billede x-masman Nybegynder
16. september 2004 - 20:57 #9
Du kan bare nøjes med at erklære den udenfor funktionen så:

unit Mp3Player;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, MPlayer, ShellApi;

type
  TForm1 = class(TForm)
    Button1: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
    //Her erklærer du procedure og funktioner public
      procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;
  playlist: TStringList; //<----- Her

implementation

{$R *.DFM}

[..]

end.
Avatar billede fixxxer Nybegynder
17. september 2004 - 09:57 #10
Ja men det er jo ikke nok bare at erklære den, det ville også være ganske smart at oprette den:


unit DinUnit;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  playlist: TStringList;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  playlist := TStringList.Create;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  playlist.Free;
end;

end.
Avatar billede hrc Mester
17. september 2004 - 12:45 #11
xmasman: Du laver en global variabel i et objektorienteret udviklingssprog... Det er omtrent ligeså grimt og ildeset som at bruge Goto (men hvis det løser opgaven..)

Jeg ville vælge den "frelste" version i stedet:

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject); // Bruger ikke FormClose, men OnDestroy
  private
    fPlayList : TStringList; // Foranstillet f på private variable
  public
    property PlayList : TStringList read fPlayList;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  fPlaylist := TStringList.Create;
end;

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

Forskellen er at den nu er indeholdt i formens objekt som en privat liste; mener det kaldes indkapsling. Samtidig offentliggør jeg den via en readonly-property.

Det er nu synlig i hele formen, mens andre kan tilgå den via Form1.PlayList

En sidste mulighed er at placere stringlisten for sig i en separat unit således at den er en selvstændig instans. Så kunne man oprette og slette den via initialization og finalization

Unit GlobalPlaylistUnit;

uses
  Classes;

var
  PlayList : TStringList;

implementation

initialization
  PlayList := TStringList.Create;

finalization
  PlayList.Free;

end.

Denne løsning plejer jeg at bruge til at indeholde programmets indstillinger (læses ind ved opstart og skrives igen ved afslut)
Avatar billede hasan Nybegynder
17. september 2004 - 17:37 #12
x-masman hvis du lige lavet et svar så får i 20 point hver, da alle 3 forslag virker
Avatar billede x-masman Nybegynder
17. september 2004 - 19:00 #13
Fint okay
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester