Delphi-PRAXiS
Seite 4 von 7   « Erste     234 56     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dynamische Arrays ... kleines Problem! (https://www.delphipraxis.net/74376-dynamische-arrays-kleines-problem.html)

sonicfire 3. Aug 2006 18:48

Re: Dynamische Arrays ... kleines Problem!
 
Dank Dir! :)

DGL-luke 3. Aug 2006 18:57

Re: Dynamische Arrays ... kleines Problem!
 
Kein Problem.

Streams sind zum verschieben von Datenmengen auf jeden Fall besser als file of-Konstruktionen.

Es gibt übrigens auch Delphi-Referenz durchsuchenTMemoryStream und Delphi-Referenz durchsuchenTResourceStream.

sonicfire 3. Aug 2006 19:12

Re: Dynamische Arrays ... kleines Problem!
 
Hmmm.. bekomme andauernd "undeclared Identifier" .... sehr merkwürdig, die sind doch definiert...

DGL-luke 3. Aug 2006 19:15

Re: Dynamische Arrays ... kleines Problem!
 
Zeig doch ein wenig Code.

Am besten den, in dem der Fehler auftritt

sonicfire 3. Aug 2006 19:22

Re: Dynamische Arrays ... kleines Problem!
 
Unter "Implementation" :
Delphi-Quellcode:
Type
    TSmallIntArray = Array of SmallInt;
end;
..muss hier kein record hin?(Hier habe ich garantiert noch etwas verwechselt) :oops:

Ansonsten:
Delphi-Quellcode:
(...)

   procedure SaveWavFileClick(Sender: TObject);
    procedure DisableItems(Status: Boolean);
    procedure KeyNoteClickCheck(Sender: TObject);
    Procedure LoadTheWave(FileName: String; out Value: TSmallIntArray; Start: Integer = 0);

  private
    { Private declarations }
  public
   KeysToRecord: Array[0..11] of Integer;
   function ValidateInput(Itemobject: String; minval, maxval: Integer): String;
    { Public declarations }
  end;

(...)
Procedure LoadTheWav: Identifier redeclared usw

:|

DGL-luke 3. Aug 2006 19:28

Re: Dynamische Arrays ... kleines Problem!
 
1. der type muss ins interface, nicht in implementation

2. es sollte in ein EINER unit nur EINMAL type geben ! alles andere führt potenziell zu schlimmen Sachen....

3. identifier redeclared kommt, weil du es im implementation abschnitt deklarierst, im interface aber schon verwedest... ja, die fehlermeldung ist ein wenig irreführend...

sonicfire 3. Aug 2006 19:35

Re: Dynamische Arrays ... kleines Problem!
 
Vielen Dank!! :)

EDIT: Hab es :oops: :lol:

sonicfire 3. Aug 2006 20:15

Re: Dynamische Arrays ... kleines Problem!
 
Okayyyy.... alllso einmal muss ich doch noch was fragen! :oops:

Und zwar:
Delphi-Quellcode:
Procedure TForm1.LoadTheWave(FileName: String; out Value: TSmallIntArray;Start: Integer = 0);
begin
  with TFilestream.Create(Filename, fmOpenRead) do
    try
      Position := Size;
      setlength(Value, Size-Position);
      ReadBuffer(Value,length(Value));
    finally
      Free;
    end;
end;

Procedure TForm1.SaveTheWave(Filename: string; Value: TSmallIntArray);
begin
  with TFileStream.Create(Filename, fmOpenWrite) do
    try
      WriteBuffer(Value,length(Value)*sizeof(SmallInt));
    finally
      Free;
    end;
end;

Procedure TForm1.ProcessWave(FileName: String);
var
    Wavbuffer: TSmallIntArray;
    Header: TWaveHeader;
    i: Integer;

begin
  LoadTheWave(Outputfile.Text, Wavbuffer, sizeof(Header)+1); //laden des waves
  for i := 0 to high(Wavbuffer) do // testweise stille einfügen
  begin
    Wavbuffer[i] := 0;
  end;
  SaveTheWave(Outputfile.Text, Wavbuffer);
end;
Siehe "ProcessWave(FileName: String);"

Ich lade also das wav-file, modifiziere es und speichere es wieder ...
allerdings hat sich rein gar nichts im WAV file verändert? :)

Der_Unwissende 3. Aug 2006 20:30

Re: Dynamische Arrays ... kleines Problem!
 
Zitat:

Zitat von sonicfire
Delphi-Quellcode:
Procedure TForm1.LoadTheWave(FileName: String; out Value: TSmallIntArray;Start: Integer = 0);
begin
  with TFilestream.Create(Filename, fmOpenRead) do
    try
      Position := Size;
      setlength(Value, Size-Position);
      ReadBuffer(Value,length(Value));
    finally
      Free;
    end;
end;

Schau dir mal an was du hier tust! Du setzt Position := Size und dann die Länge von Value auf Size - Position, anders gesagt, du setzt die Länge von Value auf 0.
Wenn du 0 Byte zu schreiben hast, nun ja, dann wird natürlich auch nie irgendwas geschrieben...

Gruß Der Unwissende

[EDIT]
PS: Du solltest deine FileStreams noch etwas anders öffnen. Wenn du etwas zum Lesen öffnest, solltest du eine Schreibsperre setzen (sonst könntest du irgendwann das Problem haben, dass jmd. schreibt während du liest) und wenn du schreibst, dann kannst du gleich exklusiv sperren.
Delphi-Quellcode:
// zum Lesen:
TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);

// zum Schreiben:
TFileStream.Create(FileName, fmOpenRead or fmShareExclusive);
[/EDIT]

sonicfire 3. Aug 2006 20:49

Re: Dynamische Arrays ... kleines Problem!
 
Danke! Aber wieso ein "or" dazwischen? Nicht: fmOpenRead, fmSowieso?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.
Seite 4 von 7   « Erste     234 56     Letzte »    

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