Thema: HexControls

Einzelnen Beitrag anzeigen

AMD_prozessor

Registriert seit: 1. Apr 2006
9 Beiträge
 
#6

Re: HexControls

  Alt 13. Apr 2006, 16:51
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:
  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;
Klasse THexTable:
Delphi-Quellcode:
  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;
Klasse TCaptions :
Delphi-Quellcode:
  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;
Klasse TAscTable:
Delphi-Quellcode:
  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;
So, das soll als Beschreibung erst mal reichen. Alles Andere müsst Ihr aus dem Quelltext entnehmen
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
Angehängte Dateien
Dateityp: zip hxctrls_247.zip (11,0 KB, 51x aufgerufen)
  Mit Zitat antworten Zitat