Delphi-PRAXiS
Seite 6 von 6   « Erste     456   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler: Undefinierter Bezeichner! Wo liegt das Problem? (https://www.delphipraxis.net/134193-fehler-undefinierter-bezeichner-wo-liegt-das-problem.html)

Satty67 2. Jun 2009 22:38

Re: Fehler: Undefinierter Bezeichner! Wo liegt das Problem?
 
Zum einen würde ich FreeAndNil(FileStream) aufrufen, wenn du später FileStream = NIL prüfst. Meiner Erfahrung nach ist nicht 100% garantiert, das Free auch das Objekt auf NIL setzt.

Dann wie schon vorgeschlagen, die Verwendung von globalen Variablen eingrenzen.

Eine Möglichkeit wäre, die procedure StopRec in eine function StopRec zu wandeln (wie schon vorgeschlagen), die dann den Zeiger zurückgibt
Delphi-Quellcode:
function TForm1.StopRec : TFileStream;
[...]
Result := FileStream;

// und in StatusProc
if (FileStream = nil) and (RecordStatus=True) then
      FileStream := Form1.StopRec;
StopRec ist eine Methode der Klasse TForm1
StatusProc ist eine freie Procedure
FileStream eine globale Variable

Ich muss ehrlich zugeben, das ich immer noch etwas am stochern bin, weil ich doch nicht so gut bin, da 100% durchzusteigen.

€: Wenn mich nicht alles täuscht, würde der Methode "StopRec" eher ein Name wie "OpenFileStream" stehen. Zumindest stolper ich immer über den Namen, der nicht zur Aufgabe passt.

Gausi 3. Jun 2009 09:18

Re: Fehler: Undefinierter Bezeichner! Wo liegt das Problem?
 
StatusProc bekommt ja die Daten zum Speichern. Je nachdem, was der User durch vorheriges Knöpfchendrücken gewünscht hat, sollen die Daten gespeichert oder verworfen werden. Also:
Delphi-Quellcode:
procedure StatusProc(buffer: Pointer; len, user: DWORD); stdcall;
begin
  // Ok, bass.dll hat neue Titel-Informationen bekommen
  // das sollte man wohl immer machen
  if (buffer <> nil) and (len = 0) then
      SendMessage(win, WM_INFO_UPDATE, 8, DWORD(PChar(buffer)))
  else
  begin
    // Daten zum Aufnehmen angekommen
    If UserWillAufnehmen then
    begin
      // Sicherheitsabfrage - ist ein FileStream vorhanden,um die Daten zu speichern?
      if assigned(FileStream) then
      begin
        if (buffer = nil) then
          FreeAndNil(FileStream); // Aufnahme beenden
        else
          FileStream.Write(buffer^, len); // Daten speichern
      end;
    end else
      // nichts machen, user will nicht aufnehmen.
  end;
end;
Das Erzeugen des FileStreams würde ich beim ButtonClick machen, also so:
Delphi-Quellcode:
procedure TForm1.ButtonStartAufnahmeClick(Sender: TObject);
begin
  UserWillAufnehmen := True;
  FileStream := TFileStream.Create ... // usw., Zeug aus der StopRec
end;
Und beim Stoppen dann in etwa sowas:
Delphi-Quellcode:
procedure TForm1.ButtonStoppAufnahmeClick(Sender: TObject);
begin
  UserWillAufnehmen := False;
  FreeAndNil(FileStream);
end;

AlexII 3. Jun 2009 17:56

Re: Fehler: Undefinierter Bezeichner! Wo liegt das Problem?
 
Wow Gausi, danke :thumb:

Ich teste das mal, melde mich dann. :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:25 Uhr.
Seite 6 von 6   « Erste     456   

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