Thema: Delphi Filmarchiv in Delphi

Einzelnen Beitrag anzeigen

Chewbacca

Registriert seit: 5. Jun 2003
Ort: Gau-Bischofsheim
51 Beiträge
 
Delphi 3 Standard
 
#1

Filmarchiv in Delphi

  Alt 25. Jun 2003, 16:31
Gudn Tach!
Ich hab folgendes Problem: Ich sollte ein Programm mit Records, die in Files absoeicherbar sind, schreiben(siehe Joe.fresh). Der befehl zum schreiben funktioniert scheinbar, jedoch bekomme ich eine Fehlermeldung soblad ich specihern möchte: Kein Zugriff auf die Datei!
Was soll das?!? Liet das vielleicht daran, dass ich mit 2 Units arbeite?
Außerdem hab ich keine Ahnung wie ich beim Programmstart alles in der Datei enthaltene in einem Stringgrid ausgebe! D.h. wie ich den Zeiger in der Datei so lange verschiebe und alles ausgeben lass bis er bei EOF ist!
Das ist der Quelltext der Unit1, in der die Stringrid vorhanden ist, auf der alles ausgegeben werden soll.
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, Grids, ComCtrls, Menus, Unit2;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Image1: TImage;
    Image2: TImage;
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    MainMenu1: TMainMenu;
    Datei: TMenuItem;
    Neu1: TMenuItem;
    SpeichernUnter1: TMenuItem;
    Speicher1: TMenuItem;
    N1: TMenuItem;
    Hilfe1: TMenuItem;
    Sortrieren1: TMenuItem;
    Kurzhilfe1: TMenuItem;
    Titel1: TMenuItem;
    Bildqualitt1: TMenuItem;
    Humor1: TMenuItem;
    Action1: TMenuItem;
    Spannung1: TMenuItem;
    Medium1: TMenuItem;
    AnzahlDatentrger1: TMenuItem;
    N2: TMenuItem;
    ArchivSchlieen1: TMenuItem;
    ProgrammBeenden1: TMenuItem;
    Ansicht: TMenuItem;
    Archiv1: TMenuItem;
    BearbeitDingBlatt1: TMenuItem;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ProgrammBeenden1Click(Sender: TObject);
    procedure Archiv1Click(Sender: TObject);
    procedure BearbeitDingBlatt1Click(Sender: TObject);
    procedure ArchivSchlieen1Click(Sender: TObject);
    procedure Neu1Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation



Type TDatei = File Of TFilm;

{$R *.DFM}

Var Movie:TDatei;


procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form1.close;
Form2.close;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form1.Hide;
Form2.Show;
end;

procedure TForm1.FormCreate(Sender: TObject);
Begin
With Stringgrid1 Do
Begin
cells[0,0]:='Filmtitel';
cells[1,0]:='Bildqualität (1-10)';
cells[2,0]:='Humor (1-5)';
cells[3,0]:='Spannung (1-5)';
cells[4,0]:='Action (1-5)';
cells[5,0]:='Medium';
cells[6,0]:='Anzahl Datenträger';
End;
Assignfile(Movie,'Movie.fur');
If fileexists('Movie.fur')
  Then
  begin
   reset(Movie);
  end
   else
   Begin
    rewrite(Movie);
    Stringgrid1.rowcount:=filesize(Movie)+1;
    End;
end;

procedure TForm1.ProgrammBeenden1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Archiv1Click(Sender: TObject);
begin
Form1.Show;
Form2.Hide;
end;

procedure TForm1.BearbeitDingBlatt1Click(Sender: TObject);
begin
Form1.hide;
Form2.show;
end;

procedure TForm1.ArchivSchlieen1Click(Sender: TObject);
begin
CloseFile(Movie);
end;

procedure TForm1.Neu1Click(Sender: TObject);
begin
rewrite(Movie);
end;

procedure TForm1.N1Click(Sender: TObject);
begin
reset(Movie);
end;

end.
Das ist der Quelltext der 2. Unit in der mehrere Edit Fenster die Eingabe ermöglichen und in der auch der Speciher, also einlese Button vorhanden ist:
Delphi-Quellcode:
unit Unit2;

interface

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

type
 TFilm = Record
  Filmtitel:String[50];
  Qualitaet:Byte;
  Humor:Byte;
  Spannung:Byte;
  Action:Byte;
  Medium:TCombobox;
  Datent:Byte;
 End;
  TForm2 = class(TForm)
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Label1: TLabel;
    Edit2: TEdit;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    BitBtn2: TBitBtn;
    ComboBox1: TComboBox;
    BitBtn3: TBitBtn;
    Edit6: TEdit;
    Label7: TLabel;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    FilmSpeichern1: TMenuItem;
    Ansicht1: TMenuItem;
    Archiv1: TMenuItem;
    BearbeitDingBlatt1: TMenuItem;
    Hilfe1: TMenuItem;
    Kurzhilfe1: TMenuItem;
    ProgrammBeenden1: TMenuItem;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure ProgrammBeenden1Click(Sender: TObject);
    procedure Archiv1Click(Sender: TObject);
    procedure BearbeitDingBlatt1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;
Type TDatei = File Of TFilm;
{$R *.DFM}
Var Film:TFilm;
    Movie:TDatei;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Form2.Hide;
Form1.Show;
end;

procedure TForm2.BitBtn3Click(Sender: TObject);
begin
Form1.close;
Form2.close;
end;

procedure TForm2.BitBtn2Click(Sender: TObject);
begin
With Film Do
Begin
If Edit1.text=''
   Then
       Begin
       Edit1.text:='';
       Showmessage('Sie müssen den Filmtitel definieren!')
       End
   Else
       Filmtitel:=(Edit1.text);
End;
Write(Movie,Film);
If (strtoint(Edit2.text)>10) Or (edit2.text='') Or (strtoint(Edit2.text)<0)
Then
Begin
Edit2.text:='';
showmessage('Nur Zahlen von 0-5 eingeben!')
End
Else
Qualitaet:=strtoint(Edit2.text);
If (strtoint(Edit3.text)>5) Or (Edit3.text='') Or (strtoint(Edit3.text)<0)
Then
Begin
Edit3.text:='';
showmessage('Nur Zahlen von 0-5 eingeben!')
End
Else
Humor:=strtoint(Edit3.text);
If (strtoint(Edit4.text)>5) Or (Edit4.text='') Or (strtoint(Edit4.text)<0)
Then
Begin
Edit4.text:='';
Showmessage('Nur Zahlen von 0-5 eingeben!')
End
Else
Spannung:=strtoint(Edit4.text);
If (strtoint(Edit5.text)>5) Or (Edit5.text='') Or (strtoint(Edit4.text)<0)
Then
Begin
Showmessage('Nur Zahlen von 0-5 eingeben!');
Edit5.text:=''
End
Else
Action:=strtoint(Edit5.text);
Medium:=(Combobox1);
If Edit6.text=''
Then
Begin
Edit6.text:='';
Showmessage('Sie müssen de Anzahl der Datenträger angeben!')
End
Else
Datent:=strtoint(Edit6.text);
End;


procedure TForm2.ProgrammBeenden1Click(Sender: TObject);
begin
close;
end;

procedure TForm2.Archiv1Click(Sender: TObject);
begin
Form2.hide;
Form1.show;
end;

procedure TForm2.BearbeitDingBlatt1Click(Sender: TObject);
begin
Form1.hide;
Form2.show;
end;

end.
Und falls ihr jetzt wirklich gar nix mehr zu tun habt könntet ihr mir noch nen Tipp geben wie ich die Stringrid später sortieren kann!
Vielen Dank jetzt schon ma!
Always remember:'Let the Wookiee win!'
  Mit Zitat antworten Zitat