![]() |
Re: strtohex
Delphi-Quellcode:
Wenn mir das jetzt nochmal einer erklären könnte habt ihr mich glücklich gemacht.
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; [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. |
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:
Ein Aufruf könnte so aussehen: HexDump('C:\highscore.dat', Memo.Lines);
procedure HexDump(const fn: TFileName; s: TStrings);
Für die Konvertierung von Bytes in ihre Hex-Darstellung gibt es die Funktion BinToHex(). Grüße vom marabu |
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);
|
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?
|
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; |
Re: strtohex
Delphi-Quellcode:
sollte es nicht openDialog1 heißen und nicht openDialog?
HexDump(OpenDialog1.FileName, Memo.Lines);
Grüße Klaus |
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. |
Re: strtohex
Manchmal möchte man den OpenDialog abbrechen:
Delphi-Quellcode:
Freundliche Grüße
procedure TForm2.N3Click(Sender: TObject);
begin with OpenDialog1 do if Execute then StrToHex(FileName, Memo.Lines); end; |
Re: strtohex
Zitat:
|
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:
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.
procedure TForm2.N3Click(Sender: TObject);
begin with Form1.OpenDialog1 do if Execute then StrToHex(FileName, Memo.Lines); end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz