git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@12 7f62d464-2af8-f54e-996c-e91b33f51cbe
443 lines
12 KiB
ObjectPascal
443 lines
12 KiB
ObjectPascal
{******************************************************************
|
|
|
|
JEDI-VCL Demo
|
|
|
|
Copyright (C) 2002 Project JEDI
|
|
|
|
Original author:
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the JEDI-JVCL
|
|
home page, located at http://jvcl.sourceforge.net
|
|
|
|
The contents of this file are used with permission, subject to
|
|
the Mozilla Public License Version 1.1 (the "License"); you may
|
|
not use this file except in compliance with the License. You may
|
|
obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1_1Final.html
|
|
|
|
Software distributed under the License is distributed on an
|
|
"AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
implied. See the License for the specific language governing
|
|
rights and limitations under the License.
|
|
|
|
******************************************************************}
|
|
|
|
unit OptionsFrm;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
StdCtrls, JvCombobox, JvColorCombo, ComCtrls, ActnList, ExtCtrls,
|
|
JvBaseDlg, JvBrowseFolder, PersistForm, PersistSettings, Menus,
|
|
JvComponent, JvExStdCtrls;
|
|
|
|
type
|
|
// a TEdit that doesn't allow pasting of non-numeric text if Numeric is true
|
|
TEdit = class(StdCtrls.TEdit)
|
|
private
|
|
procedure WMPaste(var Msg: TMessage); message WM_PASTE;
|
|
function GetNumeric:boolean;
|
|
procedure SetNumeric(Value:boolean);
|
|
published
|
|
property Numeric:boolean read GetNumeric write SetNumeric;
|
|
end;
|
|
|
|
TfrmOptions = class(TfrmPersistable)
|
|
btnOK: TButton;
|
|
btnCancel: TButton;
|
|
pcOptions: TPageControl;
|
|
tabGeneral: TTabSheet;
|
|
tabPaths: TTabSheet;
|
|
lvPaths: TListView;
|
|
edLibPath: TEdit;
|
|
btnPathBrowse: TButton;
|
|
btnReplace: TButton;
|
|
btnAdd: TButton;
|
|
btnDelete: TButton;
|
|
alOptions: TActionList;
|
|
Label9: TLabel;
|
|
JvBrowseFolder1: TJvBrowseForFolderDialog;
|
|
acReplace: TAction;
|
|
acAdd: TAction;
|
|
acDelete: TAction;
|
|
acBrowse: TAction;
|
|
popPaths: TPopupMenu;
|
|
acDelInvalidPaths: TAction;
|
|
acGetD5Path: TAction;
|
|
acGetD6Path: TAction;
|
|
acGetD7Path: TAction;
|
|
acGetBCB5Path: TAction;
|
|
acGetBCB6Path: TAction;
|
|
Add1: TMenuItem;
|
|
Replace1: TMenuItem;
|
|
Delete1: TMenuItem;
|
|
N1: TMenuItem;
|
|
InsertLibraryPath1: TMenuItem;
|
|
CBuilder51: TMenuItem;
|
|
CBuilder61: TMenuItem;
|
|
N2: TMenuItem;
|
|
Delphi51: TMenuItem;
|
|
Delphi61: TMenuItem;
|
|
Delphi71: TMenuItem;
|
|
DeleteInvalidPaths1: TMenuItem;
|
|
gbConnectors: TGroupBox;
|
|
Label3: TLabel;
|
|
Label4: TLabel;
|
|
Label5: TLabel;
|
|
Label6: TLabel;
|
|
Label7: TLabel;
|
|
Label8: TLabel;
|
|
cbIntfColor: TJvColorComboBox;
|
|
cbIntfSelColor: TJvColorComboBox;
|
|
cbImplColor: TJvColorComboBox;
|
|
cbImplSelColor: TJvColorComboBox;
|
|
acSystemPath: TAction;
|
|
N3: TMenuItem;
|
|
SystemPath1: TMenuItem;
|
|
acSelectAll: TAction;
|
|
acInvertSelect: TAction;
|
|
acUnselectAll: TAction;
|
|
Select1: TMenuItem;
|
|
SelectAll1: TMenuItem;
|
|
UnselectAll1: TMenuItem;
|
|
InvertSelection1: TMenuItem;
|
|
N4: TMenuItem;
|
|
gbShapes: TGroupBox;
|
|
edShapeWidth: TEdit;
|
|
edShapeHeight: TEdit;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
procedure acBrowseExecute(Sender: TObject);
|
|
procedure acAddExecute(Sender: TObject);
|
|
procedure acReplaceExecute(Sender: TObject);
|
|
procedure acDeleteExecute(Sender: TObject);
|
|
procedure alOptionsUpdate(Action: TBasicAction; var Handled: Boolean);
|
|
procedure acGetD5PathExecute(Sender: TObject);
|
|
procedure acGetD6PathExecute(Sender: TObject);
|
|
procedure acGetD7PathExecute(Sender: TObject);
|
|
procedure acGetBCB5PathExecute(Sender: TObject);
|
|
procedure acGetBCB6PathExecute(Sender: TObject);
|
|
procedure acDelInvalidPathsExecute(Sender: TObject);
|
|
procedure lvPathsSelectItem(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean);
|
|
procedure lvPathsEnter(Sender: TObject);
|
|
procedure tabPathsShow(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure acSystemPathExecute(Sender: TObject);
|
|
procedure acSelectAllExecute(Sender: TObject);
|
|
procedure acInvertSelectExecute(Sender: TObject);
|
|
procedure acUnselectAllExecute(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
{ IPersistSettings }
|
|
procedure ListViewAddPath(const S: string);
|
|
procedure ListViewAddPaths(Version: integer; ForDelphi: boolean);
|
|
procedure ListViewAddSystemPaths;
|
|
protected
|
|
procedure Load(Storage: TPersistStorage);override;
|
|
procedure Save(Storage: TPersistStorage);override;
|
|
public
|
|
{ Public declarations }
|
|
class function Execute: boolean;
|
|
end;
|
|
|
|
|
|
implementation
|
|
uses
|
|
{$IFNDEF COMPILER6_UP}
|
|
FileCtrl,
|
|
{$ENDIF }
|
|
DepWalkUtils, Registry;
|
|
|
|
{$R *.DFM}
|
|
|
|
|
|
{ TEdit }
|
|
|
|
function TEdit.GetNumeric: boolean;
|
|
begin
|
|
HandleNeeded;
|
|
if HandleAllocated then
|
|
Result := GetWindowLong(Handle, GWL_STYLE) and ES_NUMBER = ES_NUMBER
|
|
else
|
|
Result := false;
|
|
end;
|
|
|
|
procedure TEdit.SetNumeric(Value: boolean);
|
|
begin
|
|
HandleNeeded;
|
|
if HandleAllocated then
|
|
begin
|
|
if Value then
|
|
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) or ES_NUMBER)
|
|
else
|
|
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not ES_NUMBER);
|
|
end;
|
|
end;
|
|
|
|
procedure TEdit.WMPaste(var Msg: TMessage);
|
|
var
|
|
S: string;
|
|
begin
|
|
S := Text;
|
|
inherited;
|
|
if Numeric then
|
|
try
|
|
StrToInt(Text);
|
|
except
|
|
Text := S;
|
|
end;
|
|
end;
|
|
|
|
{ TfrmOptions }
|
|
|
|
class function TfrmOptions.Execute: boolean;
|
|
var Storage: TPersistStorage;
|
|
begin
|
|
with self.Create(Application) do
|
|
try
|
|
pcOptions.ActivePageIndex := 0;
|
|
Storage := PersistSettings.GetStorage;
|
|
try
|
|
Load(Storage);
|
|
Result := ShowModal = mrOK;
|
|
if Result then
|
|
begin
|
|
Save(Storage);
|
|
Storage.UpdateFile;
|
|
end;
|
|
finally
|
|
Storage.Free;
|
|
end;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmOptions.acBrowseExecute(Sender: TObject);
|
|
begin
|
|
JvBrowseFolder1.Directory := edLibPath.Text;
|
|
if JvBrowseFolder1.Execute then
|
|
edLibPath.Text := JvBrowseFolder1.Directory;
|
|
end;
|
|
|
|
procedure TfrmOptions.acAddExecute(Sender: TObject);
|
|
begin
|
|
with lvPaths.Items.Add do
|
|
begin
|
|
|
|
Caption := edLibPath.Text;
|
|
MakeVisible(true);
|
|
Selected := true;
|
|
Focused := true;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmOptions.acReplaceExecute(Sender: TObject);
|
|
begin
|
|
with lvPaths.Selected do
|
|
Caption := edLibPath.Text;
|
|
end;
|
|
|
|
procedure TfrmOptions.acDeleteExecute(Sender: TObject);
|
|
var i, j: integer;
|
|
begin
|
|
j := lvPaths.Items.Count;
|
|
for i := lvPaths.Items.Count - 1 downto 0 do
|
|
if lvPaths.Items[i].Selected then
|
|
begin
|
|
lvPaths.Items[i].Delete;
|
|
j := i;
|
|
end;
|
|
if (j >= 0) and (j < lvPaths.Items.Count) then
|
|
begin
|
|
lvPaths.Items[j].MakeVisible(true);
|
|
lvPaths.Items[j].Selected := true;
|
|
lvPaths.Items[j].Focused := true;
|
|
end;
|
|
if lvPaths.CanFocus then lvPaths.SetFocus;
|
|
end;
|
|
|
|
procedure TfrmOptions.Load(Storage: TPersistStorage);
|
|
var S: TStringlist; i: integer;
|
|
begin
|
|
inherited;
|
|
|
|
edShapeHeight.Text := IntToStr(Storage.ReadInteger('Options', 'ShapeHeight', 50));
|
|
edShapeWidth.Text := IntToStr(Storage.ReadInteger('Options', 'ShapeWidth', 100));
|
|
cbIntfColor.ColorValue := Storage.ReadInteger('Options', 'IntfColor', clBlack);
|
|
cbIntfSelColor.ColorValue := Storage.ReadInteger('Options', 'IntfSelColor', clRed);
|
|
cbImplColor.ColorValue := Storage.ReadInteger('Options', 'ImplColor', clBtnShadow);
|
|
cbImplSelColor.ColorValue := Storage.ReadInteger('Options', 'ImplSelColor', clBlue);
|
|
lvPaths.Items.Clear;
|
|
S := TStringlist.Create;
|
|
try
|
|
Storage.ReadSection('Library Paths', S);
|
|
for i := 0 to S.Count - 1 do
|
|
ListViewAddPath(S[i]);
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmOptions.Save(Storage: TPersistStorage);
|
|
var i: integer;
|
|
begin
|
|
inherited;
|
|
i := StrToIntDef(edShapeHeight.Text, 50);
|
|
if i < 40 then i := 40;
|
|
Storage.WriteInteger('Options', 'ShapeHeight', i);
|
|
i := StrToIntDef(edShapeWidth.Text, 100);
|
|
if i < 50 then i := 50;
|
|
Storage.WriteInteger('Options', 'ShapeWidth', i);
|
|
|
|
Storage.WriteInteger('Options', 'IntfColor', cbIntfColor.ColorValue);
|
|
Storage.WriteInteger('Options', 'IntfSelColor', cbIntfSelColor.ColorValue);
|
|
Storage.WriteInteger('Options', 'ImplColor', cbImplColor.ColorValue);
|
|
Storage.WriteInteger('Options', 'ImplSelColor', cbImplSelColor.ColorValue);
|
|
|
|
Storage.EraseSection('Library Paths');
|
|
for i := 0 to lvPaths.Items.Count - 1 do
|
|
Storage.WriteString('Library Paths', lvPaths.Items[i].Caption, '');
|
|
end;
|
|
|
|
procedure TfrmOptions.ListViewAddPath(const S: string);
|
|
begin
|
|
if (S <> '') and (lvPaths.FindCaption(0, S, false, true, true) = nil) then
|
|
lvPaths.Items.Add.Caption := S;
|
|
end;
|
|
|
|
procedure TfrmOptions.ListViewAddPaths(Version: integer; ForDelphi: boolean);
|
|
var S: TStringlist; i: integer;
|
|
begin
|
|
S := TStringlist.Create;
|
|
try
|
|
GetPathList(Version, ForDelphi, S);
|
|
for i := 0 to S.Count - 1 do
|
|
ListViewAddPath(S[i]);
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmOptions.alOptionsUpdate(Action: TBasicAction;
|
|
var Handled: Boolean);
|
|
begin
|
|
acAdd.Enabled := DirectoryExists(edLibPath.Text)
|
|
and (lvPaths.FindCaption(0, edLibPath.Text, false, true, true) = nil);
|
|
acDelete.Enabled := (lvPaths.Selected <> nil);
|
|
acReplace.Enabled := acAdd.Enabled and acDelete.Enabled;
|
|
acDelInvalidPaths.Enabled := lvPaths.Items.Count > 0;
|
|
end;
|
|
|
|
procedure TfrmOptions.acGetD5PathExecute(Sender: TObject);
|
|
begin
|
|
ListViewAddPaths(5, true);
|
|
end;
|
|
|
|
|
|
procedure TfrmOptions.acGetD6PathExecute(Sender: TObject);
|
|
begin
|
|
ListViewAddPaths(6, true);
|
|
end;
|
|
|
|
procedure TfrmOptions.acGetD7PathExecute(Sender: TObject);
|
|
begin
|
|
ListViewAddPaths(7, true);
|
|
end;
|
|
|
|
procedure TfrmOptions.acGetBCB5PathExecute(Sender: TObject);
|
|
begin
|
|
ListViewAddPaths(5, false);
|
|
end;
|
|
|
|
procedure TfrmOptions.acGetBCB6PathExecute(Sender: TObject);
|
|
begin
|
|
ListViewAddPaths(6, false);
|
|
end;
|
|
|
|
procedure TfrmOptions.acDelInvalidPathsExecute(Sender: TObject);
|
|
var i: integer;
|
|
begin
|
|
for i := lvPaths.Items.Count - 1 downto 0 do
|
|
if not DirectoryExists(lvPaths.Items[i].Caption) then
|
|
lvPaths.Items[i].Delete;
|
|
end;
|
|
|
|
procedure TfrmOptions.lvPathsSelectItem(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean);
|
|
begin
|
|
if Selected then
|
|
edLibPath.Text := Item.Caption;
|
|
end;
|
|
|
|
procedure TfrmOptions.lvPathsEnter(Sender: TObject);
|
|
begin
|
|
if (lvPaths.Selected = nil) and (lvPaths.Items.Count > 0) then
|
|
begin
|
|
lvPaths.Items[0].Selected := true;
|
|
lvPaths.Items[0].Focused := true;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmOptions.tabPathsShow(Sender: TObject);
|
|
begin
|
|
if lvPaths.CanFocus then lvPaths.SetFocus;
|
|
end;
|
|
|
|
|
|
procedure TfrmOptions.FormCreate(Sender: TObject);
|
|
begin
|
|
if edShapeWidth <> nil then
|
|
edShapeWidth.Numeric := true;
|
|
if edShapeHeight <> nil then
|
|
edShapeHeight.Numeric := true;
|
|
end;
|
|
|
|
procedure TfrmOptions.acSystemPathExecute(Sender: TObject);
|
|
begin
|
|
ListViewAddSystemPaths;
|
|
end;
|
|
|
|
procedure TfrmOptions.ListViewAddSystemPaths;
|
|
var S: TStringlist; i: integer;
|
|
begin
|
|
S := TStringlist.Create;
|
|
try
|
|
GetSystemPaths(S);
|
|
for i := 0 to S.Count - 1 do
|
|
ListViewAddPath(S[i]);
|
|
finally
|
|
S.Free;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmOptions.acSelectAllExecute(Sender: TObject);
|
|
var i: integer;
|
|
begin
|
|
for i := 0 to lvPaths.Items.Count - 1 do
|
|
lvPaths.Items[i].Selected := true;
|
|
end;
|
|
|
|
procedure TfrmOptions.acInvertSelectExecute(Sender: TObject);
|
|
var i: integer;
|
|
begin
|
|
for i := 0 to lvPaths.Items.Count - 1 do
|
|
lvPaths.Items[i].Selected := not lvPaths.Items[i].Selected;
|
|
end;
|
|
|
|
procedure TfrmOptions.acUnselectAllExecute(Sender: TObject);
|
|
var i: integer;
|
|
begin
|
|
for i := 0 to lvPaths.Items.Count - 1 do
|
|
lvPaths.Items[i].Selected := false;
|
|
end;
|
|
|
|
end.
|
|
|