829d5adfe5
отличия от 2.88: + procedure TControl.TBClear; {* |<#toolbar> Deletes all buttons. Dufa } + property TControl.TBButtonLParam[const Idx: Integer]: DWORD read TBGetButtonLParam write TBSetButtonLParam; {* |<#toolbar> Allows to access/change LParam. Dufa } + добавлен MCKfakeClasses200x.inc для исправления глюка с ложными МСК варнингами(в версиях 2006-2009) // Dufa * DefFont = Tahoma * procedure TDirList.ScanDirectory исправлена утечка памяти // Dufa * function TControl.WndProcTransparent исправлено "странное" поведение приложения, при кол-во форм >= 2 // Galkov * procedure TControl.SetCurIndex устранен AV // Galkov * visual_xp_styles.inc: function IsManifestFilePresent : boolean; исправлена ошибка при работе с библиотеками //Dufa *** возможно что-то забыл.... %) git-svn-id: https://svn.code.sf.net/p/kolmck/code@3 91bb2d04-0c0c-4d2d-88a5-bbb6f4c1fa07
528 lines
13 KiB
ObjectPascal
528 lines
13 KiB
ObjectPascal
unit mckLVColumnsEditor;
|
|
|
|
interface
|
|
|
|
{$I KOLDEF.INC}
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
ExtCtrls, ComCtrls, StdCtrls,
|
|
{$IFDEF _D6orHigher}
|
|
DesignIntf, DesignEditors, DesignConst, Variants
|
|
{$ELSE}
|
|
DsgnIntf
|
|
{$ENDIF}
|
|
;
|
|
|
|
type
|
|
TfmLVColumnsEditor = class(TForm)
|
|
private
|
|
pnButtons: TPanel;
|
|
pnView: TPanel;
|
|
btAdd: TButton;
|
|
btDel: TButton;
|
|
btUp: TButton;
|
|
btDown: TButton;
|
|
chkStayOnTop: TCheckBox;
|
|
lvColumns: TListView;
|
|
procedure FormResize(Sender: TObject);
|
|
procedure FormShow(Sender: TObject);
|
|
procedure chkStayOnTopClick(Sender: TObject);
|
|
procedure btAddClick(Sender: TObject);
|
|
procedure btDelClick(Sender: TObject);
|
|
procedure btUpClick(Sender: TObject);
|
|
procedure btDownClick(Sender: TObject);
|
|
procedure FormKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
procedure lvColumnsSelectItem(Sender: TObject; Item: TListItem;
|
|
Selected: Boolean);
|
|
{$IFDEF VER90} {$DEFINE OLDDELPHI} {$ENDIF}
|
|
{$IFDEF VER100} {$DEFINE OLDDELPHI} {$ENDIF}
|
|
{$IFDEF OLDDELPHI}
|
|
procedure lvColumnsChange(Sender: TObject; Item: TListItem; Change: TItemChange);
|
|
{$ENDIF}
|
|
procedure lvColumnsEdited(Sender: TObject; Item: TListItem;
|
|
var S: String);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
private
|
|
{ Private declarations }
|
|
FListView: TComponent;
|
|
procedure SetListView(const Value: TComponent);
|
|
procedure AdjustButtons;
|
|
procedure SelectLV;
|
|
public
|
|
{ Public declarations }
|
|
property ListView: TComponent read FListView write SetListView;
|
|
procedure MakeActive( SelectAny: Boolean );
|
|
constructor Create( AOwner: TComponent ); override;
|
|
end;
|
|
|
|
var
|
|
fmLVColumnsEditor: TfmLVColumnsEditor;
|
|
|
|
implementation
|
|
|
|
uses mirror, mckCtrls, mckObjs;
|
|
|
|
procedure TfmLVColumnsEditor.AdjustButtons;
|
|
var LI: TListItem;
|
|
begin
|
|
LI := lvColumns.Selected;
|
|
if LI = nil then
|
|
begin
|
|
btAdd.Enabled := lvColumns.Items.Count = 0;
|
|
btDel.Enabled := FALSE;
|
|
btUp.Enabled := FALSE;
|
|
btDown.Enabled := FALSE;
|
|
end
|
|
else
|
|
begin
|
|
btAdd.Enabled := TRUE;
|
|
btDel.Enabled := TRUE;
|
|
btUp.Enabled := LI.Index > 0;
|
|
btDown.Enabled := LI.Index < lvColumns.Items.Count - 1;
|
|
end;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.FormResize(Sender: TObject);
|
|
begin
|
|
lvColumns.Columns[ 0 ].Width := lvColumns.ClientWidth;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.MakeActive(SelectAny: Boolean);
|
|
var F: TForm;
|
|
D: IDesigner;
|
|
FD: IFormDesigner;
|
|
Col: TKOLListViewColumn;
|
|
begin
|
|
if lvColumns.Items.Count > 0 then
|
|
if lvColumns.Selected = nil then
|
|
if SelectAny then
|
|
lvColumns.Selected := lvColumns.Items[ 0 ];
|
|
if lvColumns.Selected <> nil then
|
|
begin
|
|
Col := lvColumns.Selected.Data;
|
|
F := (FListView as TKOLListView).Owner as TForm;
|
|
if F <> nil then
|
|
begin
|
|
{$IFDEF _D6orHigher}
|
|
F.Designer.QueryInterface(IFormDesigner,D);
|
|
{$ELSE}
|
|
D := F.Designer;
|
|
{$ENDIF}
|
|
if D <> nil then
|
|
if QueryFormDesigner( D, FD ) then
|
|
begin
|
|
RemoveSelection( FD );
|
|
FD.SelectComponent( Col );
|
|
end;
|
|
end;
|
|
end;
|
|
AdjustButtons;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.SetListView(const Value: TComponent);
|
|
var LV: TKOLListView;
|
|
begin
|
|
FListView := Value;
|
|
LV := FListView as TKOLListView;
|
|
Caption := LV.Name + ' columns';
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.FormShow(Sender: TObject);
|
|
var I: Integer;
|
|
LI: TListItem;
|
|
Col: TKOLListViewColumn;
|
|
LV: TKOLListView;
|
|
begin
|
|
lvColumns.Items.BeginUpdate;
|
|
TRY
|
|
|
|
lvColumns.Items.Clear;
|
|
if FListView <> nil then
|
|
if FListView is TKOLListView then
|
|
begin
|
|
LV := FListView as TKOLListView;
|
|
for I := 0 to LV.Cols.Count-1 do
|
|
begin
|
|
LI := lvColumns.Items.Add;
|
|
Col := LV.Cols[ I ];
|
|
LI.Data := Col;
|
|
LI.Caption := Col.Caption;
|
|
end;
|
|
end;
|
|
|
|
FINALLY
|
|
lvColumns.Items.EndUpdate;
|
|
END;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.chkStayOnTopClick(Sender: TObject);
|
|
begin
|
|
if chkStayOnTop.Checked then
|
|
FormStyle := fsStayOnTop
|
|
else
|
|
FormStyle := fsNormal;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.btAddClick(Sender: TObject);
|
|
var LI: TListItem;
|
|
Col: TKOLListViewColumn;
|
|
LV: TKOLListView;
|
|
I: Integer;
|
|
S: String;
|
|
begin
|
|
if FListView = nil then Exit;
|
|
if not( FListView is TKOLListView ) then Exit;
|
|
LV := FListView as TKOLListView;
|
|
LI := lvColumns.Selected;
|
|
if LI = nil then
|
|
begin
|
|
Col := TKOLListViewColumn.Create( LV );
|
|
LI := lvColumns.Items.Add;
|
|
LI.Data := Col;
|
|
end
|
|
else
|
|
begin
|
|
if LI.Index >= lvColumns.Items.Count then
|
|
Col := TKOLListViewColumn.Create( LV )
|
|
else
|
|
begin
|
|
Col := TKOLListViewColumn.Create( LV );
|
|
LV.Cols.Move( lvColumns.Items.Count, LI.Index + 1 );
|
|
end;
|
|
LI := lvColumns.Items.Insert( LI.Index + 1 );
|
|
LI.Data := Col;
|
|
end;
|
|
if LV <> nil then
|
|
if LV.Owner is TForm then
|
|
for I := 1 to MaxInt do
|
|
begin
|
|
S := 'Col' + IntToStr( I );
|
|
if (LV.Owner as TForm).FindComponent( S ) = nil then
|
|
if LV.FindComponent( S ) = nil then
|
|
begin
|
|
Col.Name := S;
|
|
break;
|
|
end;
|
|
end;
|
|
if LV.HasOrderedColumns then
|
|
Col.LVColOrder := LI.Index;
|
|
lvColumns.Selected := nil;
|
|
lvColumns.Selected := LI;
|
|
lvColumns.ItemFocused := LI;
|
|
LI.MakeVisible( FALSE );
|
|
LI.EditCaption;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.btDelClick(Sender: TObject);
|
|
var LI: TListItem;
|
|
J: Integer;
|
|
Col: TKOLListViewColumn;
|
|
begin
|
|
LI := lvColumns.Selected;
|
|
if LI <> nil then
|
|
begin
|
|
J := LI.Index;
|
|
Col := LI.Data;
|
|
Col.Free;
|
|
LI.Free;
|
|
if J >= lvColumns.Items.Count then
|
|
Dec( J );
|
|
if J >= 0 then
|
|
begin
|
|
lvColumns.Selected := lvColumns.Items[ J ];
|
|
lvColumns.ItemFocused := lvColumns.Selected;
|
|
end;
|
|
end;
|
|
AdjustButtons;
|
|
if lvColumns.Items.Count = 0 then
|
|
SelectLV;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.btUpClick(Sender: TObject);
|
|
var LI, LI1: TListItem;
|
|
I: Integer;
|
|
LV: TKOLListView;
|
|
Col: TKOLListViewColumn;
|
|
begin
|
|
if FListView = nil then Exit;
|
|
if not(FListView is TKOLListView) then Exit;
|
|
LV := FListView as TKOLListView;
|
|
LI := lvColumns.Selected;
|
|
if LI = nil then Exit;
|
|
I := LI.Index - 1;
|
|
LI1 := lvColumns.Items.Insert( I );
|
|
LI1.Caption := LI.Caption;
|
|
LI1.Data := LI.Data;
|
|
LV.Cols.Move( I + 1, I );
|
|
LI.Free;
|
|
lvColumns.Selected := LI1;
|
|
lvColumns.ItemFocused := LI1;
|
|
Col := LI1.Data;
|
|
if Col.LVColOrder = LI1.Index + 1 then
|
|
Col.LVColOrder := LI1.Index;
|
|
AdjustButtons;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.btDownClick(Sender: TObject);
|
|
var LI, LI1: TListItem;
|
|
LV: TKOLListView;
|
|
Col: TKOLListViewColumn;
|
|
begin
|
|
if FListView = nil then Exit;
|
|
if not(FListView is TKOLListView) then Exit;
|
|
LV := FListView as TKOLListView;
|
|
LI := lvColumns.Selected;
|
|
if LI = nil then Exit;
|
|
LV.Cols.Move( LI.Index, LI.Index + 1 );
|
|
LI1 := lvColumns.Items.Insert( LI.Index + 2 );
|
|
LI1.Caption := LI.Caption;
|
|
LI1.Data := LI.Data;
|
|
LI.Free;
|
|
lvColumns.Selected := LI1;
|
|
lvColumns.ItemFocused := LI1;
|
|
Col := LI1.Data;
|
|
if Col.LVColOrder = LI1.Index - 1 then
|
|
Col.LVColOrder := LI1.Index;
|
|
AdjustButtons;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.FormKeyDown(Sender: TObject; var Key: Word;
|
|
Shift: TShiftState);
|
|
begin
|
|
case Key of
|
|
VK_INSERT: btAdd.Click;
|
|
VK_DELETE: if not lvColumns.IsEditing then btDel.Click;
|
|
VK_RETURN: if (ActiveControl = lvColumns) and not lvColumns.IsEditing and
|
|
(lvColumns.Selected <> nil) then
|
|
lvColumns.Selected.EditCaption;
|
|
VK_UP: if (GetKeyState( VK_CONTROL ) < 0) then
|
|
btUp.Click
|
|
else Exit;
|
|
VK_DOWN: if (GetKeyState( VK_CONTROL ) < 0) then
|
|
btDown.Click
|
|
else Exit;
|
|
else Exit;
|
|
end;
|
|
Key := 0;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.lvColumnsSelectItem(Sender: TObject;
|
|
Item: TListItem; Selected: Boolean);
|
|
begin
|
|
if Selected then
|
|
MakeActive( FALSE );
|
|
end;
|
|
|
|
{$IFDEF OLDDELPHI}
|
|
procedure TfmLVColumnsEditor.lvColumnsChange(Sender: TObject; Item: TListItem; Change: TItemChange);
|
|
begin
|
|
if lvColumns.Selected <> nil then
|
|
MakeActive( FALSE );
|
|
end;
|
|
{$ENDIF}
|
|
|
|
procedure TfmLVColumnsEditor.lvColumnsEdited(Sender: TObject;
|
|
Item: TListItem; var S: String);
|
|
var Col: TKOLListViewColumn;
|
|
begin
|
|
if Item = nil then Exit;
|
|
Col := Item.Data;
|
|
Col.Caption := S;
|
|
MakeActive( FALSE );
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.FormDestroy(Sender: TObject);
|
|
var LV: TKOLListView;
|
|
begin
|
|
if FListView = nil then Exit;
|
|
LV := FListView as TKOLListView;
|
|
LV.ActiveDesign := nil;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.FormClose(Sender: TObject;
|
|
var Action: TCloseAction);
|
|
begin
|
|
Rpt( 'Closing Listview columns editor', WHITE );
|
|
SelectLV;
|
|
modalResult := mrOK;
|
|
end;
|
|
|
|
procedure TfmLVColumnsEditor.SelectLV;
|
|
var F: TForm;
|
|
D: IDesigner;
|
|
FD: IFormDesigner;
|
|
begin
|
|
if FListView <> nil then
|
|
begin
|
|
F := (FListView as TKOLListView).Owner as TForm;
|
|
if F <> nil then
|
|
begin
|
|
Rpt( 'Form found: ' + F.Name, WHITE );
|
|
|
|
{$IFDEF _D6orHigher} //
|
|
F.Designer.QueryInterface(IFormDesigner,D); //
|
|
{$ELSE} //
|
|
D := F.Designer;
|
|
{$ENDIF} //
|
|
if D <> nil then
|
|
begin
|
|
|
|
Rpt( 'IDesigner interface returned', WHITE );
|
|
if QueryFormDesigner( D, FD ) then
|
|
begin
|
|
Rpt( 'IFormDesigner interface quered', WHITE );
|
|
try
|
|
RemoveSelection( FD );
|
|
FD.SelectComponent( FListView );
|
|
except
|
|
Rpt( 'EXCEPTION *** Could not clear selection!', WHITE )
|
|
end;
|
|
end;
|
|
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
constructor TfmLVColumnsEditor.Create(AOwner: TComponent);
|
|
begin
|
|
CreateNew(AOwner);
|
|
Left := 246;
|
|
Top := 107;
|
|
Width := 268;
|
|
Height := 314;
|
|
HorzScrollBar.Visible := False;
|
|
VertScrollBar.Visible := False;
|
|
BorderIcons := [biSystemMenu];
|
|
Caption := 'Columns';
|
|
//Color := clBtnFace;
|
|
//Font.Charset := DEFAULT_CHARSET;
|
|
//Font.Color := clWindowText;
|
|
//Font.Height := -11;
|
|
Font.Name := 'MS Sans Serif';
|
|
//Font.Style := [];
|
|
KeyPreview := True;
|
|
//OldCreateOrder := False;
|
|
Scaled := False;
|
|
OnClose := FormClose;
|
|
OnDestroy := FormDestroy;
|
|
OnKeyDown := FormKeyDown;
|
|
OnResize := FormResize;
|
|
OnShow := FormShow;
|
|
PixelsPerInch := 96;
|
|
//TextHeight := 13;
|
|
pnButtons := TPanel.Create( Self );
|
|
with pnButtons do
|
|
begin
|
|
Parent := Self;
|
|
Left := 150;
|
|
Top := 0;
|
|
Width := 110;
|
|
Height := 287;
|
|
Align := alRight;
|
|
BevelOuter := bvNone;
|
|
TabOrder := 0;
|
|
btAdd := TButton.Create( pnButtons );
|
|
with btAdd do
|
|
begin
|
|
Parent := pnButtons;
|
|
Left := 4;
|
|
Top := 4;
|
|
Width := 101;
|
|
Height := 25;
|
|
Caption := '&Add';
|
|
TabOrder := 0;
|
|
OnClick := btAddClick;
|
|
end;
|
|
btDel := TButton.Create( pnButtons );
|
|
with btDel do
|
|
begin
|
|
Parent := pnButtons;
|
|
Left := 4;
|
|
Top := 36;
|
|
Width := 101;
|
|
Height := 25;
|
|
Caption := '&Delete';
|
|
TabOrder := 1;
|
|
OnClick := btDelClick;
|
|
end;
|
|
btUp := TButton.Create( pnButtons );
|
|
with btUp do
|
|
begin
|
|
Parent := pnButtons;
|
|
Left := 4;
|
|
Top := 68;
|
|
Width := 49;
|
|
Height := 25;
|
|
Caption := '&Up';
|
|
TabOrder := 2;
|
|
OnClick := btUpClick;
|
|
end;
|
|
btDown := TButton.Create( pnButtons );
|
|
with btDown do
|
|
begin
|
|
Parent := pnButtons;
|
|
Left := 56;
|
|
Top := 68;
|
|
Width := 49;
|
|
Height := 25;
|
|
Caption := '&Down';
|
|
TabOrder := 3;
|
|
OnClick := btDownClick;
|
|
end;
|
|
chkStayOnTop := TCheckBox.Create( pnButtons );
|
|
with chkStayOnTop do
|
|
begin
|
|
Parent := pnButtons;
|
|
Left := 4;
|
|
Top := 100;
|
|
Width := 101;
|
|
Height := 17;
|
|
Caption := 'Stay On &Top';
|
|
TabOrder := 4;
|
|
OnClick := chkStayOnTopClick;
|
|
end;
|
|
end;
|
|
pnView := TPanel.Create( Self );
|
|
with pnView do
|
|
begin
|
|
Parent := Self;
|
|
Left := 0;
|
|
Top := 0;
|
|
Width := 150;
|
|
Height := 287;
|
|
Align := alClient;
|
|
BevelOuter := bvNone;
|
|
BorderWidth := 4;
|
|
TabOrder := 1;
|
|
lvColumns := TListView.Create( pnView );
|
|
with lvColumns do
|
|
begin
|
|
Parent := pnView;
|
|
Left := 4;
|
|
Top := 4;
|
|
Width := 142;
|
|
Height := 279;
|
|
Align := alClient;
|
|
Columns.Add;
|
|
HideSelection := False;
|
|
{$IFNDEF VER90}
|
|
RowSelect := True;
|
|
{$ENDIF}
|
|
ShowColumnHeaders := False;
|
|
TabOrder := 0;
|
|
ViewStyle := vsReport;
|
|
OnEdited := lvColumnsEdited;
|
|
{$IFDEF OLDDELPHI}
|
|
OnChange := lvColumnsChange;
|
|
{$ELSE}
|
|
OnSelectItem := lvColumnsSelectItem;
|
|
{$ENDIF}
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
end. |