![]() |
HexControls
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP-ler!
Ich habe mir erlaubt, mal paar Klassen für einen Hexeditor zu bauen. Habe unter dem oben angegebenen Titel nix dazu hier gefunden und gesdacht, das könnte ein sinnvoller Beitrag sein, nachdem ich das Anfängerbuch "Delphi für Kids durchgearbeitet habe. Konstruktive Kritik ist jederzeit willkommen. Ich kann nur dabei lernen. Danke! Die aktuelle Version der HexControls findet Ihr unten in diesem Beitrag: Ich habe in dieser Version auch noch mein Testprojekt Hed.dpr dazugepackt. Hoffentlich könnt Ihr bissl was damit anfangen! AMD_Prozessor |
Re: HexControls
hm.. das hier gehört eher in die Sparte "OpenSource". Und bitte immer die Dateien direkt anhängen :mrgreen:
|
Re: HexControls
Danke für den Tipp. Wie krige ich das jetzt dorthin? Oder müssen das jetzt die Moderatoren erldigen. Dann bitte ich die Verantwortlichen um diesen Dinst! Das nächste Mal weiß ich das dann. Danke!
Also, hoffentlich könnt Ihr mit den HexControls was anfangen! |
Re: HexControls
Ich schiebe es dort hin und du hängst die Kompionenten gepackt als Anhang an. Eine kleine Beschreibung daz, was sie machen und wie man sie benutzt und das war es dann. ;)
|
Re: HexControls
Perfekt, Danke! Die Dateien kommen dann irgendwann nächste Woche. Bin jetzt erst mal weg und muss die Beschreibung ja auch noch machen. Bis dann!
|
Re: HexControls
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP-ler!
Hier ist nun die aktuelle Version meiner HexControls. Anregungen, die zu besserem Programmierstil führen oder dieses Projekt praxistauglicher machen, sind jederzeit willkommen. Aber bitte nur konstruktive Tipps, die auch wirklich weiter helfen. HexControls - Unit Diese Unit enthält die Klassen: THexEdit Ein Eingabefeld für hexadezimale Ziffern THexTable Ein Gitter, abgeleitet von TStringGrid - zur Eingabe und Bearbeitung von HexCodes TCaptions Eine Beschriftungskomponente zur Anzeige der hexadezimalen Zeilenadresse. Siehe - Demo. TAscTable Eine Ascii Tabelle, sowohl zur Anzeige - der Ascii Codes in Hexeditoren, als auch für Anzeige und Gewinnung von Zeichen im Ascii-Code. Klasse THexEdit :
Delphi-Quellcode:
Klasse THexTable:
THexEdit = class(TEdit)
private FDigits: Integer; FCalcWidth: Boolean; FOnChange: TNotifyEvent; function GetLength: Integer; procedure SetLength(value: Integer); procedure SetCalcWidth(value: Boolean); public constructor Create(AOwner: TComponent); override; procedure Change; override; procedure DoKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); //Anzahl editierbare Bytes property CountBytes: Integer read GetLength write SetLength; //TRUE -> Breite passt sich der Byteanzahl an property CalcWidth: Boolean read FCalcWidth write SetCalcWidth; property OnChange: TNotifyEvent read FOnChange write FOnChange; end;
Delphi-Quellcode:
Klasse TCaptions :
THexTable = class(TStringGrid)
private FAscTable: TAscTable; FCaptions: TCaptions; FCount: Integer; FCurrRow: Integer; FFileName: String; FHexBuf: String[2]; FKeyCode: word; FOnChange: TNotifyEvent; FRange: array[0..1] of Integer; FShift: TShiftState; function getByte(Index: Integer): String; function getValue(Index: Integer): Byte; procedure SetCaptions(value: TCaptions); procedure setAscTable(value: TAscTable); procedure setByte(Index: Integer; value: String); procedure setValue(Index: Integer; value: Byte); public constructor Create(AOwner: TComponent); override; procedure Change; virtual; procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); //Aus Datei laden procedure LoadFromFile(Name: String); //In Datei speichern procedure SaveToFile(Name: String); //Speicherbereich in Hextabelle procedure LoadFromMemory(memaddr: Pointer; Size: Integer); //Inhalt Hextabelle in Speicherbereich procedure SaveToMemory(memaddr: Pointer; Size: Integer); //Ereignis Zelle slektiereen verarbeiten procedure DoSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); //Verbundene Ascii Tabelle property AscTable: TAscTable read FAscTable write setAscTable; //Hexbytes in der Tabelle property Bytes[Index: Integer]: String read getByte write SetByte; //Bytes in der Tabelle property Value[Index: Integer]: Byte read getValue write SetValue; //Beschriftungsliste, Siehe Demo. property Captions: TCaptions read FCaptions write SetCaptions; property Count: Integer read FCount write FCount; property OnChange: TNotifyEvent read FOnChange write FOnChange; end;
Delphi-Quellcode:
Klasse TAscTable:
TCaptions = class(TPanel)
private FCaptions: TStringList; FLabel: array of TLabel; FOffsets: array of Integer; function getCount: Integer; function GetItem(Index: Integer): String; function GetLabel(Index: Integer): String; function GetOffsets(Index: Integer): Integer; procedure SetItem(Index: Integer; value: String); procedure SetLabel(Index: Integer; value: String); procedure SetOffsets(Index: Integer; value: Integer); public constructor Create(AOwner: TComponent); override; //Adressen setzen. Siehe Demo. procedure SetCaptionsTo(ofCaptions: Integer); //Anzahl Beschriftungszeilen property Count: Integer read getCount; //Die einzelnen Beschriftungen (hier in Stringliste) //wahrscheinlich nicht so guter Programmierstil property Items[Index: Integer]: String read GetItem write SetItem; default; //Die einzelnen Beschriftungen (hier von Feld Components aus TControl) //(stilistisch wahrscheinlich besser) property Labels[Index: Integer]: String read GetLabel write SetLabel; //Vertikale Abstände zwischen den Beschriftungen property Offsets[Index: Integer]: Integer read GetOffsets write SetOffsets; end;
Delphi-Quellcode:
So, das soll als Beschreibung erst mal reichen. Alles Andere müsst Ihr aus dem Quelltext entnehmen
TAscTable = class(TStringGrid)
private FSelectable: Boolean; function getChar(Index: Integer): Char; procedure SetChar(Index: Integer; value: Char); procedure SetSelectable(value: Boolean); public constructor Create(AOwner: TComponent); override; procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); //Interner Zeichensatz. Siehe Demo. procedure SetChars(Language: Integer); //aktuelle Zeichen zB. in Hex-Editoeren. Siehe Demo. property Chars[Index: Integer]: Char read getChar write SetChar; //-------------------------------------------------------------------------- property Selectable: Boolean read FSelectable write SetSelectable; //In Hexeditoren auf false setzen. Nur in der Hextabelle darf die Position //geändert werden. Siehe Demo. end; oder mit dem Test des Demos rausfinden. Speichert die entzippten Dateien einfach in Eurem Projekt- ordner und übersetzt die Datei hexCtrls.dpr Konstruktive Kritik ist jederzeit willkommen. Ich kann dabei nur lernen. Ansonsten viel Spass mit den Klassen. AMD_Prozessor |
Re: HexControls
Moin moin, wenn du [del phi] ... [/del phi] (ohne leerzeichen) um deinen code rundrum schreibst, wird er schön formatiert.
Außerdem ist es hier in den Softwaresparten üblich, den Code selbst immer im ersten Beitrag zu halten, den du mit der [edit]-schaltfläche darüber jederzeit ändern kannst. Dann kann jeder immer die aktuellste Version auf einen Blick erkennen, und muss sich nicht erst durch die Diskussion kämpfen bzw. blättern. Das hätte auch extra dabeigestanden, wenn du selbst einen Thread in der entsprechenden Sparte eröffnet hättest ;) |
Re: HexControls
Außerdem wäre es schön, wenn du in dr Demo auf zusätzliche Komponenten verzichten würdest. TDBDock kennt mein Delphi 6 Personal zum Beispiel nicht. Desweiteren fehlt die Unit Convert.pas.
|
Re: HexControls
Hallo, da bin ich mal wieder!
Zitat:
Zitat:
TB2Dock und die anderen TB2000 Kompos sind jetzt raus. Ich hatte einfach irgendein Projekt genommen, von dem aus ich die Hexcontrols instanziiert habe. Da waren aber auch die Toolbar2000 Kompos drin. Aus der Convert Unit verwende ich die Funktionen LongintToHex und ByteToHex. Außerdem verwende ich die Delphi Funktion BinToHex, die in meinem Delphi 7 definiert ist. Da ich nicht weiß, wie das mit früheren Delphi Versionen aussieht, hier eine mögliche Implementation, die die Funktion ByteToHex aus meiner Convert Unit verwendet, und die besagtr Prozedur entsprechend Delphi7- Hilfe implementiert, falls sie in früheren Versionen fehlt:
Delphi-Quellcode:
Außerdem habe ich mal mein zweites Testprojekt dazugetan, bestehend aus den drei Dateien:
procedure BinToHex(var BinBuffer,HexBuffer: PChar; Bufsize Integer);
var i: Integer; begin while BinBuffer^[i]<>#0 do begin HexBuffer^[i] := ByteToHex(BinBuffer^[i]); inc(i); end; HexBuffer^[i] := #0; end; - hed.dpr (Das Testprojekt) - main.pas (Die Formular-Unit) - main.dfm (Das Formular) Ich hoffe, Ihr könnt die HexContols jetzt übersetzen und verwenden! AMD_Prozessor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 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