Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi strtohex (https://www.delphipraxis.net/93873-strtohex.html)

ReVenGer 12. Jun 2007 21:39

Re: strtohex
 
Delphi-Quellcode:
Procedure stringtohex;
var
  fs: TFileStream;
  lpBuffer: array of Byte;
  s: string;
  x: Integer;
 begin
   fs := TFileStream.Create('test.gam', fmOpenRead);
  try
    if (fs.Size > 0) then
    begin
      SetLength(lpBuffer, fs.Size);
      fs.Read(lpBuffer[0], fs.Size);
    end;
    s := '';
  for x := Low(lpBuffer) to High(lpBuffer) do
  begin
    s := s + IntToHex(lpBuffer[x], 2) + ' ';
  end;
   Memo1.Lines.Add(s);
  finally
    fs.Free;
  end;
 end;
Wenn mir das jetzt nochmal einer erklären könnte habt ihr mich glücklich gemacht.

[Error] Unit2.pas(71): Undeclared identifier: 'Memo1'
[Error] Unit2.pas(71): Missing operator or semicolon
[Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit2.pas'

Verstehe das nicht,warumdas mit showmessage geht, aber das memo nicht finden kann.

marabu 13. Jun 2007 06:10

Re: strtohex
 
Guten Morgen.

StrToHex() ist bei dir eine unabhängige Prozedur und keine Methode der Form. Das ist auch richtig so, aber du kannst aus dieser Prozedur nicht auf Eigenschaften der Form (z.B. Memo1) zugreifen. Alle Ein- und Ausgaben deiner Prozedur sollten über entsprechende Parameter gesteuert werden.

Eine sinnvolle Signatur wäre:

Delphi-Quellcode:
procedure HexDump(const fn: TFileName; s: TStrings);
Ein Aufruf könnte so aussehen: HexDump('C:\highscore.dat', Memo.Lines);

Für die Konvertierung von Bytes in ihre Hex-Darstellung gibt es die Funktion BinToHex().

Grüße vom marabu

ReVenGer 13. Jun 2007 06:31

Re: strtohex
 
danke erstmal für die antwort,
aber wenn ich es so aufrufe, bekomme ich den undeclared identifier opendialog1.

Delphi-Quellcode:
stringtohex(OpenDialog1.FileName, Memo1.Lines.add);

marabu 13. Jun 2007 07:59

Re: strtohex
 
Vermutlich hast du an der Stelle, an der du den Aufruf von StrToHex() machst, keinen Zugriff auf OpenDialog1. Kannst du den Aufruf mal in seinem Kontext zeigen?

ReVenGer 13. Jun 2007 08:40

Re: strtohex
 
Ich hätte bei Assembler bleiben sollen :)

Delphi-Quellcode:
Procedure stringtohex(const fn: TFileName; sg: tStrings);
var
  fs: TFileStream;
  lpBuffer: array of Byte;
  x: Integer;
  s: string;
 begin
   fs := TFileStream.Create('test.gam', fmOpenRead);
  try
    if (fs.Size > 0) then
    begin
      SetLength(lpBuffer, fs.Size);
      fs.Read(lpBuffer[0], fs.Size);
    end;
    s := '';
  for x := Low(lpBuffer) to High(lpBuffer) do
  begin
    s := s + IntToHex(lpBuffer[x], 2) + ' ';
   end;
  // showmessage(s);
       finally
    fs.Free;
  end;
  end;


procedure TForm2.N3Click(Sender: TObject);
begin
 opendialog1.execute;
 HexDump(OpenDialog.FileName, Memo.Lines);
 //showmessage(opendialog1.filename);   //Pfad
end;

Klaus01 13. Jun 2007 08:42

Re: strtohex
 
Delphi-Quellcode:
HexDump(OpenDialog1.FileName, Memo.Lines);
sollte es nicht openDialog1 heißen und nicht openDialog?

Grüße
Klaus

ReVenGer 13. Jun 2007 08:48

Re: strtohex
 
sorry, hatte ich hinterher korrigiert.
trotzdem sagt er mir undeclared identifier.

ich versteh das nicht, in assembler konnte ich immer direkt auf sachen zugreifen, ohne umwege.

marabu 13. Jun 2007 08:50

Re: strtohex
 
Manchmal möchte man den OpenDialog abbrechen:

Delphi-Quellcode:
procedure TForm2.N3Click(Sender: TObject);
begin
  with OpenDialog1 do
    if Execute then
      StrToHex(FileName, Memo.Lines);
end;
Freundliche Grüße

halinchen 13. Jun 2007 14:14

Re: strtohex
 
Zitat:

Zitat von ReVenGer
trotzdem sagt er mir undeclared identifier.

Und du bist dir sicher, das es den auch wirklich gibt? Eventuell hast du ihn gelöscht oder umbenannt.

marabu 13. Jun 2007 16:51

Re: strtohex
 
Hallo,

ich vermute, dass die Komponente OpenDialog1 auf einer anderen Form als Form2 zu finden ist. Falls sich OpenDialog1 auf Form1 befindet, dann musst du deinen Quellcode so abändern:

Delphi-Quellcode:
procedure TForm2.N3Click(Sender: TObject);
begin
  with Form1.OpenDialog1 do
    if Execute then
      StrToHex(FileName, Memo.Lines);
end;
Damit würde dann dein Code übersetzt, aber elegant ist das nicht. Da du aber noch schwer mit Delphi kämpfst, bringt es dir zumindest eine "schnelles" Erfolgserlebnis. Pascal und seine Nachkommen sind block-orientierte Sprachen und die Variablen haben einen Gültigkeitsbereich. Lies zu diesem Thema in der Online-Hilfe das Topic "Delphi Sprachreferenz | Syntaktische Elemente | Blöcke und Gültigkeitsbereich" und du findest bestimmt einen Einstieg.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:15 Uhr.
Seite 3 von 4     123 4      

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