Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.09;
Скачать: CL | DM;

Вниз

ищу компонент типа 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
3-1102664574
DimonNew
2004-12-10 10:42
2005.01.09
ClientDataSet &amp; UpdateSQL


1-1103717647
denis24
2004-12-22 15:14
2005.01.09
добавление итема в листбокс


1-1103631124
Cosinus
2004-12-21 15:12
2005.01.09
Есть ли стандартная функция для получения нижнего слова?


3-1102607156
hawkins
2004-12-09 18:45
2005.01.09
не работает IBSQLMonitor


3-1102295375
Gene Green
2004-12-06 04:09
2005.01.09
Interbase Client/Server. Срочно нужна помощь.