Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Fehler bei Verwendung mehrerer Forms (https://www.delphipraxis.net/171414-fehler-bei-verwendung-mehrerer-forms.html)

NickPower 6. Nov 2012 08:00

Fehler bei Verwendung mehrerer Forms
 
Hallo,
ich bin dabei einen MediaPlayer zu programmieren. Alles hat funktioniert, bis man versucht hat auf andere Forms zuzugreifen. Es kommt immer die Fehlermeldung:

Zitat:

Im ProjektMediaPayer.exe ist eine Exception der Klasse EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse 00445BE6 in Modul 'MediaPlayer.exe'. Lesen von Adresse 000002D0'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Nimmt man die Form wieder raus, funktioniert alles wieder.

Code:
unit main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, Mask, StdCtrls, ExtCtrls, Grids, MPlayer;

type
  TAudiofile = record
    path: String[255];
    title, artist, album, genre: String[30];
    year: String[4];
  end;

  TForm1 = class(TForm)
    MediaPlayer: TMediaPlayer;
    Button1: TButton;
    OpenDialog: TOpenDialog;
    ListBox: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure save(filepath: String);
    procedure loadalldata;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private-Deklarationen }

    seeker: Integer;
    RAudiofile: TAudiofile;
    musicdata: file of TAudiofile;


  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  RAudiofile: TAudiofile;

implementation

uses medialibrary;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
    assignfile(musicdata,'data.dat');
    seeker := 0;
    if fileexists('data.dat') then
    begin
        Reset(musicdata);
            loadalldata;
        if filesize(musicdata) <> 0 then
        begin
           seek(musicdata,seeker);
           read(musicdata,RAudiofile);
           mediaplayer.close;
           mediaplayer.filename := RAudiofile.path;
           mediaplayer.open;
           mediaplayer.play;
        end;
    end
    else
        rewrite(musicdata);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
    if opendialog.execute then
    begin
        for i := 0 to (opendialog.files.count -1) do
        begin
            save(opendialog.files[i]);
        end;
    end;
end;



procedure TForm1.save(filepath: String);
begin
    with RAudiofile do
    begin
        path := filepath;
        title := '';
        artist :='';
        album := '';
        genre := '';
        year := '';
    end;
    seeker := filesize(musicdata);

    seek(musicdata, seeker);
    write(musicdata, RAudiofile);  
end;



procedure TForm1.loadalldata;
var i: Integer;
begin
    for i := 0 to (filesize(musicdata) - 1) do
    begin
        seeker := i;
        seek(musicdata, seeker);
        read(musicdata, RAudiofile);
        Form2.listbox1.items[i] := RAudiofile.path;

    end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    closefile(musicdata);
end;

end.
Code:
unit medialibrary;

interface

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

type
  TForm2 = class(TForm)
    ListBox1: TListBox;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

end.
Es wäre toll, wenn ihr mir helfen könntet.

Mit freundlichen Grüßen

DeddyH 6. Nov 2012 08:11

AW: Fehler bei Verwendung mehrerer Forms
 
Form1 wird wohl das Hauptformular sein. Wenn Du in dessen OnCreate bist, existiert Form 2 noch gar nicht. Du kannst das Laden der Daten also auf einen späteren Zeitpunkt verlegen, Form2 aus der automatischen Formularerstellung herausnehmen und selbst anlegen oder darauf verzichten, aus einem Formular auf ein anderes zuzugreifen.

NickPower 7. Nov 2012 09:52

AW: Fehler bei Verwendung mehrerer Forms
 
Zitat:

Zitat von DeddyH (Beitrag 1189903)
Form1 wird wohl das Hauptformular sein. Wenn Du in dessen OnCreate bist, existiert Form 2 noch gar nicht. Du kannst das Laden der Daten also auf einen späteren Zeitpunkt verlegen, Form2 aus der automatischen Formularerstellung herausnehmen und selbst anlegen oder darauf verzichten, aus einem Formular auf ein anderes zuzugreifen.

Hallo, ich habe erstmal loadalldata aus Form2 herausgenommen und nun funktioniert es, wie du es gesagt hast! Danke!!! :)
Aber wie nehme ich Form2 aus der automatischen Formularerstellung heraus?

Mit freundlichen Grüßen

Darlo 7. Nov 2012 09:57

AW: Fehler bei Verwendung mehrerer Forms
 
Projekt -> Optionen -> Formulare

NickPower 19. Nov 2012 20:54

AW: Fehler bei Verwendung mehrerer Forms
 
Funktioniert alles!

Vielen Dank!!! :D

Mit freundlichen Grüßen


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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