diff --git a/examples/lazresexplorer/remainunit.lfm b/examples/lazresexplorer/remainunit.lfm index f37d037cd5..ad2b457d18 100644 --- a/examples/lazresexplorer/remainunit.lfm +++ b/examples/lazresexplorer/remainunit.lfm @@ -21,7 +21,7 @@ object reMainForm: TreMainForm Images = ImageList1 ReadOnly = True TabOrder = 0 - OnClick = TreeView1Click + OnSelectionChanged = TreeView1SelectionChanged Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips] end object PageControl1: TPageControl @@ -29,9 +29,9 @@ object reMainForm: TreMainForm Height = 506 Top = 56 Width = 475 - ActivePage = tabString + ActivePage = tabBinary Align = alClient - TabIndex = 0 + TabIndex = 2 TabOrder = 1 object tabString: TTabSheet Caption = 'String' @@ -67,6 +67,508 @@ object reMainForm: TreMainForm Center = True end end + object tabBinary: TTabSheet + Caption = 'Binary' + ClientHeight = 478 + ClientWidth = 467 + inline SynEdit1: TSynEdit + Left = 0 + Height = 478 + Top = 0 + Width = 467 + Align = alClient + Font.Height = -13 + Font.Name = 'Courier New' + Font.Pitch = fpFixed + Font.Quality = fqNonAntialiased + ParentColor = False + ParentFont = False + TabOrder = 0 + Gutter.Width = 57 + Gutter.MouseActions = <> + RightGutter.Width = 0 + RightGutter.MouseActions = <> + Keystrokes = < + item + Command = ecUp + ShortCut = 38 + end + item + Command = ecSelUp + ShortCut = 8230 + end + item + Command = ecScrollUp + ShortCut = 16422 + end + item + Command = ecDown + ShortCut = 40 + end + item + Command = ecSelDown + ShortCut = 8232 + end + item + Command = ecScrollDown + ShortCut = 16424 + end + item + Command = ecLeft + ShortCut = 37 + end + item + Command = ecSelLeft + ShortCut = 8229 + end + item + Command = ecWordLeft + ShortCut = 16421 + end + item + Command = ecSelWordLeft + ShortCut = 24613 + end + item + Command = ecRight + ShortCut = 39 + end + item + Command = ecSelRight + ShortCut = 8231 + end + item + Command = ecWordRight + ShortCut = 16423 + end + item + Command = ecSelWordRight + ShortCut = 24615 + end + item + Command = ecPageDown + ShortCut = 34 + end + item + Command = ecSelPageDown + ShortCut = 8226 + end + item + Command = ecPageBottom + ShortCut = 16418 + end + item + Command = ecSelPageBottom + ShortCut = 24610 + end + item + Command = ecPageUp + ShortCut = 33 + end + item + Command = ecSelPageUp + ShortCut = 8225 + end + item + Command = ecPageTop + ShortCut = 16417 + end + item + Command = ecSelPageTop + ShortCut = 24609 + end + item + Command = ecLineStart + ShortCut = 36 + end + item + Command = ecSelLineStart + ShortCut = 8228 + end + item + Command = ecEditorTop + ShortCut = 16420 + end + item + Command = ecSelEditorTop + ShortCut = 24612 + end + item + Command = ecLineEnd + ShortCut = 35 + end + item + Command = ecSelLineEnd + ShortCut = 8227 + end + item + Command = ecEditorBottom + ShortCut = 16419 + end + item + Command = ecSelEditorBottom + ShortCut = 24611 + end + item + Command = ecToggleMode + ShortCut = 45 + end + item + Command = ecCopy + ShortCut = 16429 + end + item + Command = ecPaste + ShortCut = 8237 + end + item + Command = ecDeleteChar + ShortCut = 46 + end + item + Command = ecCut + ShortCut = 8238 + end + item + Command = ecDeleteLastChar + ShortCut = 8 + end + item + Command = ecDeleteLastChar + ShortCut = 8200 + end + item + Command = ecDeleteLastWord + ShortCut = 16392 + end + item + Command = ecUndo + ShortCut = 32776 + end + item + Command = ecRedo + ShortCut = 40968 + end + item + Command = ecLineBreak + ShortCut = 13 + end + item + Command = ecSelectAll + ShortCut = 16449 + end + item + Command = ecCopy + ShortCut = 16451 + end + item + Command = ecBlockIndent + ShortCut = 24649 + end + item + Command = ecLineBreak + ShortCut = 16461 + end + item + Command = ecInsertLine + ShortCut = 16462 + end + item + Command = ecDeleteWord + ShortCut = 16468 + end + item + Command = ecBlockUnindent + ShortCut = 24661 + end + item + Command = ecPaste + ShortCut = 16470 + end + item + Command = ecCut + ShortCut = 16472 + end + item + Command = ecDeleteLine + ShortCut = 16473 + end + item + Command = ecDeleteEOL + ShortCut = 24665 + end + item + Command = ecUndo + ShortCut = 16474 + end + item + Command = ecRedo + ShortCut = 24666 + end + item + Command = ecGotoMarker0 + ShortCut = 16432 + end + item + Command = ecGotoMarker1 + ShortCut = 16433 + end + item + Command = ecGotoMarker2 + ShortCut = 16434 + end + item + Command = ecGotoMarker3 + ShortCut = 16435 + end + item + Command = ecGotoMarker4 + ShortCut = 16436 + end + item + Command = ecGotoMarker5 + ShortCut = 16437 + end + item + Command = ecGotoMarker6 + ShortCut = 16438 + end + item + Command = ecGotoMarker7 + ShortCut = 16439 + end + item + Command = ecGotoMarker8 + ShortCut = 16440 + end + item + Command = ecGotoMarker9 + ShortCut = 16441 + end + item + Command = ecSetMarker0 + ShortCut = 24624 + end + item + Command = ecSetMarker1 + ShortCut = 24625 + end + item + Command = ecSetMarker2 + ShortCut = 24626 + end + item + Command = ecSetMarker3 + ShortCut = 24627 + end + item + Command = ecSetMarker4 + ShortCut = 24628 + end + item + Command = ecSetMarker5 + ShortCut = 24629 + end + item + Command = ecSetMarker6 + ShortCut = 24630 + end + item + Command = ecSetMarker7 + ShortCut = 24631 + end + item + Command = ecSetMarker8 + ShortCut = 24632 + end + item + Command = ecSetMarker9 + ShortCut = 24633 + end + item + Command = EcFoldLevel1 + ShortCut = 41009 + end + item + Command = EcFoldLevel2 + ShortCut = 41010 + end + item + Command = EcFoldLevel3 + ShortCut = 41011 + end + item + Command = EcFoldLevel4 + ShortCut = 41012 + end + item + Command = EcFoldLevel5 + ShortCut = 41013 + end + item + Command = EcFoldLevel6 + ShortCut = 41014 + end + item + Command = EcFoldLevel7 + ShortCut = 41015 + end + item + Command = EcFoldLevel8 + ShortCut = 41016 + end + item + Command = EcFoldLevel9 + ShortCut = 41017 + end + item + Command = EcFoldLevel0 + ShortCut = 41008 + end + item + Command = EcFoldCurrent + ShortCut = 41005 + end + item + Command = EcUnFoldCurrent + ShortCut = 41003 + end + item + Command = EcToggleMarkupWord + ShortCut = 32845 + end + item + Command = ecNormalSelect + ShortCut = 24654 + end + item + Command = ecColumnSelect + ShortCut = 24643 + end + item + Command = ecLineSelect + ShortCut = 24652 + end + item + Command = ecTab + ShortCut = 9 + end + item + Command = ecShiftTab + ShortCut = 8201 + end + item + Command = ecMatchBracket + ShortCut = 24642 + end + item + Command = ecColSelUp + ShortCut = 40998 + end + item + Command = ecColSelDown + ShortCut = 41000 + end + item + Command = ecColSelLeft + ShortCut = 40997 + end + item + Command = ecColSelRight + ShortCut = 40999 + end + item + Command = ecColSelPageDown + ShortCut = 40994 + end + item + Command = ecColSelPageBottom + ShortCut = 57378 + end + item + Command = ecColSelPageUp + ShortCut = 40993 + end + item + Command = ecColSelPageTop + ShortCut = 57377 + end + item + Command = ecColSelLineStart + ShortCut = 40996 + end + item + Command = ecColSelLineEnd + ShortCut = 40995 + end + item + Command = ecColSelEditorTop + ShortCut = 57380 + end + item + Command = ecColSelEditorBottom + ShortCut = 57379 + end> + MouseActions = <> + MouseTextActions = <> + MouseSelActions = <> + VisibleSpecialChars = [vscSpace, vscTabAtLast] + ReadOnly = True + SelectedColor.BackPriority = 50 + SelectedColor.ForePriority = 50 + SelectedColor.FramePriority = 50 + SelectedColor.BoldPriority = 50 + SelectedColor.ItalicPriority = 50 + SelectedColor.UnderlinePriority = 50 + SelectedColor.StrikeOutPriority = 50 + BracketHighlightStyle = sbhsBoth + BracketMatchColor.Background = clNone + BracketMatchColor.Foreground = clNone + BracketMatchColor.Style = [fsBold] + FoldedCodeColor.Background = clNone + FoldedCodeColor.Foreground = clGray + FoldedCodeColor.FrameColor = clGray + MouseLinkColor.Background = clNone + MouseLinkColor.Foreground = clBlue + LineHighlightColor.Background = clNone + LineHighlightColor.Foreground = clNone + inline SynLeftGutterPartList1: TSynGutterPartList + object SynGutterMarks1: TSynGutterMarks + Width = 24 + MouseActions = <> + end + object SynGutterLineNumber1: TSynGutterLineNumber + Width = 17 + MouseActions = <> + MarkupInfo.Background = clBtnFace + MarkupInfo.Foreground = clNone + DigitCount = 2 + ShowOnlyLineNumbersMultiplesOf = 1 + ZeroStart = False + LeadingZeros = False + end + object SynGutterChanges1: TSynGutterChanges + Width = 4 + MouseActions = <> + ModifiedColor = 59900 + SavedColor = clGreen + end + object SynGutterSeparator1: TSynGutterSeparator + Width = 2 + MouseActions = <> + MarkupInfo.Background = clWhite + MarkupInfo.Foreground = clGray + end + object SynGutterCodeFolding1: TSynGutterCodeFolding + MouseActions = <> + MarkupInfo.Background = clNone + MarkupInfo.Foreground = clGray + MouseActionsExpanded = <> + MouseActionsCollapsed = <> + end + end + end + end end object Splitter1: TSplitter Left = 288 diff --git a/examples/lazresexplorer/remainunit.pas b/examples/lazresexplorer/remainunit.pas index 63fbb78b2a..6e0fc1336d 100644 --- a/examples/lazresexplorer/remainunit.pas +++ b/examples/lazresexplorer/remainunit.pas @@ -5,8 +5,9 @@ unit reMainUnit; interface uses - SysUtils, resource, LazUTF8, Forms, Controls, Dialogs, ComCtrls, ActnList, - Menus, ExtCtrls, Grids, bitmapresource, versionresource, groupiconresource; + SysUtils, resource, LazUTF8, SynEdit, Forms, Controls, Dialogs, ComCtrls, + ActnList, Menus, ExtCtrls, Grids, bitmapresource, versionresource, + groupiconresource, Classes; type @@ -33,6 +34,8 @@ type Splitter1: TSplitter; StatusBar1: TStatusBar; StringGrid1: TStringGrid; + SynEdit1: TSynEdit; + tabBinary: TTabSheet; tabString: TTabSheet; tabImage: TTabSheet; ToolBar1: TToolBar; @@ -49,13 +52,14 @@ type Section: THeaderSection); procedure hlpAboutExecute(Sender: TObject); procedure Splitter1ChangeBounds(Sender: TObject); - procedure TreeView1Click(Sender: TObject); + procedure TreeView1SelectionChanged(Sender: TObject); private Res:TResources; procedure ClearDisplay; procedure LoadVersionResource(V:TVersionResource); procedure LoadBitmapResource(B:TBitmapResource); procedure LoadGroupIconResource(G:TGroupIconResource); + procedure LoadResourceAsBinary(R: TAbstractResource); public procedure OpenFile(const AFileName:string); end; @@ -103,6 +107,8 @@ begin OpenDialog1.Filter := sAllFilesSharedLibSoSo; {$ENDIF} Splitter1ChangeBounds(nil); + SynEdit1.Gutter.Visible := False; + ClearDisplay; end; procedure TreMainForm.FormDestroy(Sender: TObject); @@ -130,13 +136,13 @@ begin HeaderControl1.Sections[1].Width:=Width - TreeView1.Width; end; -procedure TreMainForm.TreeView1Click(Sender: TObject); +procedure TreMainForm.TreeView1SelectionChanged(Sender: TObject); var ResItem:TAbstractResource; begin + if Assigned(TreeView1.Selected) then ClearDisplay; if Assigned(TreeView1.Selected) and Assigned(TreeView1.Selected.Data) then begin - ClearDisplay; ResItem:=TAbstractResource(TreeView1.Selected.Data); HeaderControl1.Sections[1].Text:=ResItem.ClassName + ' : ' + ResItem.Name.Name; if ResItem is TVersionResource then @@ -148,14 +154,17 @@ begin if ResItem is TGroupIconResource then LoadGroupIconResource(ResItem as TGroupIconResource) else - ; + LoadResourceAsBinary(ResItem); end; end; + procedure TreMainForm.ClearDisplay; begin StringGrid1.Clean; + StringGrid1.Visible := False; Image1.Picture.Clear; + SynEdit1.Lines.Clear; end; procedure TreMainForm.LoadVersionResource(V: TVersionResource); @@ -163,6 +172,7 @@ var i,j, k:integer; begin PageControl1.ActivePage:=tabString; + StringGrid1.Visible := True; k:=0; StringGrid1.RowCount:=0; StringGrid1.ColCount:=2; @@ -188,7 +198,59 @@ end; procedure TreMainForm.LoadGroupIconResource(G: TGroupIconResource); begin + //ToDo: implement proper method to display + LoadResourceAsBinary(G); +end; +procedure TreMainForm.LoadResourceAsBinary(R: TAbstractResource); +var + Offset, Size, BytesRead: Int64; + Buf: Array[0..15] of Byte; + Line, BinLine, AscLine: ShortString; + i: Integer; +begin + PageControl1.ActivePage:=tabBinary; + //writeln('TreMainForm.LoadResourceAsBinary'); + //writeln(' ClassName = ',R.ClassName); + //writeln(' DataSize = ',R.DataSize); + //writeln(' R.RawData.Size = ',R.RawData.Size); + //writeln(' DataOffset = ',R.DataOffset); + //writeln(' DataVersion = ',R.DataVersion); + SynEdit1.Lines.BeginUpdate; + try + Offset := 0; + R.RawData.Position := 0; + Size := R.RawData.Size; + while (Offset < Size) do + begin + FillChar(Buf{%H-}, SizeOf(Buf), #0); + BytesRead := R.RawData.Read(Buf[0], SizeOf(Buf)); + //writeln(' BytesRead = ',BytesRead); + Line := ''; + BinLine := ''; + Ascline := ''; + for i := 0 to BytesRead - 1 do + begin + BinLine := BinLine + IntToHex(Buf[i],2) + #32; + if (Buf[i] in [32..127]) then + AscLine := AscLine + Char(Buf[i]) + else + AscLine := AscLine + #32; + end; + for i := (BytesRead + 1) to SizeOf(Buf) do + begin + BinLine := BinLine + ' '; + AscLine := AscLine + ' '; + end; + Line := IntToHex(Offset, 8) + #32; + Line := Line + BinLine + #32 + AscLine + LineEnding; + //writeln(' Line = ',Line); + SynEdit1.Lines.Add(Line); + Inc(Offset, SizeOf(Buf)); + end; + finally + SynEdit1.Lines.EndUpdate; + end; end; procedure TreMainForm.OpenFile(const AFileName: string); diff --git a/examples/lazresexplorer/resexplorer.lpi b/examples/lazresexplorer/resexplorer.lpi index 20273eb771..aeee3fe8d2 100644 --- a/examples/lazresexplorer/resexplorer.lpi +++ b/examples/lazresexplorer/resexplorer.lpi @@ -22,8 +22,40 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -38,10 +70,13 @@ - + - + + + +