AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Filmarchiv in Delphi

Ein Thema von Chewbacca · begonnen am 25. Jun 2003 · letzter Beitrag vom 25. Jun 2003
Antwort Antwort
Seite 1 von 2  1 2      
Chewbacca

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

Filmarchiv in Delphi

  Alt 25. Jun 2003, 15: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
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 25. Jun 2003, 15:44
Moin Chewbacca,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Eine Bitte:
Könntest Du wohl bitte künftig so umfangreiche Sourcen als Attachement anhängen?
Die Leser des Threads werden's Dir danken
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 25. Jun 2003, 16:25
Der Fehler liegt darin, dass du in jeder Unit mit einer eigenen Variablen Movie arbeitest; die in Unit2 wird allerdings nicht geöffnet, deshalb geht auch das Speichern nicht.
Du musst in Unit1
Code:
Var Movie:TDatei;
in den interface-Abschnitt verschieben und die selbe Deklaration in Unit2 löschen.
Übrigens würde ich auch die Deklaration von TFilm nach Unit1 verschieben. Nur der Übersicht halber...
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 25. Jun 2003, 16:28
Und kuck mal auf meiner Homepage, da habe ich eine Klasse für typisierte Dateien geschrieben (mit Demo).
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewbacca

Registriert seit: 5. Jun 2003
Ort: Gau-Bischofsheim
51 Beiträge
 
Delphi 3 Standard
 
#5
  Alt 25. Jun 2003, 16:58
Also ich hab die Deklaration aus Unit 2 raus kopiert und hinter "Implementation" geschrieben(war doch gemeint oder???)
Auf jeden Fall sagt er mir jetzt, dass Movie (beim write-Befehl) undefiniert sei!
HILFE!!!
Danke schon ma!
Always remember:'Let the Wookiee win!'
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 25. Jun 2003, 17:04
Moin Chewbacca,

Zitat von Niko:
in den interface-Abschnitt verschieben
Zitat von Chewbacca:
und hinter "Implementation" geschrieben(war doch gemeint oder???)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewbacca

Registriert seit: 5. Jun 2003
Ort: Gau-Bischofsheim
51 Beiträge
 
Delphi 3 Standard
 
#7
  Alt 25. Jun 2003, 17:22
Also wahrscheinlich bin ich einfach zu blöd, aber ich bekoomm das nich so gebacken, dass alles so steht, dass es voneinandr abhängig sein kann. Also Movie in Interface Folglich TDatei vornedran und dann aber auch TFilm auch irgendwie so damit das funzt.....*vordummheitbrumm*
Bitte helft einem verblödetem Wookiee!!!
Always remember:'Let the Wookiee win!'
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#8
  Alt 25. Jun 2003, 17:31
Sorry, die Deklaration von TDatei muss ebenfalls mit in den interface-Abschnitt.

Der Quellcode in Unit1 sollte jetzt so aussehen (Auszug):
Delphi-Quellcode:
...

type
  TFilm = Record
    Filmtitel:String[50];
    Qualitaet:Byte;
    Humor:Byte;
    Spannung:Byte;
    Action:Byte;
    Medium:TCombobox;
    Datent:Byte;
  End;

  Type TDatei = File Of TFilm;
 
  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;
  Movie:TDatei;

implementation

{$R *.DFM} 

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

...
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9
  Alt 25. Jun 2003, 17:32
Moin Chewbacca,

im Prinzip müsstest Du's haben:

Damit Du von beiden Units zugreifen kannst, muss es im Interfaceabschnitt stehen

Um Variablen deklarieren zu können, muss erst der Typ bekannt sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewbacca

Registriert seit: 5. Jun 2003
Ort: Gau-Bischofsheim
51 Beiträge
 
Delphi 3 Standard
 
#10
  Alt 25. Jun 2003, 17:32
Kann es sein, dass ihm nicht gefällt, dass Unit1 Unit2 und Unit2 Unit1 benutzt?
Always remember:'Let the Wookiee win!'
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:18 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