Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi StreamDatei öffnen ohne OpenDialog.Execute (https://www.delphipraxis.net/32354-streamdatei-oeffnen-ohne-opendialog-execute.html)

moperswings 22. Okt 2004 08:01


StreamDatei öffnen ohne OpenDialog.Execute
 
Hallo,

ich habe eine StreamDatei gespeichert unter einem Namen, der in einem
Edit-Feld eingetragen wurde:

pfad := Edit1.Text + '.dat';
Stream := TFileStream.Create(pfad, fmCreate);

Ich umgehe so den SaveDialog.Execute.

Wenn ich aber aus einer FileListBox den Datensatz auswähle und zurück
zu dem Edit-Feld schicke, was muss ich machen, das die dazugehörigen Daten geöffnet werden, ohne OpenDialog.Execute Abfrage?
Der umgekehrte Weg funktioniert nicht so wie die Speicherung :-(
Hat jemand eine Idee, was ich machen muss?

Viele Grüsse

Dirk

Luckie 22. Okt 2004 08:04

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Warum sollte der umgekehrte Weg nicht gehen? Wenn der Pfad und Dateiname stimmt, sehe ich da kein Problem.

"Nicht gehen" ist übrigens eine sehr hilfreiche Fehlerbeschreibung.

moperswings 22. Okt 2004 08:24

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Hallo Michael,

warum es umgekehrt nicht funktioniert, weiss ich nicht:

meine Procedure wäre (jetzt aus dem Kopf):

Delphi-Quellcode:
dsmax: Maximale Anzahl Datensätze
dsOpen: Datensätze öffnen (Edit1.Text := Feld)

pfad := Edit1.Text
Stream := TFileStream.Create(pfad, fmOpenRead);
Stream.ReadBuffer(dsmax, SizeOf(Word));
for i := dsmax - 1 downto 0 do
Stream.ReadBuffer(Daten[i], SizeOf(TDaten);
dsOpen;
Stream.Free;
Vielleicht siehst Du ja jetzt den Fehler!
Bekommst auch im MT ein Bier von mir!!!

Dirk

[edit=Luckie]Delphi-Tags eingefügt. Beim nächsten mal bitte selber machen. Mfg, Luckie[/edit]

Luckie 22. Okt 2004 08:28

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Du musst eine Struktur angeben als Buffer für ReadBuffer und nicht die Anzahl, die du lesen willst. Und als Größe eben die Größe der Struktur. Dann gehst du die Datei so lange durch und rufst in der Schleife ReadBuffer auf, bist du am Ende der Datei bist.

moperswings 22. Okt 2004 08:34

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Und wie schreibe ich diese Struktur?
Ich stehe ein wenig auf dem Schlauch!

Dirk

Luckie 22. Okt 2004 08:37

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Du musst doch wissen, wie deine Daten aussehen die du lesen willst. Wie schreibst du denn rein?

moperswings 22. Okt 2004 08:44

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Delphi-Quellcode:
procedure TForm1.save1();
var
  i: integer;
  pfad: string;
begin
  pfad := Edit1.Text + '.dat';
  Stream := TFileStream.Create(pfad, fmCreate);
  dsSave;
  Stream.WriteBuffer(dsmax, SizeOf(Word));
  for i := dsmax - 1 downto 0 do
  Stream.WriteBuffer(Daten, SizeOf(TDaten));
  Stream.Free,
end;
Dirk

Luckie 22. Okt 2004 08:47

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Und wie sieht Daten aus? Und was steht nachher bei dir in Daten drinne? Und wie äußert sich das "nicht funktionieren"?

Gibt doch einfach mal alle Informationen, die relevant sind. :roll:

jim_raynor 22. Okt 2004 08:52

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
VIelleicht solltest du einfach mal sagen, was denn das Problem ist? Kommt ne Fehlermeldung oder sonstwas? :wall:

moperswings 22. Okt 2004 09:15

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Der Rest vom Code der wichtig sein könnte

Delphi-Quellcode:
Implementierung
   Type
   TDaten = record;
   Feld1, Feld1: String[20];
   end;
var
   Stream: TFileStream;
   Daten: array of TDaten;
   Index: Byte = 0;
   dsmax: Word = 1;

procedure dsSave
begin
   with Daten[Index] do begin
   Feld1 := Edit1.Text; // bei dsOpen ist es umgekehrt
   Feld2 := Edit2.TExt;
   end;
end;

procedure TForm
begin
   SetLength(Daten, dsmax);
end;

Wenn ich die Datei in der FileListBox anklicke, wird der DateiName an Edit1 geschickt, der Rest der Felder bleibt leer und es geht nur noch
mit Anfang und Fehlermeldung[OK] weiter.
Die Fehlermeldung habe ich jetzt leider nicht zur Verfügung.

Dirk

Luckie 22. Okt 2004 09:20

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Zitat:

Zitat von moperswings
wird der DateiName an Edit1 geschickt

Und der Pfad?

fkerber 22. Okt 2004 09:20

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Hi!

Zitat:

Zitat von moperswings
Wenn ich die Datei in der FileListBox anklicke, wird der DateiName an Edit1 geschickt, der Rest der Felder bleibt leer und es geht nur noch
mit Anfang und Fehlermeldung[OK] weiter.
Die Fehlermeldung habe ich jetzt leider nicht zur Verfügung.

Was meinst du mit, es geht nur noch mit Anfang weiter?
Und ohne Fehlermeldung wirds für uns schwierig, meine Wahrsagerkugel ist leider grad zu Inspektion :mrgreen:

Ciao Frederic

moperswings 22. Okt 2004 09:29

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Der pfad ist nur der String, der sich aus dem Edit.Text Eintrag ergibt!
Die Datei wird dann unter dem Verzeichnis gespeichert, in dem das Delphi
Programm steht.

Fehlermeldung habe ich deshalb nicht, weil ich nicht zuhause an meinem Rechner bin.
Ich dachte auch nicht, dass das so ein Problem wird, den wenn ich den

Delphi-Quellcode:
if OpenDialog.Execute = true then begin
davor setzte, funktioniert ja alles.

Dirk

moperswings 22. Okt 2004 09:36

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Kann es sein, dass ich den pfad irgendwie als FileName angeben muss?

Dirk

jim_raynor 22. Okt 2004 10:16

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Was willst du mit dem OpenDialog. Es ist doch völlig egal woher der Dateiname bei TFileStream.Create kommt. Machst du etwa sowas TFileStream.Create(OpenDialog1.Filename,...) ? Dann ist es natürlich fatal, wenn du den Dialog nicht vorher aufrufst, da dann Filename nicht gefüllt wird.

Aber du kannst statt OpenDialog1.Filename einfach den Dateinamen übergeben, der in der Listbox ausgewählt wurde. :roll:

Sorry, aber so wie du dich hier anstellst, können wir dir nur schwer helfen. Ehrlich gesagt, weiss ich immer noch nicht so recht, wo eigentlich das Problem liegt.

Luckie 22. Okt 2004 10:25

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Zitat:

Zitat von moperswings
Der pfad ist nur der String, der sich aus dem Edit.Text Eintrag ergibt!

Ja, sehr schön. Du hast aber nur gesagt, dass du den dateinamen aus einer FileListbox bekommst. Und ich wollte wissen, wo du den Pfad hernimmst, wenn überhaupt. :roll:

moperswings 25. Okt 2004 10:49

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Ich gehe vom Drive-Combo <runter> bis zur FileListBox!

Dirk

moperswings 1. Nov 2004 08:49

Re: StreamDatei öffnen ohne OpenDialog.Execute
 
Lösung:

Delphi-Quellcode:
procedure save1
begin
        pfad := extractfilepath(paramstr(0));
        pfad := pfad + Edit1.Text + '.dat';
        Stream := TFileStream.Create(pfad, fmCreate);
   ...

procedure TForm1.FileListBox1Click(Sender: TObject);
var
  s:string;
   i: integer;
begin
    s := Filelistbox1.filename;
    Edit1.text := ExtractfileName(s);
    Stream := TFileStream.Create(s, fmOpenRead);
        Stream.ReadBuffer(dsmax, SizeOf(Word));
        for i := dsmax - 1 downto 0 do
        Stream.ReadBuffer(Daten[i], SizeOf(TDaten));
        dsOpen;
        Stream.Free;
        Stream := nil;
end;
Ereignisse:
FileListBox1:OnClick FileListBox1Click


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