AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte HexControls
Thema durchsuchen
Ansicht
Themen-Optionen

HexControls

Ein Thema von AMD_prozessor · begonnen am 3. Apr 2006 · letzter Beitrag vom 2. Mai 2006
Antwort Antwort
AMD_prozessor
Registriert seit: 1. Apr 2006
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
Angehängte Dateien
Dateityp: zip hxctrls_171.zip (16,8 KB, 73x aufgerufen)
 
Danniolo
 
#2
  Alt 3. Apr 2006, 14:12
hm.. das hier gehört eher in die Sparte "OpenSource". Und bitte immer die Dateien direkt anhängen
  Mit Zitat antworten Zitat
AMD_prozessor
 
#3
  Alt 3. Apr 2006, 14:17
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!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#4
  Alt 3. Apr 2006, 14:32
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.
Michael
  Mit Zitat antworten Zitat
AMD_prozessor
 
#5
  Alt 3. Apr 2006, 14:44
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!
  Mit Zitat antworten Zitat
AMD_prozessor
 
#6
  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, 50x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

 
Delphi 2006 Professional
 
#7
  Alt 14. Apr 2006, 00:03
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
Lukas Erlacher
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 14. Apr 2006, 00:46
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.
Michael
  Mit Zitat antworten Zitat
AMD_prozessor
 
#9
  Alt 2. Mai 2006, 12:40
Hallo, da bin ich mal wieder!

Zitat von DGL-Luke:
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 Wink
Danke für die Tipps. Ich werde das in Zukunft beachten und habe auch gleich meinen Beitrag entsprechend geändert.

Zitat von Luckie:
Außerdem wäre es schön, wenn du in der Demo auf zusätzliche Komponenten verzichten würdest. TDBDock kennt mein Delphi 6 Personal zum Beispiel nicht. Desweiteren fehlt die Unit Convert.pas.
Up's, Tschuldigung. Oben findet Ihr jetzt die aktualisierte Version zuzüglich der Unit Convert.pas.

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:
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;
Außerdem habe ich mal mein zweites Testprojekt dazugetan, bestehend aus den drei Dateien:

- 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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.
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