Initial commit of khexeditor

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1773 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-08-02 08:35:53 +00:00
parent ec659b044e
commit e9ceae06ca
29 changed files with 12609 additions and 0 deletions

View File

@ -0,0 +1,34 @@
program HexEditor;
{$include kcontrols.inc}
uses
Forms,
Res in 'Res.pas',
Basic in 'Basic.pas',
About in 'About.pas' {AboutForm},
Search in 'Search.pas' {SearchForm},
Replace in 'Replace.pas' {ReplaceForm},
Options in 'Options.pas' {OptionsForm},
ReplacePrompt in 'ReplacePrompt.pas' {ReplacePromptForm},
Main in 'Main.pas' {MainForm},
PrintStatus in 'PrintStatus.pas' {PrintStatusForm};
{$R *.res}
{$IFDEF USE_THEMES}
{$R xpman.res}
{$ENDIF}
begin
{$IFDEF COMPILER10_UP}
ReportMemoryLeaksOnShutdown := DebugHook <> 0;
{$ENDIF}
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TSearchForm, SearchForm);
Application.CreateForm(TReplaceForm, ReplaceForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TOptionsForm, OptionsForm);
Application.CreateForm(TReplacePromptForm, ReplacePromptForm);
Application.CreateForm(TPrintStatusForm, PrintStatusForm);
Application.Run;
end.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,52 @@
object AboutForm: TAboutForm
Left = 1395
Height = 120
Top = 985
Width = 292
BorderStyle = bsDialog
Caption = 'About'
ClientHeight = 120
ClientWidth = 292
Font.Height = -11
Font.Name = 'Tahoma'
Position = poScreenCenter
LCLVersion = '0.9.29'
object LBProductName: TLabel
Left = 8
Height = 20
Top = 8
Width = 140
Caption = 'Hex Editor (Demo)'
Font.Height = -16
Font.Name = 'Arial'
Font.Style = [fsBold]
ParentColor = False
ParentFont = False
end
object LBCopyright: TLabel
Left = 8
Height = 14
Top = 32
Width = 153
Caption = 'Copyright (C) 2006 Tomas Krysl'
ParentColor = False
end
object LBEmail: TLabel
Left = 8
Height = 14
Top = 53
Width = 106
Caption = 'http://www.tkweb.eu'
ParentColor = False
end
object BUOk: TButton
Left = 111
Height = 25
Top = 84
Width = 75
Caption = 'OK'
Default = True
ModalResult = 1
TabOrder = 0
end
end

View File

@ -0,0 +1,17 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TAboutForm','FORMDATA',[
'TPF0'#10'TAboutForm'#9'AboutForm'#4'Left'#3's'#5#6'Height'#2'x'#3'Top'#3#217
+#3#5'Width'#3'$'#1#11'BorderStyle'#7#8'bsDialog'#7'Caption'#6#5'About'#12'Cl'
+'ientHeight'#2'x'#11'ClientWidth'#3'$'#1#11'Font.Height'#2#245#9'Font.Name'#6
+#6'Tahoma'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#6'0.9.29'#0#6'T'
+'Label'#13'LBProductName'#4'Left'#2#8#6'Height'#2#20#3'Top'#2#8#5'Width'#3
+#140#0#7'Caption'#6#17'Hex Editor (Demo)'#11'Font.Height'#2#240#9'Font.Name'
+#6#5'Arial'#10'Font.Style'#11#6'fsBold'#0#11'ParentColor'#8#10'ParentFont'#8
+#0#0#6'TLabel'#11'LBCopyright'#4'Left'#2#8#6'Height'#2#14#3'Top'#2' '#5'Widt'
+'h'#3#153#0#7'Caption'#6#30'Copyright (C) 2006 Tomas Krysl'#11'ParentColor'#8
+#0#0#6'TLabel'#7'LBEmail'#4'Left'#2#8#6'Height'#2#14#3'Top'#2'5'#5'Width'#2
+'j'#7'Caption'#6#19'http://www.tkweb.eu'#11'ParentColor'#8#0#0#7'TButton'#4
+'BUOk'#4'Left'#2'o'#6'Height'#2#25#3'Top'#2'T'#5'Width'#2'K'#7'Caption'#6#2
+'OK'#7'Default'#9#11'ModalResult'#2#1#8'TabOrder'#2#0#0#0#0
]);

View File

@ -0,0 +1,40 @@
unit About;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
Buttons, ExtCtrls;
type
TAboutForm = class(TForm)
BUOk: TButton;
LBProductName: TLabel;
LBCopyright: TLabel;
LBEmail: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
AboutForm: TAboutForm;
implementation
{$IFDEF FPC}
initialization
{$i about.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.

View File

@ -0,0 +1,234 @@
unit Basic;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
Classes, SysUtils, Graphics, StdCtrls, KHexEditor, KControls;
type
TEnvironmentPacked = packed record
Version: Byte;
// options
DropFiles,
GroupUndo,
UndoAfterSave: Boolean;
// appearance
ShowAddress,
ShowDigits,
ShowText,
ShowHorzLines,
ShowVertLines,
ShowSeparators,
ShowInactiveCaret: Boolean;
// settings
AddressMode,
AddressSize,
CharSpacing,
DigitGrouping,
DisabledDrawStyle,
LineHeightPercent,
LineSize,
UndoLimit: Integer;
// font
FontSize: Integer;
FontStyle: TFontStyles;
end;
TEnvironment = record
P: TEnvironmentPacked;
AddressPrefix: string;
FontName: string;
end;
PEnvironment = ^TEnvironment;
var
Environment: TEnvironment;
Colors: TKColorArray;
AppName: string;
IniPath: string;
IniVersion: Integer;
const
secSettings = 'Settings';
secMRUFs = 'MRUFs';
secColors = 'Custom colors';
procedure DataToString(Buffer: Pointer; Size: Integer; var S: string);
procedure StringToData(const S: string; Buffer: Pointer; Size: Integer);
function Modified2Text(Modified: Boolean): string;
function InsertMode2Text(Mode: Boolean): string;
procedure AddFontsToList(DC: HDC; L: TStrings; Pitch: TFontPitch);
function EditStrToInt(Handle: HWND; Edit: TEdit; AMin, AMax, Default: Integer; var Ok: Boolean): Integer;
procedure InitEnvironment(var Data: TEnvironment);
procedure InitColors(var Colors: TKColorArray);
procedure CopyColors(Src, Dest: TKColorArray);
implementation
uses
Math, Res, Forms;
type
PEnumFontData = ^TEnumFontData;
TEnumFontData = record
List: TStrings;
Pitch: TFontPitch;
end;
procedure DataToString(Buffer: Pointer; Size: Integer; var S: string);
var
I: Integer;
T: string;
begin
SetLength(S, Size * 2);
for I := 1 to Size do
begin
T := Format('%.2x' , [PByteArray(Buffer)^[I - 1]]);
S[I * 2 - 1] := T[1];
S[I * 2] := T[2];
end;
end;
procedure StringToData(const S: string; Buffer: Pointer; Size: Integer);
var
I, Code: Integer;
T: string;
begin
T := '$00';
for I := 1 to Min(Size, Length(S) div 2) do
begin
T[2] := S[I * 2 - 1];
T[3] := S[I * 2];
Val(T, PByteArray(Buffer)^[I - 1], Code);
end;
end;
function EditStrToInt(Handle: HWND; Edit: TEdit; AMin, AMax, Default: Integer; var Ok: Boolean): Integer;
var
I, Code: Integer;
S: string;
begin
Result := Default;
if Ok then
begin
Val(Edit.Text, I, Code);
if Code > 0 then
S := sErrIntegerValue
else if (I < AMin) or (I > AMax) then
S := Format(sErrIntegerValueOutOfRange, [AMin, AMax])
else
S := '';
if S <> '' then
begin
MessageBox(Handle, PChar(S), PChar(sAppName), MB_OK);
Ok := False;
// Edit.Text := IntToStr(Default);
if Edit.CanFocus then
try
GetParentForm(Edit).ActiveControl := Edit;
except
end;
end else
Result := I;
end;
end;
function Modified2Text(Modified: Boolean): string;
begin
if Modified then Result := sModified else Result := '';
end;
function InsertMode2Text(Mode: Boolean): string;
begin
if Mode then Result := sInsert else Result := sOverWrite;
end;
function EnumFontFamProc(var LFData: TEnumLogFont; var PFData: TNewTextMetric;
FontType: Integer; Data: PEnumFontData): Integer; stdcall;
begin
if Data.Pitch = fpFixed then
begin
if LFData.elfLogFont.lfPitchAndFamily and 1 = 1 then
Data.List.Add(LFData.elfLogFont.lfFaceName);
end else
Data.List.Add(LFData.elfLogFont.lfFaceName);
Result := 1;
end;
procedure AddFontsToList(DC: HDC; L: TStrings; Pitch: TFontPitch);
var
Data: TEnumFontData;
begin
Data.List := L;
Data.Pitch := Pitch;
EnumFontFamilies(DC, nil, @EnumFontFamProc, Integer(@Data));
end;
procedure InitEnvironment(var Data: TEnvironment);
begin
with Data.P do
begin
Version := IniVersion;
DropFiles := True;
GroupUndo := True;
UndoAfterSave := False;
ShowAddress := True;
ShowDigits := True;
ShowText := True;
ShowHorzLines := False;
ShowVertLines := False;
ShowSeparators := True;
ShowInactiveCaret := True;
DisabledDrawStyle := Integer(cDisabledDrawStyleDef);
AddressMode := Integer(cAddressModeDef);
AddressSize := cAddressSizeDef;
CharSpacing := cCharSpacingDef;
LineSize := cLineSizeDef;
DigitGrouping := cDigitGroupingDef;
LineHeightPercent := cLineHeightPercentDef;
UndoLimit := cUndoLimitDef;
FontSize := cFontSizeDef;
FontStyle := cFontStyleDef;
end;
with Data do
begin
AddressPrefix := cAddressPrefixDef;
FontName := cFontNameDef;
end;
end;
procedure InitColors(var Colors: TKColorArray);
var
I: TKHexEditorColorIndex;
begin
SetLength(Colors, ciHexEditorColorsMax + 1);
for I := 0 to Length(Colors) - 1 do
Colors[I] := GetColorSpec(I).Def;
end;
procedure CopyColors(Src, Dest: TKColorArray);
var
I: TKHexEditorColorIndex;
begin
for I := 0 to Min(Length(Src), Length(Dest)) - 1 do
Dest[I] := Src[I];
end;
initialization
AppName := 'Hex Editor (Demo)';
IniPath := ExtractFilePath(Application.ExeName) + 'hexeditor.ini';
IniVersion := 103
end.

View File

@ -0,0 +1,534 @@
<?xml version="1.0"?>
<CONFIG>
<ProjectOptions>
<PathDelim Value="\"/>
<Version Value="7"/>
<General>
<MainUnit Value="0"/>
<TargetFileExt Value=".exe"/>
<UseXPManifest Value="True"/>
<ActiveEditorIndexAtStart Value="0"/>
</General>
<VersionInfo>
<Language Value=""/>
<CharSet Value=""/>
</VersionInfo>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
<IncludeFileFilter Value="*.(pas|pp|inc|lfm|lpr|lrs|lpi|lpk|sh|xml)"/>
<ExcludeFileFilter Value="*.(bak|ppu|ppw|o|so);*~;backup"/>
</PublishOptions>
<RunParams>
<local>
<FormatVersion Value="1"/>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="Printer4Lazarus"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="40">
<Unit0>
<Filename Value="hexeditorlaz.lpr"/>
<IsPartOfProject Value="True"/>
<CursorPos X="17" Y="19"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit0>
<Unit1>
<Filename Value="about.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="AboutForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="About"/>
<CursorPos X="12" Y="38"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="main.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="MainForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Main"/>
<CursorPos X="21" Y="905"/>
<TopLine Value="862"/>
<EditorIndex Value="15"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="options.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="OptionsForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Options"/>
<CursorPos X="7" Y="229"/>
<TopLine Value="208"/>
<EditorIndex Value="7"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="printstatus.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="PrintStatusForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="PrintStatus"/>
<CursorPos X="22" Y="15"/>
<TopLine Value="1"/>
<EditorIndex Value="17"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="replace.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ReplaceForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Replace"/>
<CursorPos X="11" Y="3"/>
<TopLine Value="1"/>
<EditorIndex Value="10"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="replaceprompt.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="ReplacePromptForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="ReplacePrompt"/>
<CursorPos X="45" Y="2"/>
<TopLine Value="1"/>
<EditorIndex Value="14"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="res.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="Res"/>
<CursorPos X="32" Y="17"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="search.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SearchForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="Search"/>
<CursorPos X="87" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="8"/>
<UsageCount Value="53"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
<Filename Value="basic.pas"/>
<UnitName Value="Basic"/>
<CursorPos X="55" Y="70"/>
<TopLine Value="52"/>
<EditorIndex Value="1"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\source\kprintpreview.pas"/>
<ComponentName Value="KPrintPreviewForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="KPrintPreview"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="11"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\source\khexeditor.pas"/>
<UnitName Value="KHexEditor"/>
<CursorPos X="15" Y="4879"/>
<TopLine Value="4879"/>
<EditorIndex Value="5"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="..\..\source\kgrids.pas"/>
<UnitName Value="KGrids"/>
<CursorPos X="19" Y="9092"/>
<TopLine Value="9081"/>
<EditorIndex Value="13"/>
<UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit12>
<Unit13>
<Filename Value="..\..\source\kdbgrids.pas"/>
<UnitName Value="KDBGrids"/>
<CursorPos X="26" Y="470"/>
<TopLine Value="442"/>
<UsageCount Value="7"/>
</Unit13>
<Unit14>
<Filename Value="..\..\source\kcontrols.pas"/>
<UnitName Value="KControls"/>
<CursorPos X="29" Y="1596"/>
<TopLine Value="1555"/>
<EditorIndex Value="12"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit14>
<Unit15>
<Filename Value="..\..\source\kdialogs.pas"/>
<UnitName Value="KDialogs"/>
<CursorPos X="59" Y="28"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit15>
<Unit16>
<Filename Value="..\..\source\kprintsetup.pas"/>
<ComponentName Value="KPrintSetupForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="KPrintSetup"/>
<CursorPos X="76" Y="13"/>
<TopLine Value="1"/>
<EditorIndex Value="16"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit16>
<Unit17>
<Filename Value="..\kdbgrid\kdbgriddemolaz.lpr"/>
<UnitName Value="kdbgriddemolaz"/>
<CursorPos X="27" Y="4"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit17>
<Unit18>
<Filename Value="..\..\source\kcontrols.inc"/>
<CursorPos X="39" Y="35"/>
<TopLine Value="1"/>
<EditorIndex Value="9"/>
<UsageCount Value="24"/>
<Loaded Value="True"/>
</Unit18>
<Unit19>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\printers.pas"/>
<UnitName Value="Printers"/>
<CursorPos X="1" Y="583"/>
<TopLine Value="561"/>
<UsageCount Value="10"/>
</Unit19>
<Unit20>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\include\customaction.inc"/>
<CursorPos X="1" Y="137"/>
<TopLine Value="115"/>
<UsageCount Value="10"/>
</Unit20>
<Unit21>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\include\control.inc"/>
<CursorPos X="1" Y="1253"/>
<TopLine Value="1231"/>
<UsageCount Value="9"/>
</Unit21>
<Unit22>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\clipbrd.pp"/>
<UnitName Value="Clipbrd"/>
<CursorPos X="16" Y="254"/>
<TopLine Value="242"/>
<UsageCount Value="9"/>
</Unit22>
<Unit23>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\include\clipbrd.inc"/>
<CursorPos X="1" Y="746"/>
<TopLine Value="724"/>
<UsageCount Value="9"/>
</Unit23>
<Unit24>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\include\lclintf.inc"/>
<CursorPos X="1" Y="86"/>
<TopLine Value="64"/>
<UsageCount Value="9"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\interfaces\gtk\gtkwinapi.inc"/>
<CursorPos X="1" Y="568"/>
<TopLine Value="546"/>
<UsageCount Value="9"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\components\printers\unix\cupsdyn.pp"/>
<UnitName Value="cupsdyn"/>
<CursorPos X="14" Y="1389"/>
<TopLine Value="1358"/>
<UsageCount Value="8"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\usr\lib\lazarus\0.9.29\lcl\include\statuspanels.inc"/>
<CursorPos X="1" Y="35"/>
<TopLine Value="10"/>
<UsageCount Value="8"/>
</Unit27>
<Unit28>
<Filename Value="C:\lazarusSVN\lcl\lmessages.pp"/>
<UnitName Value="LMessages"/>
<CursorPos X="113" Y="22"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
</Unit28>
<Unit29>
<Filename Value="C:\lazarusSVN\lcl\include\control.inc"/>
<CursorPos X="1" Y="1637"/>
<TopLine Value="1609"/>
<UsageCount Value="22"/>
</Unit29>
<Unit30>
<Filename Value="C:\lazarusSVN\lcl\include\wincontrol.inc"/>
<CursorPos X="1" Y="5036"/>
<TopLine Value="5008"/>
<UsageCount Value="8"/>
</Unit30>
<Unit31>
<Filename Value="C:\lazarusSVN\lcl\lclmessageglue.pas"/>
<UnitName Value="LCLMessageGlue"/>
<CursorPos X="1" Y="121"/>
<TopLine Value="93"/>
<UsageCount Value="8"/>
</Unit31>
<Unit32>
<Filename Value="C:\lazarusSVN\lcl\interfaces\win32\win32callback.inc"/>
<CursorPos X="25" Y="1141"/>
<TopLine Value="1115"/>
<UsageCount Value="8"/>
</Unit32>
<Unit33>
<Filename Value="C:\lazarusSVN\lcl\include\application.inc"/>
<CursorPos X="1" Y="1801"/>
<TopLine Value="1773"/>
<UsageCount Value="8"/>
</Unit33>
<Unit34>
<Filename Value="C:\lazarusSVN\lcl\forms.pp"/>
<UnitName Value="Forms"/>
<CursorPos X="82" Y="383"/>
<TopLine Value="355"/>
<UsageCount Value="22"/>
</Unit34>
<Unit35>
<Filename Value="C:\lazarusSVN\lcl\include\canvas.inc"/>
<CursorPos X="1" Y="1460"/>
<TopLine Value="1432"/>
<UsageCount Value="22"/>
</Unit35>
<Unit36>
<Filename Value="C:\lazarusSVN\lcl\include\winapi.inc"/>
<CursorPos X="1" Y="865"/>
<TopLine Value="837"/>
<UsageCount Value="22"/>
</Unit36>
<Unit37>
<Filename Value="C:\lazarusSVN\lcl\interfaces\gtk\gtkwinapi.inc"/>
<CursorPos X="1" Y="9267"/>
<TopLine Value="9239"/>
<UsageCount Value="22"/>
</Unit37>
<Unit38>
<Filename Value="..\..\source\kfunctions.pas"/>
<UnitName Value="KFunctions"/>
<CursorPos X="47" Y="88"/>
<TopLine Value="59"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit38>
<Unit39>
<Filename Value="..\..\source\kgraphics.pas"/>
<UnitName Value="KGraphics"/>
<CursorPos X="20" Y="970"/>
<TopLine Value="940"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit39>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3691" Column="1" TopLine="3663"/>
</Position1>
<Position2>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="4015" Column="1" TopLine="3987"/>
</Position2>
<Position3>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3689" Column="1" TopLine="3661"/>
</Position3>
<Position4>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3690" Column="1" TopLine="3662"/>
</Position4>
<Position5>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3691" Column="1" TopLine="3663"/>
</Position5>
<Position6>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="4015" Column="1" TopLine="3987"/>
</Position6>
<Position7>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3689" Column="1" TopLine="3661"/>
</Position7>
<Position8>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3690" Column="1" TopLine="3662"/>
</Position8>
<Position9>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3691" Column="1" TopLine="3663"/>
</Position9>
<Position10>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="4015" Column="1" TopLine="3987"/>
</Position10>
<Position11>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3689" Column="1" TopLine="3661"/>
</Position11>
<Position12>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3690" Column="1" TopLine="3662"/>
</Position12>
<Position13>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3691" Column="1" TopLine="3663"/>
</Position13>
<Position14>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="4015" Column="1" TopLine="3987"/>
</Position14>
<Position15>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3689" Column="1" TopLine="3661"/>
</Position15>
<Position16>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3690" Column="1" TopLine="3662"/>
</Position16>
<Position17>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3691" Column="1" TopLine="3663"/>
</Position17>
<Position18>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="4015" Column="1" TopLine="3987"/>
</Position18>
<Position19>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="3686" Column="29" TopLine="3648"/>
</Position19>
<Position20>
<Filename Value="..\..\source\KGrids.pas"/>
<Caret Line="8949" Column="72" TopLine="8927"/>
</Position20>
<Position21>
<Filename Value="..\..\source\KGrids.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position21>
<Position22>
<Filename Value="..\..\source\KGrids.pas"/>
<Caret Line="4758" Column="40" TopLine="4730"/>
</Position22>
<Position23>
<Filename Value="hexeditorlaz.lpr"/>
<Caret Line="5" Column="20" TopLine="1"/>
</Position23>
<Position24>
<Filename Value="..\..\source\kcontrols.pas"/>
<Caret Line="23" Column="14" TopLine="1"/>
</Position24>
<Position25>
<Filename Value="hexeditorlaz.lpr"/>
<Caret Line="29" Column="37" TopLine="1"/>
</Position25>
<Position26>
<Filename Value="..\..\source\kfunctions.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position26>
<Position27>
<Filename Value="..\..\source\kfunctions.pas"/>
<Caret Line="1207" Column="1" TopLine="1181"/>
</Position27>
<Position28>
<Filename Value="..\..\source\kgraphics.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position28>
<Position29>
<Filename Value="..\..\source\khexeditor.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position29>
<Position30>
<Filename Value="hexeditorlaz.lpr"/>
<Caret Line="16" Column="18" TopLine="1"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="8"/>
<PathDelim Value="\"/>
<SearchPaths>
<IncludeFiles Value="..\..\source\;$(ProjOutDir)\"/>
<OtherUnitFiles Value="..\..\source\"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
<LCLWidgetType Value="win32"/>
</SearchPaths>
<Linking>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
<Other>
<Verbosity>
<ShowHints Value="False"/>
</Verbosity>
<CompilerPath Value="$(CompPath)"/>
</Other>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,29 @@
program hexeditorlaz;
uses
Interfaces,
Forms, LResources, Printer4Lazarus,
Res in 'Res.pas',
Basic in 'Basic.pas',
About in 'About.pas' {AboutForm},
Search in 'Search.pas' {SearchForm},
Replace in 'Replace.pas' {ReplaceForm},
Options in 'Options.pas' {OptionsForm},
ReplacePrompt in 'ReplacePrompt.pas' {ReplacePromptForm},
Main in 'Main.pas' {MainForm},
PrintStatus in 'PrintStatus.pas';
{$IFDEF WINDOWS}{$R hexeditorlaz.rc}{$ENDIF}
begin
{$I hexeditorlaz.lrs}
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.CreateForm(TSearchForm, SearchForm);
Application.CreateForm(TReplaceForm, ReplaceForm);
Application.CreateForm(TAboutForm, AboutForm);
Application.CreateForm(TOptionsForm, OptionsForm);
Application.CreateForm(TReplacePromptForm, ReplacePromptForm);
Application.CreateForm(TPrintStatusForm, PrintStatusForm);
Application.Run;
end.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,918 @@
unit Main;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ActnList, ComCtrls, StdCtrls, Menus, ToolWin, ExtCtrls, ImgList,
KEditCommon, KHexEditor, KControls, KDialogs;
type
{ TMainForm }
TMainForm = class(TForm)
MainMenu: TMainMenu;
MGFile: TMenuItem;
MINew: TMenuItem;
MIOpen: TMenuItem;
MISave: TMenuItem;
MISaveAs: TMenuItem;
MIClose: TMenuItem;
MIExit: TMenuItem;
N1: TMenuItem;
StatusBar: TStatusBar;
ALFile: TActionList;
ACNew: TAction;
ACOpen: TAction;
ACSave: TAction;
ACSaveAs: TAction;
ACClose: TAction;
ACExit: TAction;
ODMain: TOpenDialog;
SDMain: TSaveDialog;
ACStatusBar: TAction;
ALEdit: TActionList;
ACUndo: TAction;
ACRedo: TAction;
ACCut: TAction;
ACCopy: TAction;
ACPaste: TAction;
ACDelete: TAction;
ACSelectAll: TAction;
MGEdit: TMenuItem;
MIUndo: TMenuItem;
MIRedo: TMenuItem;
N2: TMenuItem;
MICut: TMenuItem;
MICopy: TMenuItem;
MIPaste: TMenuItem;
MIDelete: TMenuItem;
N3: TMenuItem;
MISelectAll: TMenuItem;
MGSearch: TMenuItem;
MGOptions: TMenuItem;
MISearch: TMenuItem;
MIReplace: TMenuItem;
MISearchAgain: TMenuItem;
MIOptions: TMenuItem;
MGHelp: TMenuItem;
MIAbout: TMenuItem;
ALSearch: TActionList;
ACSearch: TAction;
ACReplace: TAction;
ACSearchAgain: TAction;
ACEditorOptions: TAction;
MIMRUFEnd: TMenuItem;
MIMRUF1: TMenuItem;
MIMRUF2: TMenuItem;
MIMRUF3: TMenuItem;
MIMRUF4: TMenuItem;
MIMRUF5: TMenuItem;
PMMRUFs: TPopupMenu;
PMIMRUF1: TMenuItem;
PMIMRUF2: TMenuItem;
PMIMRUF3: TMenuItem;
PMIMRUF4: TMenuItem;
PMIMRUF5: TMenuItem;
MIPrint: TMenuItem;
PMMain: TPopupMenu;
PMIUndo: TMenuItem;
PMIRedo: TMenuItem;
N6: TMenuItem;
PMICut: TMenuItem;
PMICopy: TMenuItem;
PMIPaste: TMenuItem;
PMIDelete: TMenuItem;
PMISelectAll: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
ACPrint: TAction;
ACViewToolBar: TAction;
MIViewToolBar: TMenuItem;
PNMain: TPanel;
N11: TMenuItem;
MIMRUFStart: TMenuItem;
PMIEnvProps: TMenuItem;
ACEnabledEditor: TAction;
ACReadOnlyEditor: TAction;
EnabledEditor1: TMenuItem;
Close1: TMenuItem;
ILMain: TImageList;
Editor: TKHexEditor;
ACPreview: TAction;
MIPreview: TMenuItem;
PSDMain: TKPrintSetupDialog;
PPDMain: TKPrintPreviewDialog;
ToBMain: TToolBar;
TBNew: TToolButton;
TBOpen: TToolButton;
TBSave: TToolButton;
TBPreview: TToolButton;
TBPrint: TToolButton;
TBSep1: TToolButton;
TBCut: TToolButton;
TBCopy: TToolButton;
TBPaste: TToolButton;
TBDelete: TToolButton;
TBSep2: TToolButton;
TBUndo: TToolButton;
TBRedo: TToolButton;
TBSep3: TToolButton;
TBFind: TToolButton;
TBReplace: TToolButton;
TBSearchAgain: TToolButton;
TBSep4: TToolButton;
TBEnvProps: TToolButton;
ILMainDis: TImageList;
procedure EditorReplaceText(Sender: TObject; const TextToFind,
TextToReplace: string; var Action: TKEditReplaceAction);
procedure FormCreate(Sender: TObject);
procedure ACNewExecute(Sender: TObject);
procedure ACEnabledUpdate(Sender: TObject);
procedure ACOpenExecute(Sender: TObject);
procedure ACSaveExecute(Sender: TObject);
procedure ACSaveUpdate(Sender: TObject);
procedure ACSaveAsExecute(Sender: TObject);
procedure ACCloseExecute(Sender: TObject);
procedure ACExitExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ACStatusBarUpdate(Sender: TObject);
procedure ACUndoExecute(Sender: TObject);
procedure ACUndoUpdate(Sender: TObject);
procedure ACRedoExecute(Sender: TObject);
procedure ACRedoUpdate(Sender: TObject);
procedure ACCutExecute(Sender: TObject);
procedure ACCutUpdate(Sender: TObject);
procedure ACCopyExecute(Sender: TObject);
procedure ACPasteExecute(Sender: TObject);
procedure ACPasteUpdate(Sender: TObject);
procedure ACDeleteExecute(Sender: TObject);
procedure ACSelectAllExecute(Sender: TObject);
procedure ACSelectAllUpdate(Sender: TObject);
procedure ACSearchExecute(Sender: TObject);
procedure ACSearchAgainExecute(Sender: TObject);
procedure ACSearchAgainUpdate(Sender: TObject);
procedure ACSearchUpdate(Sender: TObject);
procedure ACReplaceExecute(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ACEditorOptionsExecute(Sender: TObject);
procedure ACPrintExecute(Sender: TObject);
procedure ACPrintUpdate(Sender: TObject);
procedure MIAboutClick(Sender: TObject);
procedure ACViewToolBarExecute(Sender: TObject);
procedure ACSaveAsUpdate(Sender: TObject);
procedure ACCloseUpdate(Sender: TObject);
procedure ACCopyUpdate(Sender: TObject);
procedure ACDeleteUpdate(Sender: TObject);
procedure ACReplaceUpdate(Sender: TObject);
procedure EditorDropFiles(Sender: TObject; X, Y: Integer;
Files: TStrings);
procedure ACEnabledEditorExecute(Sender: TObject);
procedure ACEnabledEditorUpdate(Sender: TObject);
procedure ACReadOnlyEditorExecute(Sender: TObject);
procedure ACReadOnlyEditorUpdate(Sender: TObject);
procedure ACViewToolBarUpdate(Sender: TObject);
procedure EditorPrintNotify(Sender: TObject; Status: TKPrintStatus;
var Abort: Boolean);
procedure EditorPrintPaint(Sender: TObject);
procedure ACPreviewExecute(Sender: TObject);
procedure ACPreviewUpdate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
FMRUFList: TStringList;
FLastFileName: string;
IsNew: Boolean;
SearchData: TKEditSearchData;
SearchAgainEnabled: Boolean;
LastSearchCommand: TKEditCommand;
TextToFind, TextToReplace: string;
procedure AddMRUF(const FileName: string);
procedure DeleteMRUF(const FileName: string);
procedure DeleteMRUFs;
procedure MRUFClick(Sender: TObject);
procedure UpdateMRUFs;
procedure LoadFromIni;
procedure SaveToIni;
procedure EnvironmentChanged;
procedure CloseFile;
procedure NewFile;
procedure OpenFile(FileName: string);
function SaveFile(SaveAs, NeedAnotherOp: Boolean): Boolean;
procedure Search(Command: TKEditCommand);
procedure HandleSearchError;
{$IFDEF FPC}
procedure LazDropFiles(Sender: TObject; const FileNames: Array of String);
{$ENDIF}
end;
var
MainForm: TMainForm;
implementation
uses
IniFiles, Res, Basic, About, Options, KFunctions,
Replace, ReplacePrompt, Search, PrintStatus, ClipBrd;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Application.Title := AppName;
{$IFDEF FPC}
Application.OnDropFiles := LazDropFiles;
{$ENDIF}
Caption := AppName;
FLastFileName := '';
SDMain.Filter := ODMain.Filter;
FMRUFList := TStringList.Create;
InitEnvironment(Environment);
InitColors(Colors);
SearchData := DefaultSearchData;
LoadFromIni;
EnvironmentChanged;
UpdateMRUFs;
SearchAgainEnabled := False;
if ParamCount > 0 then
FLastFileName := ParamStr(1);
if FLastFileName <> '' then
OpenFile(FLastFileName)
else
NewFile;
//Editor.AddressOffset := 16384;
Editor.AreaSpacing := 1;
Editor.DoubleBuffered := True;
//define 1 cm space for custom header
Editor.PageSetup.HeaderSpace := 1; //cm by default
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
SaveToIni;
CloseFile;
FMRUFList.Free;
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := SaveFile(False, True);
end;
procedure TMainForm.ACNewExecute(Sender: TObject);
begin
NewFile;
end;
procedure TMainForm.ACEnabledUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := True;
StatusBar.Panels[4].Text := Application.Hint;
end;
procedure TMainForm.ACOpenExecute(Sender: TObject);
begin
OpenFile('');
end;
procedure TMainForm.ACSaveExecute(Sender: TObject);
begin
SaveFile(False, False);
end;
procedure TMainForm.ACSaveUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.Visible and Editor.Modified;
end;
procedure TMainForm.ACSaveAsExecute(Sender: TObject);
begin
SaveFile(True, False);
end;
procedure TMainForm.ACSaveAsUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.Visible;
end;
procedure TMainForm.ACCloseExecute(Sender: TObject);
begin
if SaveFile(False, True) then
CloseFile;
end;
procedure TMainForm.ACCloseUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.Visible;
end;
procedure TMainForm.ACPreviewExecute(Sender: TObject);
begin
PPDMain.Show;
end;
procedure TMainForm.ACPreviewUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := True;
end;
procedure TMainForm.ACPrintExecute(Sender: TObject);
begin
Editor.PageSetup.Title := FLastFileName;
PSDMain.SelAvail := Editor.SelAvail;
PSDMain.Execute;
end;
procedure TMainForm.ACPrintUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CanPrint;
end;
procedure TMainForm.ACExitExecute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.ACStatusBarUpdate(Sender: TObject);
var
I: Integer;
S: string;
begin
with StatusBar do
begin
if Editor.Visible then
begin
if Editor.AddressMode = eamDec then S := sStatusPosDec else S := sStatusPosHex;
Panels[0].Text := Format(S, [Editor.SelEnd.Index]);
Panels[1].Text := Format(sStatusDigit, [Editor.SelEnd.Digit]);
Panels[2].Text := Modified2Text(Editor.Modified);
Panels[3].Text := InsertMode2Text(Editor.InsertMode);
end else
for I := 0 to 3 do Panels[I].Text := '';
end;
end;
procedure TMainForm.ACUndoExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecUndo);
end;
procedure TMainForm.ACUndoUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecUndo);
end;
procedure TMainForm.ACRedoExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecRedo);
end;
procedure TMainForm.ACRedoUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecRedo);
end;
procedure TMainForm.ACCutExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecCut);
end;
procedure TMainForm.ACCutUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecCut);
end;
procedure TMainForm.ACCopyExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecCopy);
end;
procedure TMainForm.ACCopyUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecCopy);
end;
procedure TMainForm.ACPasteExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecPaste);
end;
procedure TMainForm.ACPasteUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecPaste);
end;
procedure TMainForm.ACDeleteExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecClearSelection);
end;
procedure TMainForm.ACDeleteUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecClearSelection);
end;
procedure TMainForm.ACSelectAllExecute(Sender: TObject);
begin
Editor.ExecuteCommand(ecSelectAll);
end;
procedure TMainForm.ACSelectAllUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecSelectAll);
end;
procedure TMainForm.ACSearchExecute(Sender: TObject);
begin
Search(ecSearch);
end;
procedure TMainForm.ACSearchUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecSearch);
end;
procedure TMainForm.ACReplaceExecute(Sender: TObject);
begin
Search(ecReplace);
end;
procedure TMainForm.ACReplaceUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := Editor.CommandEnabled(ecReplace);
end;
procedure TMainForm.ACSearchAgainExecute(Sender: TObject);
begin
Editor.ExecuteCommand(LastSearchCommand, @SearchData);
HandleSearchError;
end;
procedure TMainForm.ACSearchAgainUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := SearchAgainEnabled;
end;
procedure TMainForm.ACEditorOptionsExecute(Sender: TObject);
begin
OptionsForm.SetData(Environment, Colors);
if OptionsForm.ShowModal = mrOk then
begin
OptionsForm.GetData(Environment, Colors);
EnvironmentChanged;
end;
end;
procedure TMainForm.ACViewToolBarExecute(Sender: TObject);
begin
ACViewToolBar.Checked := not ACViewToolBar.Checked;
ToBMain.Visible := ACViewToolBar.Checked;
end;
procedure TMainForm.ACViewToolBarUpdate(Sender: TObject);
begin
TAction(Sender).Checked := ToBMain.Visible;
end;
procedure TMainForm.ACEnabledEditorExecute(Sender: TObject);
begin
ACEnabledEditor.Checked := not ACEnabledEditor.Checked;
Editor.Enabled := ACEnabledEditor.Checked;
end;
procedure TMainForm.ACEnabledEditorUpdate(Sender: TObject);
begin
TAction(Sender).Checked := Editor.Enabled;
end;
procedure TMainForm.ACReadOnlyEditorExecute(Sender: TObject);
begin
ACReadOnlyEditor.Checked := not ACReadOnlyEditor.Checked;
Editor.ReadOnly := ACReadOnlyEditor.Checked;
end;
procedure TMainForm.ACReadOnlyEditorUpdate(Sender: TObject);
begin
TAction(Sender).Checked := Editor.ReadOnly;
end;
procedure TMainForm.MIAboutClick(Sender: TObject);
begin
AboutForm.ShowModal;
end;
procedure TMainForm.AddMRUF(const FileName: string);
begin
if FileName <> '' then
try
if FMRUFList.IndexOf(FileName) < 0 then
FMRUFList.Insert(0, FileName);
UpdateMRUFs;
except
end;
end;
procedure TMainForm.DeleteMRUF(const FileName: string);
var
I: Integer;
begin
if FileName <> '' then
try
I := FMRUFList.IndexOf(FileName);
if I >= 0 then FMRUFList.Delete(I);
UpdateMRUFs;
except
end;
end;
procedure TMainForm.DeleteMRUFs;
begin
try
FMRUFList.Clear;
UpdateMRUFs;
except
end;
end;
procedure TMainForm.MRUFClick(Sender: TObject);
var
S: string;
begin
S := TMenuItem(Sender).Caption;
Delete(S, 1, 3);
if S <> '' then
OpenFile(S);
end;
procedure TMainForm.UpdateMRUFs;
var
I, Index: Integer;
MI, PMI: TMenuItem;
S: string;
B: Boolean;
begin
B := False;
Index := MGFile.IndexOf(MIMRUF1);
for I := 0 to 4 do
begin
MI := MGFile.Items[I + Index];
PMI := PMMRUFs.Items[I];
if I < FMRUFList.Count then
begin
S := Format('&%d %s', [I + 1, FMRUFList[I]]);
MI.Visible := True;
PMI.Visible := True;
MI.Caption := S;
PMI.Caption := S;
MI.OnClick := MRUFClick;
PMI.OnClick := MRUFClick;
B := True;
end else
begin
MI.Visible := False;
PMI.Visible := False;
end;
end;
MIMRUFEnd.Visible := B;
end;
procedure TMainForm.CloseFile;
begin
if Editor.Visible then
begin
Editor.Clear;
AddMRUF(FLastFileName);
FLastFileName := '';
Editor.Visible := False;
end;
end;
procedure TMainForm.NewFile;
begin
if SaveFile(False, True) then
begin
CloseFile;
IsNew := True;
Caption := Format('%s - %s', [AppName, sNoname]);
Editor.Visible := True;
end;
end;
procedure TMainForm.OpenFile(FileName: string);
begin
if SaveFile(False, True) then
begin
if FileName = '' then
if ODMain.Execute then
FileName := ODMain.FileName;
if FileName <> '' then
begin
CloseFile;
if ExtractFileDir(FileName) = '' then
FileName := Format('%s\%s', [GetCurrentDir, FileName]);
try
Editor.LoadFromFile(FileName);
FLastFileName := FileName;
IsNew := False;
Caption := Format('%s - %s', [AppName, FLastFileName]);
Editor.Visible := True;
except
MessageBox(Handle, PChar(Format(sErrOpenError, [FileName])), PChar(sAppName), MB_OK);
end;
DeleteMRUF(FileName);
end;
end;
end;
function TMainForm.SaveFile(SaveAs, NeedAnotherOp: Boolean): Boolean;
var
NeedDlg: Boolean;
FileName: string;
begin
Result := False;
if IsNew then
FileName := sNoname
else
FileName := ExtractFileName(FLastFileName);
if NeedAnotherOp then
begin
if Editor.Modified then
begin
case MessageBox(Handle, PChar(Format(sNeedSaveQuestion, [FileName])), PChar(sAppName), MB_YESNOCANCEL) of
ID_NO: begin Result := True; Exit end;
ID_CANCEL: Exit;
end
end else
begin
Result := True;
Exit;
end;
end;
NeedDlg := IsNew or SaveAs;
SDMain.FileName := FileName;
if not NeedDlg or SDMain.Execute then
begin
if NeedDlg then FLastFileName := SDMain.Filename;
try
Editor.SaveToFile(FLastFileName);
Editor.Modified := False;
IsNew := False;
Caption := Format('%s - %s', [AppName, FLastFileName]);
Result := True;
except
MessageBox(Handle, PChar(Format(sErrSaveError, [FileName])), PChar(sAppName), MB_OK);
end;
end;
if Result then Editor.Modified := False;
end;
procedure TMainForm.LoadFromIni;
var
Ini: TIniFile;
I: Integer;
S: string;
begin
Ini := TIniFile.Create(IniPath);
try
I := Ini.ReadInteger(secSettings, 'Version', 0);
if I = IniVersion then with Environment do
begin
DataToString(@P, SizeOf(TEnvironmentPacked), S);
S := Ini.ReadString(secSettings, 'Environment', S);
StringToData(S, @P, SizeOf(TEnvironmentPacked));
AddressPrefix := Ini.ReadString(secSettings, 'Address prefix', AddressPrefix);
FontName := Ini.ReadString(secSettings, 'Font name', FontName);
end;
FLastFileName := Ini.ReadString(secSettings, 'Last file name', FLastFileName);
WindowState := TWindowState(Ini.ReadInteger(secSettings, 'Window state', Integer(WindowState)));
BoundsRect := Rect(
Ini.ReadInteger(secSettings, 'Left', Left),
Ini.ReadInteger(secSettings, 'Top', Top),
Ini.ReadInteger(secSettings, 'Right', Left + Width),
Ini.ReadInteger(secSettings, 'Bottom', Top + Height));
FMRUFList.Clear;
for I := 1 to 5 do
begin
S := Ini.ReadString(secMRUFs, Format('MRUF%d', [I]), '');
if S <> '' then FMRUFList.Add(S);
end;
finally
Ini.Free;
end;
end;
procedure TMainForm.SaveToIni;
var
Ini: TIniFile;
I: Integer;
S: string;
begin
Ini := TIniFile.Create(IniPath);
try
Ini.WriteInteger(secSettings, 'Version', IniVersion);
with Environment do
begin
DataToString(@P, SizeOf(TEnvironmentPacked), S);
Ini.WriteString(secSettings, 'Environment', S);
Ini.WriteString(secSettings, 'Address prefix', AddressPrefix);
Ini.WriteString(secSettings, 'Font name', FontName);
end;
Ini.WriteString(secSettings, 'Last file name', FLastFileName);
Ini.WriteInteger(secSettings, 'Window state', Integer(WindowState));
Ini.WriteInteger(secSettings, 'Left', Left);
Ini.WriteInteger(secSettings, 'Top', Top);
Ini.WriteInteger(secSettings, 'Right', Left + Width);
Ini.WriteInteger(secSettings, 'Bottom', Top + Height);
for I := 0 to FMRUFList.Count - 1 do
Ini.WriteString(secMRUFs, Format('MRUF%d', [I + 1]), FMRUFList[I]);
finally
Ini.Free;
end;
end;
procedure TMainForm.EnvironmentChanged;
var
Options: TKEditOptions;
DrawStyles: TKHexEditorDrawStyles;
begin
with Environment do
begin
Options := [];
if P.DropFiles then Include(Options, eoDropFiles);
if P.GroupUndo then Include(Options, eoGroupUndo);
if P.UndoAfterSave then Include(Options, eoUndoAfterSave);
Editor.Options := Options;
DrawStyles := [];
if P.ShowAddress then Include(DrawStyles, edAddress);
if P.ShowDigits then Include(DrawStyles, edDigits);
if P.ShowText then Include(DrawStyles, edText);
if P.ShowHorzLines then Include(DrawStyles, edHorzLines);
if P.ShowVertLines then Include(DrawStyles, edVertLines);
if P.ShowSeparators then Include(DrawStyles, edSeparators);
if P.ShowInactiveCaret then Include(DrawStyles, edInactiveCaret);
Editor.DrawStyles := DrawStyles;
Editor.AddressMode := TKHexEditorAddressMode(P.AddressMode);
Editor.AddressPrefix := AddressPrefix;
Editor.AddressSize := P.AddressSize;
Editor.CharSpacing := P.CharSpacing;
Editor.DigitGrouping := P.DigitGrouping;
Editor.DisabledDrawStyle := TKHexEditorDisabledDrawStyle(P.DisabledDrawStyle);
Editor.LineHeightPercent := P.LineHeightPercent;
Editor.LineSize := P.LineSize;
Editor.UndoLimit := P.UndoLimit;
// font
Editor.Font.Name := FontName;
Editor.Font.Size := P.FontSize;
Editor.Font.Style := P.FontStyle;
// colors
Editor.Colors.Colors := Colors;
end;
end;
procedure TMainForm.Search(Command: TKEditCommand);
var
Form: TSearchForm;
MResult: TModalResult;
begin
if Command = ecReplace then
Form := ReplaceForm
else
Form := SearchForm;
if Editor.EditArea = eaDigits then
Include(SearchData.Options, esoTreatAsDigits)
else
Exclude(SearchData.Options, esoTreatAsDigits);
Form.SetData(SearchData, Editor.SelAvail);
MResult := Form.ShowModal;
if MResult in [mrYes, mrYesToAll] then
begin
Form.GetData(SearchData);
SearchAgainEnabled := True;
LastSearchCommand := Command;
Include(SearchData.Options, esoFirstSearch);
TextToFind := TrimToSize(SearchData.TextToFind, 40);
TextToReplace := TrimToSize(SearchData.TextToReplace, 40);
ReplacePromptForm.LBText.Caption := Format(sReplaceQuestion, [TextToFind]);
if MResult = mrYesToAll then
Include(SearchData.Options, esoAll);
Editor.ExecuteCommand(Command, @SearchData);
HandleSearchError;
end;
end;
procedure TMainForm.EditorReplaceText(Sender: TObject; const TextToFind,
TextToReplace: String; var Action: TKEditReplaceAction);
begin
case ReplacePromptForm.ShowModal of
mrYes: Action := eraYes;
mrNo: Action := eraNo;
mrYesToAll: Action := eraAll;
mrCancel: Action := eraCancel;
end;
end;
procedure TMainForm.HandleSearchError;
var
S: string;
begin
case SearchData.ErrorReason of
eseNoMatch: S := Format(sErrTextNotFound, [TextToFind]);
eseNoDigitsFind: S := Format(sErrNoDigitsInText, [TextToFind]);
eseNoDigitsReplace: S := Format(sErrNoDigitsInText, [TextToReplace]);
else
S := '';
end;
if S <> '' then
MessageBox(Handle, PChar(S), PChar(sAppName), MB_OK);
end;
{$IFDEF FPC}
procedure TMainForm.LazDropFiles(Sender: TObject;
const FileNames: array of String);
begin
if Length(FileNames) > 0 then
begin
Application.BringToFront;
OpenFile(FileNames[0]);
end;
end;
{$ENDIF}
procedure TMainForm.EditorDropFiles(Sender: TObject; X, Y: Integer;
Files: TStrings);
begin
//not called in Lazarus but keep assigned in this demo
if Files.Count > 0 then
begin
Application.BringToFront;
OpenFile(Files[0]);
end;
end;
procedure TMainForm.EditorPrintNotify(Sender: TObject;
Status: TKPrintStatus; var Abort: Boolean);
begin
with PrintStatusForm do
begin
case Status of
epsBegin:
begin
Self.Enabled := False;
Aborted := False;
Show;
end;
epsNewPage:
begin
LBPage.Caption := Format(sPrintedPageAndCopy,
[Editor.PageSetup.CurrentPage, Editor.PageSetup.PageCount,
Editor.PageSetup.CurrentCopy, Editor.PageSetup.Copies]);
Update;
end;
epsEnd:
begin
Hide;
Self.Enabled := True;
end;
end;
Abort := Aborted;
end;
end;
procedure TMainForm.EditorPrintPaint(Sender: TObject);
var
Y: Integer;
begin
with Editor.PageSetup do
begin
// paint filename as header - we have 1 cm space defined
Canvas.Brush.Style := bsClear;
Canvas.Font.Pitch := fpDefault;
Canvas.Font.Name := 'Arial';
Canvas.Font.Height := VMap(16);
Canvas.Font.Style := [fsBold];
Canvas.Font.Color := clBlack;
Canvas.TextOut(PrinterMarginLeftMirrored, PrinterMarginTop, FLastFileName);
Canvas.Brush.Style := bsSolid;
Canvas.Pen.Color := clBlack;
Canvas.Pen.Width := VMap(2);
Y := PrinterMarginTop + VMap(22);
Canvas.MoveTo(PrinterMarginLeftMirrored, Y);
Canvas.LineTo(PageWidth - PrinterMarginRightMirrored, Y);
end;
end;
{$IFDEF FPC}
initialization
{$i main.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.

View File

@ -0,0 +1,517 @@
object OptionsForm: TOptionsForm
Left = 1101
Height = 363
Top = 773
Width = 437
BorderStyle = bsDialog
Caption = 'Editor options'
ClientHeight = 363
ClientWidth = 437
Font.Height = -11
Font.Name = 'Tahoma'
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
Position = poScreenCenter
LCLVersion = '0.9.29'
object PCMain: TPageControl
Left = 8
Height = 320
Top = 8
Width = 425
ActivePage = TSEditorFont
TabIndex = 1
TabOrder = 0
object TSEditorOptions: TTabSheet
Caption = 'Editor Options'
ClientHeight = 294
ClientWidth = 417
object LBAddressPrefix: TLabel
Left = 212
Height = 14
Top = 69
Width = 75
Caption = 'Address prefix:'
FocusControl = EDAddressPrefix
ParentColor = False
end
object LBAddressSize: TLabel
Left = 212
Height = 14
Top = 93
Width = 65
Caption = 'Address size:'
FocusControl = EDAddressSize
ParentColor = False
end
object LBCharSpacing: TLabel
Left = 212
Height = 14
Top = 117
Width = 118
Caption = 'Inter-character spacing:'
FocusControl = EDCharSpacing
ParentColor = False
end
object LBDigitGrouping: TLabel
Left = 212
Height = 14
Top = 165
Width = 71
Caption = 'Digit grouping:'
FocusControl = EDDigitGrouping
ParentColor = False
end
object LBLineSize: TLabel
Left = 212
Height = 14
Top = 141
Width = 45
Caption = 'Line size:'
FocusControl = EDLineSize
ParentColor = False
end
object LBbytes: TLabel
Left = 381
Height = 14
Top = 141
Width = 28
Caption = 'bytes'
ParentColor = False
end
object LBpoints: TLabel
Left = 381
Height = 14
Top = 118
Width = 30
Caption = 'points'
ParentColor = False
end
object LBbytes2: TLabel
Left = 381
Height = 14
Top = 165
Width = 28
Caption = 'bytes'
ParentColor = False
end
object LBLineHeightPercent: TLabel
Left = 212
Height = 14
Top = 189
Width = 115
Caption = 'Line height percentage:'
FocusControl = EDLineHeightPercent
ParentColor = False
end
object LBpercent: TLabel
Left = 381
Height = 14
Top = 189
Width = 12
Caption = '%'
ParentColor = False
end
object LBUndoLimit: TLabel
Left = 212
Height = 14
Top = 213
Width = 51
Caption = 'Undo limit:'
FocusControl = EDUndoLimit
ParentColor = False
end
object GBGeneral: TGroupBox
Left = 4
Height = 69
Top = 2
Width = 201
Caption = 'General'
ClientHeight = 51
ClientWidth = 197
TabOrder = 0
object CBDropFiles: TCheckBox
Left = 8
Height = 17
Top = 0
Width = 63
Caption = 'Drop files'
TabOrder = 0
end
object CBUndoAfterSave: TCheckBox
Left = 8
Height = 17
Top = 32
Width = 96
Caption = 'Undo after save'
TabOrder = 2
end
object CBGroupUndo: TCheckBox
Left = 8
Height = 17
Top = 16
Width = 74
Caption = 'Group undo'
TabOrder = 1
end
end
object RGAddressMode: TRadioGroup
Left = 212
Height = 45
Top = 6
Width = 201
AutoFill = True
Caption = 'Address mode'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 2
ClientHeight = 27
ClientWidth = 197
Columns = 2
Items.Strings = (
'Decimal'
'Hexadecimal'
)
TabOrder = 3
end
object RGDisabledDrawStyle: TRadioGroup
Left = 4
Height = 83
Top = 207
Width = 201
AutoFill = True
Caption = 'Draw style when disabled'
ChildSizing.LeftRightSpacing = 6
ChildSizing.TopBottomSpacing = 6
ChildSizing.EnlargeHorizontal = crsHomogenousChildResize
ChildSizing.EnlargeVertical = crsHomogenousChildResize
ChildSizing.ShrinkHorizontal = crsScaleChilds
ChildSizing.ShrinkVertical = crsScaleChilds
ChildSizing.Layout = cclLeftToRightThenTopToBottom
ChildSizing.ControlsPerLine = 1
ClientHeight = 65
ClientWidth = 197
Items.Strings = (
'Brighter colors'
'Gray and white'
'Normal colors'
)
TabOrder = 2
end
object GBAppearance: TGroupBox
Left = 4
Height = 133
Top = 72
Width = 201
Caption = 'Appearance'
ClientHeight = 115
ClientWidth = 197
TabOrder = 1
object CBShowAddress: TCheckBox
Left = 8
Height = 17
Top = 2
Width = 110
Caption = 'Show address area'
TabOrder = 0
end
object CBShowDigits: TCheckBox
Left = 8
Height = 17
Top = 18
Width = 92
Caption = 'Show digit area'
TabOrder = 1
end
object CBShowText: TCheckBox
Left = 8
Height = 17
Top = 34
Width = 92
Caption = 'Show text area'
TabOrder = 2
end
object CBShowHorzLines: TCheckBox
Left = 8
Height = 17
Top = 50
Width = 118
Caption = 'Show horizontal lines'
TabOrder = 3
end
object CBShowVertLines: TCheckBox
Left = 8
Height = 17
Top = 66
Width = 106
Caption = 'Show vertical lines'
TabOrder = 4
end
object CBShowSeparators: TCheckBox
Left = 8
Height = 17
Top = 82
Width = 124
Caption = 'Show area separators'
TabOrder = 5
end
object CBShowInactiveCaret: TCheckBox
Left = 8
Height = 17
Top = 98
Width = 112
Caption = 'Show inactive caret'
TabOrder = 6
end
end
object EDAddressPrefix: TEdit
Left = 328
Height = 21
Top = 66
Width = 49
TabOrder = 4
end
object EDAddressSize: TEdit
Left = 344
Height = 21
Top = 90
Width = 33
TabOrder = 5
end
object EDCharSpacing: TEdit
Left = 344
Height = 21
Top = 114
Width = 33
TabOrder = 6
end
object EDDigitGrouping: TEdit
Left = 344
Height = 21
Top = 162
Width = 33
TabOrder = 7
end
object EDLineSize: TEdit
Left = 344
Height = 21
Top = 138
Width = 33
TabOrder = 8
end
object EDLineHeightPercent: TEdit
Left = 344
Height = 21
Top = 186
Width = 33
TabOrder = 9
end
object EDUndoLimit: TEdit
Left = 328
Height = 21
Top = 210
Width = 49
TabOrder = 10
end
end
object TSEditorFont: TTabSheet
Caption = 'Editor Font'
ClientHeight = 294
ClientWidth = 417
ImageIndex = 2
object LBFontName: TLabel
Left = 16
Height = 14
Top = 16
Width = 56
Caption = '&Font name:'
FocusControl = CoBFontName
ParentColor = False
end
object LBSample: TLabel
Left = 16
Height = 14
Top = 120
Width = 39
Caption = 'Sample:'
FocusControl = PNFontSample
ParentColor = False
end
object LBFontSize: TLabel
Left = 315
Height = 14
Top = 34
Width = 48
Alignment = taRightJustify
Caption = 'Font size:'
FocusControl = EDFontSize
ParentColor = False
end
object CoBFontName: TComboBox
Left = 16
Height = 21
Top = 32
Width = 201
ItemHeight = 13
OnExit = CoBFontNameClick
OnSelect = CoBFontNameClick
Style = csDropDownList
TabOrder = 0
end
object PNFontSample: TPanel
Left = 16
Height = 105
Top = 136
Width = 385
BevelOuter = bvLowered
Caption = 'AaBbCcXxYyZz'
TabOrder = 1
end
object EDFontSize: TEdit
Left = 368
Height = 21
Top = 31
Width = 33
OnExit = EDFontSizeExit
TabOrder = 2
end
object CBFontStyleBold: TCheckBox
Left = 16
Height = 17
Top = 64
Width = 38
Caption = 'Bold'
OnClick = CoBFontNameClick
TabOrder = 3
end
object CBFontStyleItalic: TCheckBox
Left = 16
Height = 17
Top = 88
Width = 41
Caption = 'Italic'
OnClick = CoBFontNameClick
TabOrder = 4
end
end
object TSColors: TTabSheet
Caption = 'Colors'
ClientHeight = 294
ClientWidth = 417
ImageIndex = 1
object LBAttributes: TLabel
Left = 8
Height = 14
Top = 8
Width = 53
Caption = 'Color item:'
FocusControl = LiBColors
ParentColor = False
end
object LiBColors: TListBox
Left = 8
Height = 233
Top = 24
Width = 209
ItemHeight = 13
OnClick = LiBColorsClick
OnDrawItem = LiBColorsDrawItem
OnMouseMove = LiBColorsMouseMove
Style = lbOwnerDrawFixed
TabOrder = 0
end
object GBColors: TGroupBox
Left = 224
Height = 95
Top = 19
Width = 185
Caption = 'Color assignment'
ClientHeight = 77
ClientWidth = 181
TabOrder = 1
object LBHighFG: TLabel
Left = 10
Height = 14
Top = 18
Width = 68
Caption = 'Current color:'
ParentColor = False
end
object SHColor: TShape
Left = 112
Height = 49
Top = 16
Width = 65
end
object BUColorChange: TButton
Left = 8
Height = 25
Top = 40
Width = 75
Caption = 'Change...'
OnClick = BUColorChangeClick
TabOrder = 0
end
end
end
end
object BUOk: TButton
Left = 275
Height = 25
Top = 333
Width = 75
Caption = '&OK'
Default = True
ModalResult = 1
TabOrder = 2
end
object BuCancel: TButton
Left = 358
Height = 25
Top = 333
Width = 75
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 3
end
object BUDefault: TButton
Left = 8
Height = 25
Top = 333
Width = 75
Caption = 'Defaults'
OnClick = BUDefaultClick
TabOrder = 1
end
object CDChange: TColorDialog
Color = clBlack
CustomColors.Strings = (
'ColorA=000000'
'ColorB=000080'
'ColorC=008000'
'ColorD=008080'
'ColorE=800000'
'ColorF=800080'
'ColorG=808000'
'ColorH=808080'
'ColorI=C0C0C0'
'ColorJ=0000FF'
'ColorK=00FF00'
'ColorL=00FFFF'
'ColorM=FF0000'
'ColorN=FF00FF'
'ColorO=FFFF00'
'ColorP=FFFFFF'
'ColorQ=C0DCC0'
'ColorR=F0CAA6'
'ColorS=F0FBFF'
'ColorT=A4A0A0'
)
left = 404
end
end

View File

@ -0,0 +1,135 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TOptionsForm','FORMDATA',[
'TPF0'#12'TOptionsForm'#11'OptionsForm'#4'Left'#3'M'#4#6'Height'#3'k'#1#3'Top'
+#3#5#3#5'Width'#3#181#1#11'BorderStyle'#7#8'bsDialog'#7'Caption'#6#14'Editor'
+' options'#12'ClientHeight'#3'k'#1#11'ClientWidth'#3#181#1#11'Font.Height'#2
+#245#9'Font.Name'#6#6'Tahoma'#12'OnCloseQuery'#7#14'FormCloseQuery'#8'OnCrea'
+'te'#7#10'FormCreate'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#6'0.'
+'9.29'#0#12'TPageControl'#6'PCMain'#4'Left'#2#8#6'Height'#3'@'#1#3'Top'#2#8#5
+'Width'#3#169#1#10'ActivePage'#7#12'TSEditorFont'#8'TabIndex'#2#1#8'TabOrder'
+#2#0#0#9'TTabSheet'#15'TSEditorOptions'#7'Caption'#6#14'Editor Options'#12'C'
+'lientHeight'#3'&'#1#11'ClientWidth'#3#161#1#0#6'TLabel'#15'LBAddressPrefix'
+#4'Left'#3#212#0#6'Height'#2#14#3'Top'#2'E'#5'Width'#2'K'#7'Caption'#6#15'Ad'
+'dress prefix:'#12'FocusControl'#7#15'EDAddressPrefix'#11'ParentColor'#8#0#0
+#6'TLabel'#13'LBAddressSize'#4'Left'#3#212#0#6'Height'#2#14#3'Top'#2']'#5'Wi'
+'dth'#2'A'#7'Caption'#6#13'Address size:'#12'FocusControl'#7#13'EDAddressSiz'
+'e'#11'ParentColor'#8#0#0#6'TLabel'#13'LBCharSpacing'#4'Left'#3#212#0#6'Heig'
+'ht'#2#14#3'Top'#2'u'#5'Width'#2'v'#7'Caption'#6#24'Inter-character spacing:'
+#12'FocusControl'#7#13'EDCharSpacing'#11'ParentColor'#8#0#0#6'TLabel'#15'LBD'
+'igitGrouping'#4'Left'#3#212#0#6'Height'#2#14#3'Top'#3#165#0#5'Width'#2'G'#7
+'Caption'#6#15'Digit grouping:'#12'FocusControl'#7#15'EDDigitGrouping'#11'Pa'
+'rentColor'#8#0#0#6'TLabel'#10'LBLineSize'#4'Left'#3#212#0#6'Height'#2#14#3
+'Top'#3#141#0#5'Width'#2'-'#7'Caption'#6#10'Line size:'#12'FocusControl'#7#10
+'EDLineSize'#11'ParentColor'#8#0#0#6'TLabel'#7'LBbytes'#4'Left'#3'}'#1#6'Hei'
+'ght'#2#14#3'Top'#3#141#0#5'Width'#2#28#7'Caption'#6#5'bytes'#11'ParentColor'
+#8#0#0#6'TLabel'#8'LBpoints'#4'Left'#3'}'#1#6'Height'#2#14#3'Top'#2'v'#5'Wid'
+'th'#2#30#7'Caption'#6#6'points'#11'ParentColor'#8#0#0#6'TLabel'#8'LBbytes2'
+#4'Left'#3'}'#1#6'Height'#2#14#3'Top'#3#165#0#5'Width'#2#28#7'Caption'#6#5'b'
+'ytes'#11'ParentColor'#8#0#0#6'TLabel'#19'LBLineHeightPercent'#4'Left'#3#212
+#0#6'Height'#2#14#3'Top'#3#189#0#5'Width'#2's'#7'Caption'#6#23'Line height p'
+'ercentage:'#12'FocusControl'#7#19'EDLineHeightPercent'#11'ParentColor'#8#0#0
+#6'TLabel'#9'LBpercent'#4'Left'#3'}'#1#6'Height'#2#14#3'Top'#3#189#0#5'Width'
+#2#12#7'Caption'#6#1'%'#11'ParentColor'#8#0#0#6'TLabel'#11'LBUndoLimit'#4'Le'
+'ft'#3#212#0#6'Height'#2#14#3'Top'#3#213#0#5'Width'#2'3'#7'Caption'#6#11'Und'
+'o limit:'#12'FocusControl'#7#11'EDUndoLimit'#11'ParentColor'#8#0#0#9'TGroup'
+'Box'#9'GBGeneral'#4'Left'#2#4#6'Height'#2'E'#3'Top'#2#2#5'Width'#3#201#0#7
+'Caption'#6#7'General'#12'ClientHeight'#2'3'#11'ClientWidth'#3#197#0#8'TabOr'
+'der'#2#0#0#9'TCheckBox'#11'CBDropFiles'#4'Left'#2#8#6'Height'#2#17#3'Top'#2
+#0#5'Width'#2'?'#7'Caption'#6#10'Drop files'#8'TabOrder'#2#0#0#0#9'TCheckBox'
+#15'CBUndoAfterSave'#4'Left'#2#8#6'Height'#2#17#3'Top'#2' '#5'Width'#2'`'#7
+'Caption'#6#15'Undo after save'#8'TabOrder'#2#2#0#0#9'TCheckBox'#11'CBGroupU'
+'ndo'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#16#5'Width'#2'J'#7'Caption'#6#10'G'
+'roup undo'#8'TabOrder'#2#1#0#0#0#11'TRadioGroup'#13'RGAddressMode'#4'Left'#3
+#212#0#6'Height'#2'-'#3'Top'#2#6#5'Width'#3#201#0#8'AutoFill'#9#7'Caption'#6
+#12'Address mode'#28'ChildSizing.LeftRightSpacing'#2#6#28'ChildSizing.TopBot'
+'tomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHomogenousChildRe'
+'size'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChildResize'#28'Chi'
+'ldSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizing.ShrinkVertic'
+'al'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftToRightThenTopT'
+'oBottom'#27'ChildSizing.ControlsPerLine'#2#2#12'ClientHeight'#2#27#11'Clien'
+'tWidth'#3#197#0#7'Columns'#2#2#13'Items.Strings'#1#6#7'Decimal'#6#11'Hexade'
+'cimal'#0#8'TabOrder'#2#3#0#0#11'TRadioGroup'#19'RGDisabledDrawStyle'#4'Left'
+#2#4#6'Height'#2'S'#3'Top'#3#207#0#5'Width'#3#201#0#8'AutoFill'#9#7'Caption'
+#6#24'Draw style when disabled'#28'ChildSizing.LeftRightSpacing'#2#6#28'Chil'
+'dSizing.TopBottomSpacing'#2#6#29'ChildSizing.EnlargeHorizontal'#7#24'crsHom'
+'ogenousChildResize'#27'ChildSizing.EnlargeVertical'#7#24'crsHomogenousChild'
+'Resize'#28'ChildSizing.ShrinkHorizontal'#7#14'crsScaleChilds'#26'ChildSizin'
+'g.ShrinkVertical'#7#14'crsScaleChilds'#18'ChildSizing.Layout'#7#29'cclLeftT'
+'oRightThenTopToBottom'#27'ChildSizing.ControlsPerLine'#2#1#12'ClientHeight'
+#2'A'#11'ClientWidth'#3#197#0#13'Items.Strings'#1#6#15'Brighter colors'#6#14
+'Gray and white'#6#13'Normal colors'#0#8'TabOrder'#2#2#0#0#9'TGroupBox'#12'G'
+'BAppearance'#4'Left'#2#4#6'Height'#3#133#0#3'Top'#2'H'#5'Width'#3#201#0#7'C'
+'aption'#6#10'Appearance'#12'ClientHeight'#2's'#11'ClientWidth'#3#197#0#8'Ta'
+'bOrder'#2#1#0#9'TCheckBox'#13'CBShowAddress'#4'Left'#2#8#6'Height'#2#17#3'T'
+'op'#2#2#5'Width'#2'n'#7'Caption'#6#17'Show address area'#8'TabOrder'#2#0#0#0
+#9'TCheckBox'#12'CBShowDigits'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#18#5'Widt'
+'h'#2'\'#7'Caption'#6#15'Show digit area'#8'TabOrder'#2#1#0#0#9'TCheckBox'#10
,'CBShowText'#4'Left'#2#8#6'Height'#2#17#3'Top'#2'"'#5'Width'#2'\'#7'Caption'
+#6#14'Show text area'#8'TabOrder'#2#2#0#0#9'TCheckBox'#15'CBShowHorzLines'#4
+'Left'#2#8#6'Height'#2#17#3'Top'#2'2'#5'Width'#2'v'#7'Caption'#6#21'Show hor'
+'izontal lines'#8'TabOrder'#2#3#0#0#9'TCheckBox'#15'CBShowVertLines'#4'Left'
+#2#8#6'Height'#2#17#3'Top'#2'B'#5'Width'#2'j'#7'Caption'#6#19'Show vertical '
+'lines'#8'TabOrder'#2#4#0#0#9'TCheckBox'#16'CBShowSeparators'#4'Left'#2#8#6
+'Height'#2#17#3'Top'#2'R'#5'Width'#2'|'#7'Caption'#6#20'Show area separators'
+#8'TabOrder'#2#5#0#0#9'TCheckBox'#19'CBShowInactiveCaret'#4'Left'#2#8#6'Heig'
+'ht'#2#17#3'Top'#2'b'#5'Width'#2'p'#7'Caption'#6#19'Show inactive caret'#8'T'
+'abOrder'#2#6#0#0#0#5'TEdit'#15'EDAddressPrefix'#4'Left'#3'H'#1#6'Height'#2
+#21#3'Top'#2'B'#5'Width'#2'1'#8'TabOrder'#2#4#0#0#5'TEdit'#13'EDAddressSize'
+#4'Left'#3'X'#1#6'Height'#2#21#3'Top'#2'Z'#5'Width'#2'!'#8'TabOrder'#2#5#0#0
+#5'TEdit'#13'EDCharSpacing'#4'Left'#3'X'#1#6'Height'#2#21#3'Top'#2'r'#5'Widt'
+'h'#2'!'#8'TabOrder'#2#6#0#0#5'TEdit'#15'EDDigitGrouping'#4'Left'#3'X'#1#6'H'
+'eight'#2#21#3'Top'#3#162#0#5'Width'#2'!'#8'TabOrder'#2#7#0#0#5'TEdit'#10'ED'
+'LineSize'#4'Left'#3'X'#1#6'Height'#2#21#3'Top'#3#138#0#5'Width'#2'!'#8'TabO'
+'rder'#2#8#0#0#5'TEdit'#19'EDLineHeightPercent'#4'Left'#3'X'#1#6'Height'#2#21
+#3'Top'#3#186#0#5'Width'#2'!'#8'TabOrder'#2#9#0#0#5'TEdit'#11'EDUndoLimit'#4
+'Left'#3'H'#1#6'Height'#2#21#3'Top'#3#210#0#5'Width'#2'1'#8'TabOrder'#2#10#0
+#0#0#9'TTabSheet'#12'TSEditorFont'#7'Caption'#6#11'Editor Font'#12'ClientHei'
+'ght'#3'&'#1#11'ClientWidth'#3#161#1#10'ImageIndex'#2#2#0#6'TLabel'#10'LBFon'
+'tName'#4'Left'#2#16#6'Height'#2#14#3'Top'#2#16#5'Width'#2'8'#7'Caption'#6#11
+'&Font name:'#12'FocusControl'#7#11'CoBFontName'#11'ParentColor'#8#0#0#6'TLa'
+'bel'#8'LBSample'#4'Left'#2#16#6'Height'#2#14#3'Top'#2'x'#5'Width'#2''''#7'C'
+'aption'#6#7'Sample:'#12'FocusControl'#7#12'PNFontSample'#11'ParentColor'#8#0
+#0#6'TLabel'#10'LBFontSize'#4'Left'#3';'#1#6'Height'#2#14#3'Top'#2'"'#5'Widt'
+'h'#2'0'#9'Alignment'#7#14'taRightJustify'#7'Caption'#6#10'Font size:'#12'Fo'
+'cusControl'#7#10'EDFontSize'#11'ParentColor'#8#0#0#9'TComboBox'#11'CoBFontN'
+'ame'#4'Left'#2#16#6'Height'#2#21#3'Top'#2' '#5'Width'#3#201#0#10'ItemHeight'
+#2#13#6'OnExit'#7#16'CoBFontNameClick'#8'OnSelect'#7#16'CoBFontNameClick'#5
+'Style'#7#14'csDropDownList'#8'TabOrder'#2#0#0#0#6'TPanel'#12'PNFontSample'#4
+'Left'#2#16#6'Height'#2'i'#3'Top'#3#136#0#5'Width'#3#129#1#10'BevelOuter'#7#9
+'bvLowered'#7'Caption'#6#12'AaBbCcXxYyZz'#8'TabOrder'#2#1#0#0#5'TEdit'#10'ED'
+'FontSize'#4'Left'#3'p'#1#6'Height'#2#21#3'Top'#2#31#5'Width'#2'!'#6'OnExit'
+#7#14'EDFontSizeExit'#8'TabOrder'#2#2#0#0#9'TCheckBox'#15'CBFontStyleBold'#4
+'Left'#2#16#6'Height'#2#17#3'Top'#2'@'#5'Width'#2'&'#7'Caption'#6#4'Bold'#7
+'OnClick'#7#16'CoBFontNameClick'#8'TabOrder'#2#3#0#0#9'TCheckBox'#17'CBFontS'
+'tyleItalic'#4'Left'#2#16#6'Height'#2#17#3'Top'#2'X'#5'Width'#2')'#7'Caption'
+#6#6'Italic'#7'OnClick'#7#16'CoBFontNameClick'#8'TabOrder'#2#4#0#0#0#9'TTabS'
+'heet'#8'TSColors'#7'Caption'#6#6'Colors'#12'ClientHeight'#3'&'#1#11'ClientW'
+'idth'#3#161#1#10'ImageIndex'#2#1#0#6'TLabel'#12'LBAttributes'#4'Left'#2#8#6
+'Height'#2#14#3'Top'#2#8#5'Width'#2'5'#7'Caption'#6#11'Color item:'#12'Focus'
+'Control'#7#9'LiBColors'#11'ParentColor'#8#0#0#8'TListBox'#9'LiBColors'#4'Le'
+'ft'#2#8#6'Height'#3#233#0#3'Top'#2#24#5'Width'#3#209#0#10'ItemHeight'#2#13#7
+'OnClick'#7#14'LiBColorsClick'#10'OnDrawItem'#7#17'LiBColorsDrawItem'#11'OnM'
+'ouseMove'#7#18'LiBColorsMouseMove'#5'Style'#7#16'lbOwnerDrawFixed'#8'TabOrd'
+'er'#2#0#0#0#9'TGroupBox'#8'GBColors'#4'Left'#3#224#0#6'Height'#2'_'#3'Top'#2
+#19#5'Width'#3#185#0#7'Caption'#6#16'Color assignment'#12'ClientHeight'#2'M'
+#11'ClientWidth'#3#181#0#8'TabOrder'#2#1#0#6'TLabel'#8'LBHighFG'#4'Left'#2#10
+#6'Height'#2#14#3'Top'#2#18#5'Width'#2'D'#7'Caption'#6#14'Current color:'#11
+'ParentColor'#8#0#0#6'TShape'#7'SHColor'#4'Left'#2'p'#6'Height'#2'1'#3'Top'#2
+#16#5'Width'#2'A'#0#0#7'TButton'#13'BUColorChange'#4'Left'#2#8#6'Height'#2#25
+#3'Top'#2'('#5'Width'#2'K'#7'Caption'#6#9'Change...'#7'OnClick'#7#18'BUColor'
+'ChangeClick'#8'TabOrder'#2#0#0#0#0#0#0#7'TButton'#4'BUOk'#4'Left'#3#19#1#6
+'Height'#2#25#3'Top'#3'M'#1#5'Width'#2'K'#7'Caption'#6#3'&OK'#7'Default'#9#11
+'ModalResult'#2#1#8'TabOrder'#2#2#0#0#7'TButton'#8'BuCancel'#4'Left'#3'f'#1#6
+'Height'#2#25#3'Top'#3'M'#1#5'Width'#2'K'#6'Cancel'#9#7'Caption'#6#6'Cancel'
+#11'ModalResult'#2#2#8'TabOrder'#2#3#0#0#7'TButton'#9'BUDefault'#4'Left'#2#8
+#6'Height'#2#25#3'Top'#3'M'#1#5'Width'#2'K'#7'Caption'#6#8'Defaults'#7'OnCli'
+'ck'#7#14'BUDefaultClick'#8'TabOrder'#2#1#0#0#12'TColorDialog'#8'CDChange'#5
+'Color'#7#7'clBlack'#20'CustomColors.Strings'#1#6#13'ColorA=000000'#6#13'Col'
+'orB=000080'#6#13'ColorC=008000'#6#13'ColorD=008080'#6#13'ColorE=800000'#6#13
+'ColorF=800080'#6#13'ColorG=808000'#6#13'ColorH=808080'#6#13'ColorI=C0C0C0'#6
+#13'ColorJ=0000FF'#6#13'ColorK=00FF00'#6#13'ColorL=00FFFF'#6#13'ColorM=FF000'
,'0'#6#13'ColorN=FF00FF'#6#13'ColorO=FFFF00'#6#13'ColorP=FFFFFF'#6#13'ColorQ='
+'C0DCC0'#6#13'ColorR=F0CAA6'#6#13'ColorS=F0FBFF'#6#13'ColorT=A4A0A0'#0#4'lef'
+'t'#3#148#1#0#0#0
]);

View File

@ -0,0 +1,289 @@
unit Options;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls, ExtCtrls, KControls, KHexEditor, Basic;
type
{ TOptionsForm }
TOptionsForm = class(TForm)
BUOk: TButton;
BuCancel: TButton;
PCMain: TPageControl;
TSEditorOptions: TTabSheet;
TSColors: TTabSheet;
LiBColors: TListBox;
LBAttributes: TLabel;
GBGeneral: TGroupBox;
CBDropFiles: TCheckBox;
CBUndoAfterSave: TCheckBox;
GBColors: TGroupBox;
LBHighFG: TLabel;
TSEditorFont: TTabSheet;
CoBFontName: TComboBox;
LBFontName: TLabel;
PNFontSample: TPanel;
LBSample: TLabel;
BUDefault: TButton;
CBGroupUndo: TCheckBox;
RGAddressMode: TRadioGroup;
RGDisabledDrawStyle: TRadioGroup;
GBAppearance: TGroupBox;
CBShowAddress: TCheckBox;
CBShowDigits: TCheckBox;
CBShowText: TCheckBox;
CBShowHorzLines: TCheckBox;
CBShowVertLines: TCheckBox;
CBShowSeparators: TCheckBox;
CBShowInactiveCaret: TCheckBox;
BUColorChange: TButton;
LBAddressPrefix: TLabel;
EDAddressPrefix: TEdit;
EDAddressSize: TEdit;
LBAddressSize: TLabel;
LBCharSpacing: TLabel;
EDCharSpacing: TEdit;
LBDigitGrouping: TLabel;
EDDigitGrouping: TEdit;
EDLineSize: TEdit;
LBLineSize: TLabel;
LBbytes: TLabel;
LBpoints: TLabel;
LBbytes2: TLabel;
LBLineHeightPercent: TLabel;
EDLineHeightPercent: TEdit;
LBpercent: TLabel;
LBUndoLimit: TLabel;
EDUndoLimit: TEdit;
LBFontSize: TLabel;
EDFontSize: TEdit;
SHColor: TShape;
CBFontStyleBold: TCheckBox;
CBFontStyleItalic: TCheckBox;
CDChange: TColorDialog;
procedure CoBFontNameClick(Sender: TObject);
procedure BUDefaultClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure EDFontSizeExit(Sender: TObject);
procedure LiBColorsClick(Sender: TObject);
procedure BUColorChangeClick(Sender: TObject);
procedure LiBColorsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
procedure LiBColorsMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
FColors: TKColorArray;
procedure UpdateFontSample;
public
procedure SetData(const Data: TEnvironment; AColors: TKColorArray);
procedure GetData(var Data: TEnvironment; AColors: TKColorArray);
end;
var
OptionsForm: TOptionsForm;
implementation
uses
Math;
{ TOptionsForm }
procedure TOptionsForm.FormCreate(Sender: TObject);
var
I: TKHexEditorColorIndex;
begin
PCMain.ActivePageIndex := 0;
InitColors(FColors);
for I := 0 to Length(FColors) - 1 do
LiBColors.Items.Add(GetColorSpec(I).Name);
end;
procedure TOptionsForm.GetData(var Data: TEnvironment; AColors: TKColorArray);
begin
with Data do
begin
P.DropFiles := CBDropFiles.Checked;
P.GroupUndo := CBGroupUndo.Checked;
P.UndoAfterSave := CBUndoAfterSave.Checked;
P.ShowAddress := CBShowAddress.Checked;
P.ShowDigits := CBShowDigits.Checked;
P.ShowText := CBShowText.Checked;
P.ShowHorzLines := CBShowHorzLines.Checked;
P.ShowVertLines := CBShowVertLines.Checked;
P.ShowSeparators := CBShowSeparators.Checked;
P.ShowInactiveCaret := CBShowInactiveCaret.Checked;
P.AddressMode := RGAddressMode.ItemIndex;
AddressPrefix := EDAddressPrefix.Text;
P.AddressSize := StrToIntDef(EDAddressSize.Text, P.AddressSize);
P.CharSpacing := StrToIntDef(EDCharSpacing.Text, P.CharSpacing);
P.DigitGrouping := StrToIntDef(EDDigitGrouping.Text, P.DigitGrouping);
P.DisabledDrawStyle := RGDisabledDrawStyle.ItemIndex;
P.LineHeightPercent := StrToIntDef(EDLineHeightPercent.Text, P.LineHeightPercent);
P.LineSize := StrToIntDef(EDLineSize.Text, P.LineSize);
P.UndoLimit := StrToIntDef(EDUndoLimit.Text, P.UndoLimit);
FontName := CoBFontName.Text;
P.FontSize := StrToIntDef(EDFontSize.Text, P.FontSize);
P.FontStyle := [];
if CBFontStyleBold.Checked then Include(P.FontStyle, fsBold);
if CBFontStyleItalic.Checked then Include(P.FontStyle, fsItalic);
CopyColors(FColors, AColors);
end;
end;
procedure TOptionsForm.SetData(const Data: TEnvironment; AColors: TKColorArray);
begin
with Data do
begin
CBDropFiles.Checked := P.DropFiles;
CBGroupUndo.Checked := P.GroupUndo;
CBUndoAfterSave.Checked := P.UndoAfterSave;
CBShowAddress.Checked := P.ShowAddress;
CBShowDigits.Checked := P.ShowDigits;
CBShowText.Checked := P.ShowText;
CBShowHorzLines.Checked := P.ShowHorzLines;
CBShowVertLines.Checked := P.ShowVertLines;
CBShowSeparators.Checked := P.ShowSeparators;
CBShowInactiveCaret.Checked := P.ShowInactiveCaret;
RGAddressMode.ItemIndex := P.AddressMode;
EDAddressPrefix.Text := AddressPrefix;
EDAddressSize.Text := IntToStr(P.AddressSize);
EDCharSpacing.Text := IntToStr(P.CharSpacing);
EDDigitGrouping.Text := IntToStr(P.DigitGrouping);
RGDisabledDrawStyle.ItemIndex := P.DisabledDrawStyle;
EDLineHeightPercent.Text := IntToSTr(P.LineHeightPercent);
EDLineSize.Text := IntToStr(P.LineSize);
EDUndoLimit.Text := IntToStr(P.UndoLimit);
CobFontName.Items.Clear;
AddFontsToList(Canvas.Handle, CoBFontName.Items, fpFixed);
CoBFontName.ItemIndex := Max(CoBFontName.Items.IndexOf(FontName), Min(0, CobFontName.Items.Count - 1));
EDFontSize.Text := IntToStr(P.FontSize);
CBFontStyleBold.Checked := fsBold in P.FontStyle;
CBFontStyleItalic.Checked := fsItalic in P.FontStyle;
UpdateFontSample;
CopyColors(AColors, FColors);
LiBColors.Invalidate;
if LiBColors.ItemIndex < 0 then LiBColors.ItemIndex := 0;
LiBColorsClick(nil);
end;
end;
procedure TOptionsForm.UpdateFontSample;
var
Ok: Boolean;
FontStyle: TFontStyles;
begin
if CoBFontName.Text <> '' then
begin
Ok := True;
with PNFontSample.Font do
begin
Name := CoBFontName.Text;
Size := EditStrToInt(Self.Handle, EDFontSize, cFontSizeMin, cFontSizeMax, cFontSizeDef, Ok);
FontStyle := [];
if CBFontStyleBold.Checked then Include(FontStyle, fsBold);
if CBFontStyleItalic.Checked then Include(FontStyle, fsItalic);
Style := FontStyle;
end;
end;
end;
procedure TOptionsForm.CoBFontNameClick(Sender: TObject);
begin
UpdateFontSample;
end;
procedure TOptionsForm.EDFontSizeExit(Sender: TObject);
begin
UpdateFontSample;
end;
procedure TOptionsForm.BUDefaultClick(Sender: TObject);
var
AEnv: TEnvironment;
AColors: TKColorArray;
begin
InitEnvironment(AEnv);
InitColors(AColors);
SetData(AEnv, AColors);
end;
procedure TOptionsForm.BUColorChangeClick(Sender: TObject);
begin
CDChange.Color := FColors[TKHexEditorColorIndex(LiBColors.ItemIndex)];
if CDChange.Execute then
begin
FColors[TKHexEditorColorIndex(LiBColors.ItemIndex)] := CDChange.Color;
LiBColors.Invalidate;
LiBColorsClick(nil);
end;
end;
procedure TOptionsForm.LiBColorsClick(Sender: TObject);
begin
SHColor.Brush.Color := FColors[TKHexEditorColorIndex(LiBColors.ItemIndex)];
end;
procedure TOptionsForm.LiBColorsDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
with (Control as TListBox).Canvas do
begin
FillRect(Rect);
Brush.Color := FColors[TKHexEditorColorIndex(Index)];
Pen.Color := clWindowText;
Rectangle(Rect.Left + 2, Rect.Top + 1, Rect.Left + 16, Rect.Bottom - 1);
SetBKMode(Handle, TRANSPARENT);
TextOut(Rect.Left + 20, Rect.Top, LiBColors.Items[Index]);
// to ensure coming DrawFocusRect will be painted correctly:
SetBkColor(Handle, ColorToRGB(clWindow));
SetTextColor(Handle, ColorToRGB(clWindowText));
end;
end;
procedure TOptionsForm.LiBColorsMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if (ssLeft in Shift) then
LiBColorsClick(nil);
end;
procedure TOptionsForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
var
Ok: Boolean;
begin
if ModalResult = mrOk then
begin
Ok := True;
EditStrToInt(Handle, EDAddressSize, cAddressSizeMin, cAddressSizeMax, cAddressSizeDef, Ok);
EditStrToInt(Handle, EDCharSpacing, cCharSpacingMin, cCharSpacingMax, cCharSpacingDef, Ok);
EditStrToInt(Handle, EDDigitGrouping, cDigitGroupingMin, cDigitGroupingMax, cDigitGroupingDef, Ok);
EditStrToInt(Handle, EDLineHeightPercent, cLineHeightPercentMin, cLineHeightPercentMax, cLineHeightPercentDef, Ok);
EditStrToInt(Handle, EDLineSize, cLineSizeMin, cLineSizeMax, cLineSizeDef, Ok);
EditStrToInt(Handle, EDUndoLimit, cUndoLimitMin, cUndoLimitMax, cUndoLimitDef, Ok);
EditStrToInt(Handle, EDFontSize, cFontSizeMin, cFontSizeMax, cFontSizeDef, Ok);
CanClose := Ok;
end;
end;
{$IFDEF FPC}
initialization
{$i options.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.

View File

@ -0,0 +1,33 @@
object PrintStatusForm: TPrintStatusForm
Left = 1299
Height = 80
Top = 933
Width = 248
BorderIcons = []
BorderStyle = bsDialog
Caption = 'Print status'
ClientHeight = 80
ClientWidth = 248
Font.Height = -11
Font.Name = 'Tahoma'
FormStyle = fsStayOnTop
Position = poScreenCenter
LCLVersion = '0.9.29'
object LBPage: TLabel
Left = 8
Height = 14
Top = 16
Width = 36
Caption = 'LBPage'
ParentColor = False
end
object BUAbort: TButton
Left = 88
Height = 25
Top = 48
Width = 75
Caption = '&Abort'
OnClick = BUAbortClick
TabOrder = 0
end
end

View File

@ -0,0 +1,13 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TPrintStatusForm','FORMDATA',[
'TPF0'#16'TPrintStatusForm'#15'PrintStatusForm'#4'Left'#3#19#5#6'Height'#2'P'
+#3'Top'#3#165#3#5'Width'#3#248#0#11'BorderIcons'#11#0#11'BorderStyle'#7#8'bs'
+'Dialog'#7'Caption'#6#12'Print status'#12'ClientHeight'#2'P'#11'ClientWidth'
+#3#248#0#11'Font.Height'#2#245#9'Font.Name'#6#6'Tahoma'#9'FormStyle'#7#11'fs'
+'StayOnTop'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'#6#6'0.9.29'#0#6
+'TLabel'#6'LBPage'#4'Left'#2#8#6'Height'#2#14#3'Top'#2#16#5'Width'#2'$'#7'Ca'
+'ption'#6#6'LBPage'#11'ParentColor'#8#0#0#7'TButton'#7'BUAbort'#4'Left'#2'X'
+#6'Height'#2#25#3'Top'#2'0'#5'Width'#2'K'#7'Caption'#6#6'&Abort'#7'OnClick'#7
+#12'BUAbortClick'#8'TabOrder'#2#0#0#0#0
]);

View File

@ -0,0 +1,44 @@
unit PrintStatus;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TPrintStatusForm = class(TForm)
BUAbort: TButton;
LBPage: TLabel;
procedure BUAbortClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Aborted: Boolean;
end;
var
PrintStatusForm: TPrintStatusForm;
implementation
procedure TPrintStatusForm.BUAbortClick(Sender: TObject);
begin
Aborted := True;
end;
{$IFDEF FPC}
initialization
{$i printstatus.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.

View File

@ -0,0 +1,82 @@
inherited ReplaceForm: TReplaceForm
Left = 1582
Height = 269
Top = 808
Caption = 'Replace Text'
ClientHeight = 269
OnShow = FormShow
inherited CBTextToFind: TComboBox
Left = 80
Width = 241
OnChange = CBTextToFindChange
end
inherited GBOptions: TGroupBox
Height = 85
Top = 72
ClientHeight = 67
TabOrder = 2
object CBPromptOnReplace: TCheckBox[2]
Left = 8
Height = 17
Top = 44
Width = 105
Caption = '&Prompt on replace'
Checked = True
State = cbChecked
TabOrder = 2
end
end
inherited BUFind: TButton
Left = 60
Top = 236
Caption = '&Replace'
OnClick = CBTextToReplaceClick
TabOrder = 6
end
inherited BUCancel: TButton
Left = 244
Top = 236
TabOrder = 8
end
inherited GBDirection: TGroupBox
Height = 65
Top = 72
ClientHeight = 47
TabOrder = 3
end
inherited GBScope: TGroupBox
Top = 164
TabOrder = 4
end
inherited GBOrigin: TGroupBox
Top = 164
TabOrder = 5
end
object LBReplaceText: TLabel[8]
Left = 8
Height = 14
Top = 44
Width = 66
Caption = 'Rep&lace with:'
FocusControl = CBTextToReplace
ParentColor = False
end
object CBTextToReplace: TComboBox[9]
Left = 80
Height = 21
Top = 40
Width = 241
ItemHeight = 13
OnSelect = CBTextToReplaceClick
TabOrder = 1
end
object BUReplaceAll: TButton[10]
Left = 144
Height = 25
Top = 236
Width = 89
Caption = 'Replace &All'
ModalResult = 10
TabOrder = 7
end
end

View File

@ -0,0 +1,25 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TReplaceForm','FORMDATA',[
'TPF0'#241#12'TReplaceForm'#11'ReplaceForm'#4'Left'#3'.'#6#6'Height'#3#13#1#3
+'Top'#3'('#3#7'Caption'#6#12'Replace Text'#12'ClientHeight'#3#13#1#6'OnShow'
+#7#8'FormShow'#0#241#9'TComboBox'#12'CBTextToFind'#4'Left'#2'P'#5'Width'#3
+#241#0#8'OnChange'#7#18'CBTextToFindChange'#0#0#241#9'TGroupBox'#9'GBOptions'
+#6'Height'#2'U'#3'Top'#2'H'#12'ClientHeight'#2'C'#8'TabOrder'#2#2#0#242#2#2#9
+'TCheckBox'#17'CBPromptOnReplace'#4'Left'#2#8#6'Height'#2#17#3'Top'#2','#5'W'
+'idth'#2'i'#7'Caption'#6#18'&Prompt on replace'#7'Checked'#9#5'State'#7#9'cb'
+'Checked'#8'TabOrder'#2#2#0#0#0#241#7'TButton'#6'BUFind'#4'Left'#2'<'#3'Top'
+#3#236#0#7'Caption'#6#8'&Replace'#7'OnClick'#7#20'CBTextToReplaceClick'#8'Ta'
+'bOrder'#2#6#0#0#241#7'TButton'#8'BUCancel'#4'Left'#3#244#0#3'Top'#3#236#0#8
+'TabOrder'#2#8#0#0#241#9'TGroupBox'#11'GBDirection'#6'Height'#2'A'#3'Top'#2
+'H'#12'ClientHeight'#2'/'#8'TabOrder'#2#3#0#0#241#9'TGroupBox'#7'GBScope'#3
+'Top'#3#164#0#8'TabOrder'#2#4#0#0#241#9'TGroupBox'#8'GBOrigin'#3'Top'#3#164#0
+#8'TabOrder'#2#5#0#0#242#2#8#6'TLabel'#13'LBReplaceText'#4'Left'#2#8#6'Heigh'
+'t'#2#14#3'Top'#2','#5'Width'#2'B'#7'Caption'#6#14'Rep&lace with:'#12'FocusC'
+'ontrol'#7#15'CBTextToReplace'#11'ParentColor'#8#0#0#242#2#9#9'TComboBox'#15
+'CBTextToReplace'#4'Left'#2'P'#6'Height'#2#21#3'Top'#2'('#5'Width'#3#241#0#10
+'ItemHeight'#2#13#8'OnSelect'#7#20'CBTextToReplaceClick'#8'TabOrder'#2#1#0#0
+#242#2#10#7'TButton'#12'BUReplaceAll'#4'Left'#3#144#0#6'Height'#2#25#3'Top'#3
+#236#0#5'Width'#2'Y'#7'Caption'#6#12'Replace &All'#11'ModalResult'#2#10#8'Ta'
+'bOrder'#2#7#0#0#0
]);

View File

@ -0,0 +1,83 @@
unit Replace;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, KEditCommon, Search;
type
{ TReplaceForm }
TReplaceForm = class(TSearchForm)
LBReplaceText: TLabel;
CBTextToReplace: TComboBox;
BUReplaceAll: TButton;
CBPromptOnReplace: TCheckBox;
procedure FormShow(Sender: TObject);
procedure CBTextToReplaceClick(Sender: TObject);
procedure CBTextToFindChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GetData(var Data: TKEditSearchData); override;
procedure SetData(const Data: TKEditSearchData; SelAvail: Boolean); override;
end;
var
ReplaceForm: TReplaceForm;
implementation
procedure TReplaceForm.FormShow(Sender: TObject);
begin
CBTextToFindChange(Sender);
end;
procedure TReplaceForm.CBTextToFindChange(Sender: TObject);
begin
BUFind.Enabled := (CBTextToFind.Text <> '');
BUReplaceAll.Enabled := BUFind.Enabled;
end;
procedure TReplaceForm.CBTextToReplaceClick(Sender: TObject);
begin
if (CBTextToReplace.Text <> '') and
(CBTextToReplace.Items.IndexOf(CBTextToReplace.Text) < 0) then
CBTextToReplace.Items.Insert(0, CBTextToReplace.Text);
end;
procedure TReplaceForm.GetData(var Data: TKEditSearchData);
begin
inherited;
with Data do
begin
if CBPromptOnReplace.Checked then Include(Options, esoPrompt);
TextToReplace := CBTextToReplace.Text;
end;
end;
procedure TReplaceForm.SetData(const Data: TKEditSearchData; SelAvail: Boolean);
begin
inherited;
with Data do
CBPromptOnReplace.Checked := esoPrompt in Options;
end;
{$IFDEF FPC}
initialization
{$i replace.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.

View File

@ -0,0 +1,58 @@
object ReplacePromptForm: TReplacePromptForm
Left = 1530
Height = 90
Top = 1046
Width = 365
BorderStyle = bsDialog
Caption = 'Confirm'
ClientHeight = 90
ClientWidth = 365
Font.Height = -11
Font.Name = 'Tahoma'
Position = poScreenCenter
LCLVersion = '0.9.29'
object LBText: TLabel
Left = 16
Height = 14
Top = 16
Width = 8
Caption = 'A'
ParentColor = False
end
object BUYes: TButton
Left = 16
Height = 25
Top = 48
Width = 75
Caption = 'Yes'
ModalResult = 6
TabOrder = 0
end
object BuNo: TButton
Left = 104
Height = 25
Top = 48
Width = 75
Caption = 'No'
ModalResult = 7
TabOrder = 1
end
object BUAll: TButton
Left = 192
Height = 25
Top = 48
Width = 75
Caption = 'All'
ModalResult = 10
TabOrder = 2
end
object BUCancel: TButton
Left = 280
Height = 25
Top = 48
Width = 75
Caption = 'Cancel'
ModalResult = 2
TabOrder = 3
end
end

View File

@ -0,0 +1,17 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TReplacePromptForm','FORMDATA',[
'TPF0'#18'TReplacePromptForm'#17'ReplacePromptForm'#4'Left'#3#250#5#6'Height'
+#2'Z'#3'Top'#3#22#4#5'Width'#3'm'#1#11'BorderStyle'#7#8'bsDialog'#7'Caption'
+#6#7'Confirm'#12'ClientHeight'#2'Z'#11'ClientWidth'#3'm'#1#11'Font.Height'#2
+#245#9'Font.Name'#6#6'Tahoma'#8'Position'#7#14'poScreenCenter'#10'LCLVersion'
+#6#6'0.9.29'#0#6'TLabel'#6'LBText'#4'Left'#2#16#6'Height'#2#14#3'Top'#2#16#5
+'Width'#2#8#7'Caption'#6#1'A'#11'ParentColor'#8#0#0#7'TButton'#5'BUYes'#4'Le'
+'ft'#2#16#6'Height'#2#25#3'Top'#2'0'#5'Width'#2'K'#7'Caption'#6#3'Yes'#11'Mo'
+'dalResult'#2#6#8'TabOrder'#2#0#0#0#7'TButton'#4'BuNo'#4'Left'#2'h'#6'Height'
+#2#25#3'Top'#2'0'#5'Width'#2'K'#7'Caption'#6#2'No'#11'ModalResult'#2#7#8'Tab'
+'Order'#2#1#0#0#7'TButton'#5'BUAll'#4'Left'#3#192#0#6'Height'#2#25#3'Top'#2
+'0'#5'Width'#2'K'#7'Caption'#6#3'All'#11'ModalResult'#2#10#8'TabOrder'#2#2#0
+#0#7'TButton'#8'BUCancel'#4'Left'#3#24#1#6'Height'#2#25#3'Top'#2'0'#5'Width'
+#2'K'#7'Caption'#6#6'Cancel'#11'ModalResult'#2#2#8'TabOrder'#2#3#0#0#0
]);

View File

@ -0,0 +1,40 @@
unit ReplacePrompt;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TReplacePromptForm = class(TForm)
LBText: TLabel;
BUYes: TButton;
BuNo: TButton;
BUAll: TButton;
BUCancel: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
ReplacePromptForm: TReplacePromptForm;
implementation
{$IFDEF FPC}
initialization
{$i replaceprompt.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.

View File

@ -0,0 +1,36 @@
unit Res;
interface
resourcestring
{main}
sAppName = 'Hex Editor';
sNeedSaveQuestion = 'File "%s" has been changed. Do you want to save it?';
sStatusDigit = 'Digit: %d';
sStatusPosDec = 'Pos: %d';
sStatusPosHex = 'Pos: %x';
sModified = 'Modified';
sOverwrite = 'Overwrite';
sInsert = 'Insert';
sNoname = 'new file';
sReplaceQuestion = 'Replace this occurence of "%s"?';
sReplace = '&Replace';
sReplaceAll = 'Replace &all';
sReplaceSkip = '&Skip';
sPrintedPageAndCopy = 'Printing page %d from %d. Actual copy: %d from %d.';
{printsetup}
sPSAllPages = 'All pages (%d)';
{errors}
sErrOpenError = 'Can''t open file "%s".';
sErrSaveError = 'Can''t save file "%s".';
sErrTextNotFound = 'The text "%s" was not found.';
sErrNoDigitsInText = 'The text "%s" can''t be interpreted as hexadecimal digits.';
sErrIntegerValue = 'Bad integer value.';
sErrIntegerValueOutOfRange = 'Integer value out of range %d to %d.';
sErrNoPrinterInstalled = 'No printer is installed on this computer.';
implementation
end.

View File

@ -0,0 +1,167 @@
object SearchForm: TSearchForm
Left = 1005
Height = 204
Top = 825
Width = 330
BorderStyle = bsDialog
Caption = 'Find Text'
ClientHeight = 204
ClientWidth = 330
Font.Height = -11
Font.Name = 'Tahoma'
OnShow = FormShow
Position = poScreenCenter
LCLVersion = '0.9.29'
object LBFindText: TLabel
Left = 8
Height = 14
Top = 12
Width = 61
Caption = '&Text to find:'
FocusControl = CBTextToFind
ParentColor = False
end
object CBTextToFind: TComboBox
Left = 72
Height = 21
Top = 8
Width = 249
ItemHeight = 13
OnChange = CBTextToFindChange
TabOrder = 0
end
object GBOptions: TGroupBox
Left = 8
Height = 61
Top = 36
Width = 173
Caption = 'Options'
ClientHeight = 43
ClientWidth = 169
TabOrder = 1
object CBMatchCase: TCheckBox
Left = 8
Height = 17
Top = 4
Width = 87
Caption = '&Case sensitive'
TabOrder = 0
end
object CBHexaSearch: TCheckBox
Left = 8
Height = 17
Top = 24
Width = 120
Caption = 'As he&xadecimal digits'
TabOrder = 1
end
end
object BUFind: TButton
Left = 164
Height = 25
Top = 172
Width = 75
Caption = '&Find'
Default = True
ModalResult = 6
OnClick = BUFindClick
TabOrder = 2
end
object BUCancel: TButton
Left = 248
Height = 25
Top = 172
Width = 75
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 3
end
object GBDirection: TGroupBox
Left = 192
Height = 61
Top = 36
Width = 129
Caption = 'Direction'
ClientHeight = 43
ClientWidth = 125
TabOrder = 4
object RBForward: TRadioButton
Left = 8
Height = 17
Top = 4
Width = 58
Caption = 'Forwar&d'
Checked = True
State = cbChecked
TabOrder = 0
end
object RBBackward: TRadioButton
Left = 8
Height = 17
Top = 24
Width = 64
Caption = '&Backward'
TabOrder = 1
TabStop = False
end
end
object GBScope: TGroupBox
Left = 8
Height = 61
Top = 104
Width = 173
Caption = 'Scope'
ClientHeight = 43
ClientWidth = 169
TabOrder = 5
object RBGlobal: TRadioButton
Left = 8
Height = 17
Top = 4
Width = 47
Caption = '&Global'
Checked = True
State = cbChecked
TabOrder = 0
end
object RBSelectedOnly: TRadioButton
Left = 8
Height = 17
Top = 24
Width = 82
Caption = '&Selected only'
TabOrder = 1
TabStop = False
end
end
object GBOrigin: TGroupBox
Left = 192
Height = 61
Top = 104
Width = 129
Caption = 'Origin'
ClientHeight = 43
ClientWidth = 125
TabOrder = 6
object RBFromCursor: TRadioButton
Left = 8
Height = 17
Top = 4
Width = 75
Caption = 'Fro&m cursor'
Checked = True
State = cbChecked
TabOrder = 0
end
object RBEntireScope: TRadioButton
Left = 8
Height = 17
Top = 24
Width = 77
Caption = '&Entire scope'
TabOrder = 1
TabStop = False
end
end
end

View File

@ -0,0 +1,43 @@
{ This is an automatically generated lazarus resource file }
LazarusResources.Add('TSearchForm','FORMDATA',[
'TPF0'#11'TSearchForm'#10'SearchForm'#4'Left'#3#237#3#6'Height'#3#204#0#3'Top'
+#3'9'#3#5'Width'#3'J'#1#11'BorderStyle'#7#8'bsDialog'#7'Caption'#6#9'Find Te'
+'xt'#12'ClientHeight'#3#204#0#11'ClientWidth'#3'J'#1#11'Font.Height'#2#245#9
+'Font.Name'#6#6'Tahoma'#6'OnShow'#7#8'FormShow'#8'Position'#7#14'poScreenCen'
+'ter'#10'LCLVersion'#6#6'0.9.29'#0#6'TLabel'#10'LBFindText'#4'Left'#2#8#6'He'
+'ight'#2#14#3'Top'#2#12#5'Width'#2'='#7'Caption'#6#14'&Text to find:'#12'Foc'
+'usControl'#7#12'CBTextToFind'#11'ParentColor'#8#0#0#9'TComboBox'#12'CBTextT'
+'oFind'#4'Left'#2'H'#6'Height'#2#21#3'Top'#2#8#5'Width'#3#249#0#10'ItemHeigh'
+'t'#2#13#8'OnChange'#7#18'CBTextToFindChange'#8'TabOrder'#2#0#0#0#9'TGroupBo'
+'x'#9'GBOptions'#4'Left'#2#8#6'Height'#2'='#3'Top'#2'$'#5'Width'#3#173#0#7'C'
+'aption'#6#7'Options'#12'ClientHeight'#2'+'#11'ClientWidth'#3#169#0#8'TabOrd'
+'er'#2#1#0#9'TCheckBox'#11'CBMatchCase'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#4
+#5'Width'#2'W'#7'Caption'#6#15'&Case sensitive'#8'TabOrder'#2#0#0#0#9'TCheck'
+'Box'#12'CBHexaSearch'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#24#5'Width'#2'x'#7
+'Caption'#6#22'As he&xadecimal digits'#8'TabOrder'#2#1#0#0#0#7'TButton'#6'BU'
+'Find'#4'Left'#3#164#0#6'Height'#2#25#3'Top'#3#172#0#5'Width'#2'K'#7'Caption'
+#6#5'&Find'#7'Default'#9#11'ModalResult'#2#6#7'OnClick'#7#11'BUFindClick'#8
+'TabOrder'#2#2#0#0#7'TButton'#8'BUCancel'#4'Left'#3#248#0#6'Height'#2#25#3'T'
+'op'#3#172#0#5'Width'#2'K'#6'Cancel'#9#7'Caption'#6#6'Cancel'#11'ModalResult'
+#2#2#8'TabOrder'#2#3#0#0#9'TGroupBox'#11'GBDirection'#4'Left'#3#192#0#6'Heig'
+'ht'#2'='#3'Top'#2'$'#5'Width'#3#129#0#7'Caption'#6#9'Direction'#12'ClientHe'
+'ight'#2'+'#11'ClientWidth'#2'}'#8'TabOrder'#2#4#0#12'TRadioButton'#9'RBForw'
+'ard'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#4#5'Width'#2':'#7'Caption'#6#8'For'
+'war&d'#7'Checked'#9#5'State'#7#9'cbChecked'#8'TabOrder'#2#0#0#0#12'TRadioBu'
+'tton'#10'RBBackward'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#24#5'Width'#2'@'#7
+'Caption'#6#9'&Backward'#8'TabOrder'#2#1#7'TabStop'#8#0#0#0#9'TGroupBox'#7'G'
+'BScope'#4'Left'#2#8#6'Height'#2'='#3'Top'#2'h'#5'Width'#3#173#0#7'Caption'#6
+#5'Scope'#12'ClientHeight'#2'+'#11'ClientWidth'#3#169#0#8'TabOrder'#2#5#0#12
+'TRadioButton'#8'RBGlobal'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#4#5'Width'#2
+'/'#7'Caption'#6#7'&Global'#7'Checked'#9#5'State'#7#9'cbChecked'#8'TabOrder'
+#2#0#0#0#12'TRadioButton'#14'RBSelectedOnly'#4'Left'#2#8#6'Height'#2#17#3'To'
+'p'#2#24#5'Width'#2'R'#7'Caption'#6#14'&Selected only'#8'TabOrder'#2#1#7'Tab'
+'Stop'#8#0#0#0#9'TGroupBox'#8'GBOrigin'#4'Left'#3#192#0#6'Height'#2'='#3'Top'
+#2'h'#5'Width'#3#129#0#7'Caption'#6#6'Origin'#12'ClientHeight'#2'+'#11'Clien'
+'tWidth'#2'}'#8'TabOrder'#2#6#0#12'TRadioButton'#12'RBFromCursor'#4'Left'#2#8
+#6'Height'#2#17#3'Top'#2#4#5'Width'#2'K'#7'Caption'#6#12'Fro&m cursor'#7'Che'
+'cked'#9#5'State'#7#9'cbChecked'#8'TabOrder'#2#0#0#0#12'TRadioButton'#13'RBE'
+'ntireScope'#4'Left'#2#8#6'Height'#2#17#3'Top'#2#24#5'Width'#2'M'#7'Caption'
+#6#13'&Entire scope'#8'TabOrder'#2#1#7'TabStop'#8#0#0#0#0
]);

View File

@ -0,0 +1,130 @@
unit Search;
{$include kcontrols.inc}
interface
uses
{$IFDEF FPC}
LCLType, LCLIntf, LResources,
{$ELSE}
Windows, Messages,
{$ENDIF}
SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, KEditCommon;
type
TSearchForm = class(TForm)
CBTextToFind: TComboBox;
GBOptions: TGroupBox;
LBFindText: TLabel;
BUFind: TButton;
BUCancel: TButton;
CBMatchCase: TCheckBox;
CBHexaSearch: TCheckBox;
GBDirection: TGroupBox;
RBForward: TRadioButton;
RBBackward: TRadioButton;
GBScope: TGroupBox;
RBGlobal: TRadioButton;
RBSelectedOnly: TRadioButton;
GBOrigin: TGroupBox;
RBFromCursor: TRadioButton;
RBEntireScope: TRadioButton;
procedure BUFindClick(Sender: TObject);
procedure CBTextToFindChange(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GetData(var Data: TKEditSearchData); virtual;
procedure SetData(const Data: TKEditSearchData; SelAvail: Boolean); virtual;
end;
var
SearchForm: TSearchForm;
function TrimToSize(const Text: string; Size: Integer): string;
implementation
uses Options;
function TrimToSize(const Text: string; Size: Integer): string;
begin
Result := Text;
if (Size > 0) and (Length(Result) > Size) then
begin
SetLength(Result, Size);
Result := Format('%s...', [Result]);
end;
end;
procedure TSearchForm.BUFindClick(Sender: TObject);
begin
if CBTextToFind.Items.IndexOf(CBTextToFind.Text) < 0 then
CBTextToFind.Items.Insert(0, CBTextToFind.Text);
end;
procedure TSearchForm.CBTextToFindChange(Sender: TObject);
begin
BUFind.Enabled := CBTextToFind.Text <> '';
end;
procedure TSearchForm.FormShow(Sender: TObject);
begin
CBTextToFindChange(Sender);
end;
procedure TSearchForm.GetData(var Data: TKEditSearchData);
begin
with Data do
begin
Options := [];
if CBMatchCase.Checked then Include(Options, esoMatchCase);
if CBHexaSearch.Checked then Include(Options, esoTreatAsDigits);
if RBBackward.Checked then Include(Options, esoBackwards);
if RBEntireScope.Checked then Include(Options, esoEntireScope);
if RBSelectedOnly.Checked then Include(Options, esoSelectedOnly);
TextToFind := CBTextToFind.Text;
end;
end;
procedure TSearchForm.SetData(const Data: TKEditSearchData; SelAvail: Boolean);
begin
ActiveControl := CBTextToFind;
with Data do
begin
CBMatchCase.Checked := esoMatchCase in Options;
CBHexaSearch.Checked := esoTreatAsDigits in Options;
if esoBackwards in Options then
RBBackward.Checked := True
else
RBForward.Checked := True;
if esoEntireScope in Options then
RBEntireScope.Checked := True
else
RBFromCursor.Checked := True;
if SelAvail then
begin
RBSelectedOnly.Enabled := True;
if esoSelectedOnly in Options then
RBSelectedOnly.Checked := True
else
RBGlobal.Checked := True
end else
begin
RBGlobal.Checked := True;
RBSelectedOnly.Enabled := False;
end;
end;
end;
{$IFDEF FPC}
initialization
{$i search.lrs}
{$ELSE}
{$R *.dfm}
{$ENDIF}
end.