Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Вниз
ищу компонент типа hexview Найти похожие ветки
← →
redlord (2004-12-19 21:01) [0]Всем привет
народ где можно взять компонент для работы с данными в 16ричном представлении
(основные возможности отображение и редактирование)
← →
begin...end © (2004-12-19 21:05) [1]> redlord (19.12.04 21:01)
А чем не подходит обычный TEdit ?
← →
redlord (2004-12-19 21:19) [2]маленькое уточнение:
отображатся должно не одно число а порядка нескольких сотен
← →
Leonid Troyanovsky © (2004-12-19 21:29) [3]
> redlord (19.12.04 21:19) [2]
> отображатся должно не одно число а порядка нескольких сотен
TDrawGrid.
Уточнение: OnDrawCell, OnGet/SetEditText.
--
С уважением, LVT.
← →
begin...end © (2004-12-19 21:31) [4]> [2] redlord (19.12.04 21:19)
Шестнадцатеричное представление - это текст. Для отображения и редактирования текста есть много стандартных компонентов.
← →
Anatoly Podgoretsky © (2004-12-19 21:31) [5]Leonid Troyanovsky © (19.12.04 21:29) [3]
StringGrid
← →
Leonid Troyanovsky © (2004-12-19 21:38) [6]
> Anatoly Podgoretsky © (19.12.04 21:31) [5]
> StringGrid
Можно, конечно. Просто мне казалось, что hexview это
что-то для файлов. Тогда, спроецировав файл в память,
получаем готовый редактор.
--
С уважением, LVT.
← →
redlord (2004-12-19 21:39) [7]StringGrid, логично .
но может есть чтото более специализированное ?
← →
dimaxx © (2004-12-20 00:56) [8]http://www.mirkes.de/en/delphi/vcls/hexedit.php - лучче не придумешь...
← →
Anatoly Podgoretsky © (2004-12-20 01:07) [9]Leonid Troyanovsky © (19.12.04 21:38) [6]
Одно другому не мешает, TstringGrid все равно его наследник, только уже специализированый для отобразения строк, чем конкретно и является 16ричное представление.
К тому же никто не заставляет загонять все полностью в ячейки. Ячейки использовать повторно.
← →
Cosinus © (2004-12-20 10:01) [10]
> Leonid Troyanovsky ©
...спроецировав файл в память, получаем готовый редактор ...
Можно немного поточнее, как это реализовать?
← →
Leonid Troyanovsky © (2004-12-20 14:32) [11]
> Cosinus © (20.12.04 10:01) [10]
> ...спроецировав файл в память, получаем готовый редактор
> Можно немного поточнее, как это реализовать?
И где я был неточен? :)
Ну, а если нужна реализация, можно, например, так
(за точность, на этот раз, не ручаюсь)
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids;
type
TBytes = array [0..MAXLONGINT-16] of Byte;
PBytes = ^TBytes;
TForm1 = class(TForm)
DrawGrid1: TDrawGrid;
Button1: TButton;
Button2: TButton;
procedure DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DrawGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
var Value: String);
procedure DrawGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
const Value: String);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
private
{ Private declarations }
a: PBytes;
mmf: THandle;
fsize: Longint;
frows, fcols: Longint;
ffixedcols, ffixedrows: Longint;
function GetValue(col, row: Longint): String;
procedure SetValue(col, row: Longint; const Value: String);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if Sender is TDrawGrid then
with TDrawGrid(Sender), Canvas do
begin
if (ACol >= FixedCols) and
(ARow >= FixedRows) then
TextRect( Rect,
Rect.Left,
Rect.Top,
GetValue(ACol, ARow));
end;
end;
procedure TForm1.DrawGrid1GetEditText(Sender: TObject; ACol,
ARow: Integer; var Value: String);
begin
with Sender as TDrawGrid do
Value := GetValue(ACol, ARow);
end;
procedure TForm1.DrawGrid1SetEditText(Sender: TObject; ACol,
ARow: Integer; const Value: String);
begin
with Sender as TDrawGrid do
SetValue(ACol, ARow,Value);
end;
procedure TForm1.DrawGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
CanSelect := ((ARow - ffixedrows) * fcols + (ACol - ffixedcols)) < fsize;
end;
function TForm1.GetValue;
var
idx: Longint;
begin
Result := "";
if Assigned(a) then
begin
idx := (row - ffixedrows) * fcols + (col - ffixedcols);
if idx < fsize then
Result := IntToHex(a[idx], 2);
end;
end;
procedure TForm1.SetValue;
var
idx: Longint;
abyte: Byte;
code: Longint;
begin
if Assigned(a) then
begin
idx := (row - ffixedrows) * fcols + (col - ffixedcols);
if (idx < fsize) and (Value <> "") then
begin
Val("$"+Value, abyte, code);
if code = 0 then
a[idx] := abyte
else
raise EConvertError.Create("Invalid char");
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
fs : TFileStream;
begin
fs := TFileStream.Create("file1.txt", fmOpenReadWrite);
fsize := fs.Size;
ffixedcols := DrawGrid1.FixedCols;
ffixedrows := DrawGrid1.FixedRows;
fcols := DrawGrid1.ColCount - DrawGrid1.FixedCols;
frows := fsize div fcols;
if fsize mod fcols <> 0 then
inc(frows);
DrawGrid1.RowCount := DrawGrid1.FixedRows + frows;
mmf := CreateFileMapping(fs.Handle,nil,PAGE_READWRITE,0,0,nil);
a := MapViewOfFile(mmf,FILE_MAP_WRITE , 0, 0, 0);
fs.Free;
DrawGrid1.Invalidate;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnMapViewOfFile(a);
CloseHandle(mmf);
fsize := 0;
a := nil;
DrawGrid1.Invalidate;
end;
--
С уважением, LVT.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.09;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.031 c