1.如果不需要岗位自动登录选项---------------------------------------------------
// 不舒服,暂时这样
FDefaultPosition := nil;
if TSystemLoginDialog.GetPersonMember <> nil then
for I := 0 to TSystemCore.Operator.PositionCount - 1 do
if TSystemCore.Operator.Positions[I].PersonMember = TSystemLoginDialog.GetPersonMember then
begin
FDefaultPosition := TSystemCore.Operator.Positions[I];
Break;
end
-----------------------
replace----------------
------------------------
FDefaultPosition := nil;
if TSystemLoginDialog.GetPersonMember <> nil then
for I := 0 to TSystemCore.Operator.PositionCount - 1 do
if TSystemCore.Operator.Positions[I].PersonMember = TSystemLoginDialog.GetPersonMember then
begin
FDefaultPosition := TSystemCore.Operator.Positions[I];
Break;
end;
//added by alang 2007-12-07
if (SystemCore.TSystemCore.Operator.ID<>'SYSTEM') AND (not Assigned(FDefaultPosition)) then
FDefaultPosition := SystemCore.TSystemCore.Operator.DefaultPosition;
//end added by alang 2007-12-07
2.-------------------------------------修改statusbar切换岗位显示不对问题
function TSTANDARDSTYLEMAINFORM.CreateStatusBarText(var L: Integer;
Parent: TWinControl; const Text: string; IsLast: Boolean): TFrameButton;
var
Spacer: TBevel;
begin
Result := TFrameButton.Create(Self);
Result.Parent := Parent;
Result.Resource := FrameButtonResource;
Result.ActiveFrames := 'StatusBarText';
Result.Text := Text;
Result.Width := Canvas.TextWidth(Text) + 16;
Result.Left := L;
L := L + Result.Width;
if not IsLast then
begin
Result.Align := TAlign.alLeft;
Spacer := TBevel.Create(Self);
Spacer.Parent := Parent;
Spacer.Align := TAlign.alLeft;
Spacer.Shape := TBevelShape.bsSpacer;
Spacer.Width := 3;
Spacer.Left := L;
L := L + Spacer.Width;
end;
end;
-----------------------
replace----------------
------------------------
//added by alang 2007-12-07
var
FB: TFrameButton;
//end added by alang 2007-12-07
function TSTANDARDSTYLEMAINFORM.CreateStatusBarText(var L: Integer;
Parent: TWinControl; const Text: string; IsLast: Boolean): TFrameButton;
var
Spacer: TBevel;
begin
//delete by alang 2007-12-07
// Result := TFrameButton.Create(Self);
//end delete by alang 2007-12-07
//added by alang 2007-12-07
if not Assigned(FB) then FB := TFrameButton.Create(Self);
Result := FB;
//end added by alang 2007-12-07
Result.Parent := Parent;
Result.Resource := FrameButtonResource;
Result.ActiveFrames := 'StatusBarText';
Result.Text := Text;
Result.Width := Canvas.TextWidth(Text) + 16;
Result.Left := L;
L := L + Result.Width;
if not IsLast then
begin
Result.Align := TAlign.alLeft;
Spacer := TBevel.Create(Self);
Spacer.Parent := Parent;
Spacer.Align := TAlign.alLeft;
Spacer.Shape := TBevelShape.bsSpacer;
Spacer.Width := 3;
Spacer.Left := L;
L := L + Spacer.Width;
end;
end;
3、procedure TSTANDARDSTYLEMAINFORM.fbtLogoutClick(Sender: TObject); 修改为
--------------------
// actFileLogout.Execute;
procedure TSTANDARDSTYLEMAINFORM.fbtLogoutClick(Sender: TObject);
//added by alang 2007-12-07
var
I: Integer;
lFunc: TFunc;
lTree: TBaseTree;
lPosition: TOperatorPosition;
//end added by alang 2007-12-07
begin
//delete by alang 2007-12-07
// actFileLogout.Execute;
//end delete by alang 2007-12-07
//added by alang 2007-12-07
//修改用途为岗位切换
actFileCloseAll.Execute;
lPosition := FDefaultPosition;
if TSelectPositionDialog.SelectPosition(TSystemCore.Operator, lPosition) and
(FDefaultPosition <> lPosition) then
begin
FDefaultPosition := lPosition;
for I:= FFuncContainers.Count-1 downto 0 do
begin
lFunc := TFuncContainer(FFuncContainers).Func;
RemoveFunc(TFuncContainer(FFuncContainers).Func);
if lFunc<>nil then
lFunc.Terminate;
end;
FFuncContainers.Clear;
ApplySetting(False);
if SysUtils.SameText(SysSrv.SysService.Config.Attributes('defaultfuncs/enabled', 'true'), 'true') then
begin
if not FNotFirstRun then
begin
GetDefaultFuncs(OrgSys.DefaultFuncs);
FNotFirstRun := True;
end;
EnsureFuncItems(OrgSys.DefaultFuncs, FDefaultPosition);
end;
//jhm free auto runfuncs
FreeAutoRunFuncs;
//end by jhm
if Assigned(FFuncNavBar) then FFuncNavBar.Free;
if FDefaultPosition = nil then
FFuncNavBar := TOperatorFuncNavBar.Create(TSystemCore.Operator.Context)
else
FFuncNavBar := TOperatorFuncNavBar.Create(FDefaultPosition.Context);
//jhm 2008-11-2 load AllocatedFuncs
FFuncNavBar.RefreshFuncs;
//end by jhm
FFuncNavBar.Parent := pnlFuncTree;//HidePanel;
FFuncNavBar.Width := 180;
FFuncNavBar.View := 14;
FFuncNavBar.Align := TAlign.alClient;
FFuncNavBar.BorderStyle := TFormBorderStyle.bsNone;
FFuncNavBar.SmallImages := TImageList(TComponentsLib.UserGraphics.ImageList16);
FFuncNavBar.LargeImages := TImageList(TComponentsLib.UserGraphics.ImageList24);
FFuncNavBar.DefaultStyles.Background.BackColor := 15855854;
FFuncNavBar.DefaultStyles.Background.BackColor2 := 15855854;
FFuncNavBar.DefaultStyles.Background.GradientMode := TdxBarStyleGradientMode.gmForwardDiagonal;
// FFuncNavBar.DefaultStyles.GroupHeader.HAlignment := TdxBarStyleHAlignment.haCenter;
FFuncNavBar.DefaultStyles.GroupHeader.Font.Color := Graphics.clBlack;
FFuncNavBar.DefaultStyles.GroupHeader.Font.Style := [];
FFuncNavBar.DefaultStyles.GroupHeader.AlphaBlending := 100;
FFuncNavBar.DefaultStyles.GroupHeader.BackColor := 15260372;
FFuncNavBar.DefaultStyles.GroupHeader.BackColor2 := 15128272;
// FFuncNavBar.DefaultStyles.GroupHeaderHotTracked.HAlignment := TdxBarStyleHAlignment.haCenter;
FFuncNavBar.DefaultStyles.GroupHeaderHotTracked.Font.Color := Graphics.clWhite;
FFuncNavBar.DefaultStyles.GroupHeaderHotTracked.AlphaBlending2 := 250;
FFuncNavBar.DefaultStyles.GroupHeaderHotTracked.BackColor := 6343771;//4641273;
FFuncNavBar.DefaultStyles.GroupHeaderHotTracked.BackColor2 := 2792213;//4641273;
// FFuncNavBar.DefaultStyles.GroupHeaderPressed.HAlignment := TdxBarStyleHAlignment.haCenter;
FFuncNavBar.DefaultStyles.GroupHeaderPressed.Font.Color := Graphics.clWhite;
FFuncNavBar.DefaultStyles.GroupHeaderPressed.AlphaBlending2 := 250;
FFuncNavBar.DefaultStyles.GroupHeaderPressed.BackColor := 6343771;
FFuncNavBar.DefaultStyles.GroupHeaderPressed.BackColor2 := 2792213;
FFuncNavBar.DefaultStyles.GroupHeaderActivePressed.AlphaBlending2 := 250;
FFuncNavBar.DefaultStyles.GroupHeaderActivePressed.BackColor := 6343771;
FFuncNavBar.DefaultStyles.GroupHeaderActivePressed.BackColor2 := 2792213;
FFuncNavBar.DefaultStyles.GroupHeaderActive.AlphaBlending2 := 250;
FFuncNavBar.DefaultStyles.GroupHeaderActive.BackColor := 6343771;
FFuncNavBar.DefaultStyles.GroupHeaderActive.BackColor2 := 2792213;
FFuncNavBar.DefaultStyles.GroupHeaderActiveHotTracked.AlphaBlending2 := 250;
FFuncNavBar.DefaultStyles.GroupHeaderActiveHotTracked.BackColor := 6343771;
FFuncNavBar.DefaultStyles.GroupHeaderActiveHotTracked.BackColor2 := 2792213;
for I := 0 to FFuncNavBar.Groups.Count - 1 do
begin
FFuncNavBar.Groups[I].UseSmallImages := False;
FFuncNavBar.Groups[I].LargeImageIndex := 8;
end;
//Borland.Delphi.Windows.SetWindowText(OrgTreeView.Handle, '组织机构');
InitStatusBar;
InitFuncTreeTabs;
SetBizGroup(0);
//jhm 2008-11-02 run auto funcs
ApplyDesktops;
DelayRunFuncsTimer.Enabled := True;
//jhm run fist funcs
RunFirstFuncTimer.Enabled := True;
//end by jhm
{if FFuncContainers.Count>0 then
ShowContainer(TFuncContainer(FFuncContainers[0]));
}
{ lTree := FUserTreeView.BaseTree;
FUserTreeView.BaseTree := nil;
FUserListView.BaseTree := nil;
FFavoritesCommonFrame.FavoritesTreeView.BaseTree := nil;
try
FUserTreeView.Items.Clear;
FFavoritesCommonFrame.FavoritesTreeView.Items.Clear;
TCommonComponentLibrary.UserSystem.CurrentPosition := lPosition;
finally
FUserTreeView.BaseTree := lTree;
FUserListView.BaseTree := lTree;
FFavoritesCommonFrame.FavoritesTreeView.BaseTree := lTree;
FUserTreeView.ReloadTree;
FFavoritesCommonFrame.FavoritesTreeView.ReloadTree;
end;
InitializeMainForm;
RefreshFuncs;
} end;
//end added by alang 2007-12-07
end;
4、
a、在标准风格主窗体的窗体库底下新建一个窗体-> SelectPositionDialog
b、选择岗位窗体控件资源(贴到窗体库-新窗体(SelectPositionDialog)里面)
-----------------------------------------------------------------------------
object lblPositions: TLabel
Left = 304
Top = 16
Width = 66
Height = 12
Caption = #25152#26377#23703#20301'(& )'
FocusControl = ocPosition
end
object ocPosition: TOrgChart
Left = 16
Top = 32
Width = 368
Height = 300
AutoLoad = False
BizOperates = []
NodeAutoSize = False
UseLargeImageList = False
DefaultNodeWidth = 90
DefaultNodeHeight = 36
EditMode = [emCenter, emVCenter, emWrap, emGrow]
DefaultImageAlign = iaLC
Options = [ocSelect, ocFocus, ocRect3D]
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = #23435#20307
Font.Style = []
OnChanging = ocPositionChanging
end
object btnOK: TButton
Left = 182
Top = 348
Width = 75
Height = 21
Caption = #30830#23450
Default = True
ModalResult = 1
TabOrder = 1
end
object CancelBtn: TButton
Left = 297
Top = 348
Width = 75
Height = 21
Cancel = True
Caption = #21462#28040
ModalResult = 2
TabOrder = 0
end
-----------------------------------------------------------------------------
5、pas
-----------
注意重新把
procedure BizFormCreate(Sender: TObject);
procedure BizFormDestroy(Sender: TObject);
procedure ocPositionChanging(Sender: TObject; Node: TOrgChartNode; var Allow: Boolean);
3个事件与窗体和ocPosition对应事件关联
---------
unit SelectPositionDialog;
interface
uses
Business.System, Business.Forms, Business.Model, Business.Model.Org;
type
{ TSelectPositionDialog }
TSelectPositionDialog = class(TForm)
lblPositions: TLabel;
CancelBtn: TButton;
btnOK: TButton;
ocPosition: TOrgChart;
procedure BizFormCreate(Sender: TObject);
procedure BizFormDestroy(Sender: TObject);
procedure ocPositionChanging(Sender: TObject; Node: TOrgChartNode; var Allow: Boolean);
private FPositions: TStringList;
private procedure Load(AOperator: TOperator);
private function GetSelected: TOperatorPosition;
private procedure SetSelected(Value: TOperatorPosition);
public static function SelectPosition(AOperator: TOperator;
var APosition: TOperatorPosition): Boolean;
property Selected: TOperatorPosition read GetSelected write SetSelected;
end;
implementation
{ TSelectPositionDialog }
procedure TSelectPositionDialog.Load(AOperator: TOperator);
var
I: Integer;
S: string;
lPositions: TStringList;
lPosition: TOperatorPosition;
begin
lPositions := TStringList.Create;
try
lPositions.Duplicates := TDuplicates.dupIgnore;
lPositions.Sorted := True;
for I := 0 to AOperator.PositionCount - 1 do
begin
lPosition := AOperator.Positions[I];// as TOperatorPosition;
S := lPosition.PersonMember.BizURL.URL;
if FPositions.IndexOf(S) >= 0 then
Continue;
FPositions.AddObject(S, lPosition);
while not SysUtils.SameText(S, JSConst.cOrgFilePrefix + '\root') do
begin
lPositions.Add(S);
JSCommon.SplitStrRight(FileSys.FileUtils.PathDelim, S);
end;
end;
ocPosition.BizURLs := lPositions;
ocPosition.HandleNeeded;
ocPosition.ReloadChart;
ocPosition.FullExpand;
finally
lPositions.Free;
end;
end;
function TSelectPositionDialog.GetSelected: TOperatorPosition;
var
lIndex: Integer;
lBizNode: TBizNode;
begin
if ocPosition.Selected = nil then
Result := nil
else
begin
lBizNode := (ocPosition.Selected.Data as TBizNode);
lIndex := FPositions.IndexOf(lBizNode.BizURL.URL);
if lIndex <> -1 then
Result := FPositions.Objects[lIndex] as TOperatorPosition
else
Result := nil;
end;
end;
procedure TSelectPositionDialog.SetSelected(Value: TOperatorPosition);
var
I: Integer;
lNode: TOrgChartNode;
begin
if Value <> nil then
begin
lNode := ocPosition.GetFirstNode;
while lNode <> nil do
begin
if Value.PersonMember.BizURL.Equals((lNode.Data as TBizNode).BizURL) then
begin
ocPosition.Selected := lNode;
Exit;
end;
lNode := lNode.GetNext;
end;
end;
ocPosition.Selected := nil;
end;
static function TSelectPositionDialog.SelectPosition(AOperator: TOperator;
var APosition: TOperatorPosition): Boolean;
var
lDialog: TSelectPositionDialog;
begin
lDialog := TSelectPositionDialog.Create(BizSys.GlobalContext);
try
lDialog.Load(AOperator);
lDialog.Selected := APosition;
Result := lDialog.ShowModal = Controls.mrOK;
if Result then
APosition := lDialog.Selected;
finally
lDialog.Free;
end;
end;
procedure TSelectPositionDialog.BizFormCreate(Sender: TObject);
begin
FPositions := TStringList.Create;
FPositions.Duplicates := TDuplicates.dupIgnore;
FPositions.Sorted := True;
ocPosition.RootNodes.Clear;
ocPosition.ShowOptions := [TBizObjectKind.boOrgan, TBizObjectKind.boDept,
TBizObjectKind.boPositionMember, TBizObjectKind.boPersonMember];
end;
procedure TSelectPositionDialog.BizFormDestroy(Sender: TObject);
begin
FPositions.Free;
end;
procedure TSelectPositionDialog.ocPositionChanging(Sender: TObject;
Node: TOrgChartNode; var Allow: Boolean);
begin
Allow := (Node <> nil) and ((Node.Data as TBizNode).NodeKind = TBizObjectKind.boPersonMember);
end;
end. |