Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 Uhr.
Seite 1 von 2  1 2      

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