📄 mxoutlookbarproeditor.pas
字号:
Procedure TmxHeaderEditor.SelectButton( AButton: TmxButton );
Var
FComponents: TDesignerSelectionList;
Begin
If CheckCollection And Active Then
Begin
FComponents := {$IFDEF DELPHI6_UP}TDesignerSelections{$ELSE}TDesignerSelectionList{$ENDIF}.Create;
If AButton <> Nil Then
FComponents.Add( AButton ) Else
FComponents.Add( OutlookBarPro );
SetSelection( FComponents );
End;
End;
Function TmxHeaderEditor.ButtonByRow( ARow: Integer ): TmxButton;
Begin
Result := Nil;
If ARow >= 0 Then
Begin
If FActiveHeader <> Nil Then
Begin
If ARow < FActiveHeader.ButtonCount Then
Result := FActiveHeader.Buttons[ ARow ];
End;
End;
End;
Function TmxHeaderEditor.HeaderByRow( ARow: Integer ): TmxHeader;
Begin
Result := Nil;
If CheckCollection And ( ARow >= 0 ) And ( ARow < OutlookBarPro.HeaderCount ) Then
Begin
Result := OutlookBarPro.Headers[ ARow ];
End;
End;
{$IFDEF DELPHI6_UP}
Procedure TmxHeaderEditor.ItemDeleted( Const ADesigner: IDesigner; Item: TPersistent );
Begin
If Item = OutlookBarPro Then
Begin
OutlookBarPro := Nil;
Close;
End;
If Item = FActiveHeader Then
Begin
FActiveHeader := Nil;
Grid_Buttons.RowCount := 2;
End;
End;
{$ELSE}
Procedure TmxHeaderEditor.ComponentDeleted( Component: IPersistent );
Begin
If ExtractPersistent( Component ) = OutlookBarPro Then
Begin
OutlookBarPro := Nil;
Close;
End;
If ExtractPersistent( Component ) = FActiveHeader Then
Begin
FActiveHeader := Nil;
Grid_Buttons.RowCount := 2;
End;
End;
{$ENDIF}
Procedure DrawCellTextEx( Control: TCustomControl; ACol, ARow: Longint; Const S: String; Const ARect: TRect; Align: TAlignment; VerticalAlign: TmxVerticalAlignment; WordWrap: Boolean; ARightToLeft: Boolean );
Var
H: Integer;
Begin
H := 2;
Case VerticalAlign Of
vaTopJustify: H := 2;
vaCenter: H := Max( 1, ( ARect.Bottom - ARect.Top - TCustomClass( Control ).Canvas.TextHeight( 'W' ) ) Div 2 );
vaBottomJustify: H := Max( 2, ARect.Bottom - ARect.Top - TCustomClass( Control ).Canvas.TextHeight( 'W' ) );
End;
WriteText( TCustomClass( Control ).Canvas, ARect, 2, H, S, Align, WordWrap, ARightToLeft );
End;
Procedure DrawCellText( Control: TCustomControl; ACol, ARow: Longint; Const S: String; Const ARect: TRect; Align: TAlignment; VerticalAlign: TmxVerticalAlignment; ARightToLeft: Boolean );
Begin
DrawCellTextEx( Control, ACol, ARow, S, ARect, Align, VerticalAlign, Align = taCenter, ARightToLeft );
End;
Procedure TmxHeaderEditor.grid_HeadersDrawCell( Sender: TObject; Col, Row: Longint; Rect: TRect; State: TGridDrawState );
Var
Text: String;
AHeader: TmxHeader;
Begin
If FDeleting Then Exit;
Text := '';
If gdFixed In State Then Text := 'Header name' Else
Begin
AHeader := HeaderByRow( Row - 1 );
If AHeader <> Nil Then Text := AHeader.Name;
End;
DrawCellText( grid_Headers, Col, Row, Text, Rect, taLeftJustify, vaCenter, False );
End;
Procedure TmxHeaderEditor.grid_HeadersSelectCell( Sender: TObject; Col, Row: Longint; Var CanSelect: Boolean );
Begin
SelectHeader( HeaderByRow( Row - 1 ) );
End;
Procedure TmxHeaderEditor.btn_CloseClick( Sender: TObject );
Begin
Close;
End;
Procedure TmxHeaderEditor.btn_DeleteClick( Sender: TObject );
Var
AHeader: TmxHeader;
Begin
AHeader := HeaderByRow( grid_Headers.Row - 1 );
If AHeader <> Nil Then
Begin
If FActiveHeader <> Nil Then
If FActiveHeader = AHeader Then FActiveHeader := Nil;
FDeleting := True;
OutlookBarPro.DeleteHeader( AHeader.HeaderIndex );
FDeleting := False;
If OutlookBarPro.HeaderCount > 0 Then
Begin
AHeader := HeaderByRow( grid_Headers.Row - 1 );
SelectHeader( AHeader );
End
Else SelectHeader( Nil );
UpdateData;
Designer.Modified;
End;
End;
Procedure TmxHeaderEditor.grid_HeadersKeyDown( Sender: TObject; Var Key: Word; Shift: TShiftState );
Begin
If Shift = [ ] Then
Case Key Of
VK_RETURN: If HeaderByRow( grid_Headers.Row - 1 ) <> Nil Then ActivateInspector( #0 );
VK_DELETE: btn_DeleteClick( Nil );
End;
End;
Procedure TmxHeaderEditor.FormCreate( Sender: TObject );
Begin
OutlookBarPro := Nil;
FActiveHeader := Nil;
FDeleting := False;
If NewStyleControls Then Font.Style := [ ];
End;
Procedure TmxHeaderEditor.FormResize( Sender: TObject );
Begin
With grid_Headers Do ColWidths[ 0 ] := ClientWidth;
End;
{$IFDEF DELPHI6_UP}
Function TmxHeaderEditor.EditAction( Action: TEditAction ): Boolean;
Begin
Result := True;
{$ELSE}
Procedure TmxHeaderEditor.EditAction( Action: TEditAction );
Begin
{$ENDIF}
Case Action Of
eaDelete: btn_DeleteClick( Self );
End;
End;
Procedure TmxHeaderEditor.btn_NewClick( Sender: TObject );
Var
I: Integer;
AHeader: TmxHeader;
Begin
AHeader := OutlookBarPro.AddHeader;
If AHeader <> Nil Then
Try
With OutlookBarPro Do
Begin
I := AHeader.HeaderIndex;
If ActiveHeader = Nil Then ActiveHeader := AHeader;
End;
SelectHeader( AHeader );
Designer.Modified;
ActivateInspector( #0 );
grid_Headers.Row := I + 1;
Except
AHeader.Free;
Raise;
End
Else Raise Exception.Create( 'Cannot create new header' );
End;
Procedure TmxHeaderEditor.btn_ClearClick( Sender: TObject );
Begin
If MessageDlg( 'Do you really want to delete all headers?', mtConfirmation, [ mbOK, mbCancel ], 0 ) = mrOK Then
Begin
OutlookBarPro.ClearHeaders;
UpdateData;
End;
End;
Procedure TmxHeaderEditor.Activated;
Begin
SelectHeader( HeaderByRow( grid_Headers.Row - 1 ) );
End;
Function TmxHeaderEditor.UniqueName( Component: TComponent ): String;
Begin
Result := '';
End;
Procedure TmxHeaderEditor.Splitter1Moved( Sender: TObject );
Begin
ClientPanelResize( Self );
End;
Procedure TmxHeaderEditor.ClientPanelResize( Sender: TObject );
Begin
grid_Headers.ColWidths[ 0 ] := grid_Headers.ClientWidth;
Grid_Buttons.ColWidths[ 0 ] := Grid_Buttons.ClientWidth;
End;
Procedure TmxHeaderEditor.FormShow( Sender: TObject );
Begin
ClientPanelResize( Self );
End;
Procedure TmxHeaderEditor.Grid_ButtonsDrawCell( Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState );
Var
Text: String;
AButton: TmxButton;
Begin
If FDeleting Then Exit;
Text := '';
If gdFixed In State Then Text := 'Button name' Else
Begin
AButton := ButtonByRow( ARow - 1 );
If AButton <> Nil Then Text := AButton.Name;
End;
DrawCellText( Grid_Buttons, ACol, ARow, Text, Rect, taLeftJustify, vaCenter, False );
End;
Procedure TmxHeaderEditor.Grid_ButtonsKeyDown( Sender: TObject; Var Key: Word; Shift: TShiftState );
Begin
If Shift = [ ] Then
Case Key Of
VK_RETURN: If ButtonByRow( Grid_Buttons.Row - 1 ) <> Nil Then ActivateInspector( #0 );
VK_DELETE: btn_DeleteClick( Nil );
End;
End;
Procedure TmxHeaderEditor.btn_DeleteButtonClick( Sender: TObject );
Var
AHeader: TmxHeader;
AButton: TmxButton;
Begin
AHeader := HeaderByRow( grid_Headers.Row - 1 );
If AHeader <> Nil Then
Begin
AButton := ButtonByRow( Grid_Buttons.Row - 1 );
If AButton <> Nil Then
Begin
AHeader.DeleteButton( AButton.ButtonIndex );
SelectHeader( AHeader );
If Grid_Buttons.RowCount > 2 Then Grid_Buttons.RowCount := Grid_Buttons.RowCount - 1;
UpdateData;
Designer.Modified;
End;
End;
End;
Procedure TmxHeaderEditor.Grid_ButtonsSelectCell( Sender: TObject; ACol, ARow: Integer; Var CanSelect: Boolean );
Begin
SelectButton( ButtonByRow( ARow - 1 ) );
End;
Procedure TmxHeaderEditor.btn_NewButtonClick( Sender: TObject );
Var
AButton: TmxButton;
Begin
AButton := FActiveHeader.AddButton;
If AButton <> Nil Then
Try
SelectHeader( FActiveHeader );
SelectButton( AButton );
Designer.Modified;
ActivateInspector( #0 );
grid_Buttons.Row := AButton.ButtonIndex + 1;
Except
AButton.Free;
Raise;
End
Else Raise Exception.Create( 'Cannot create new button' );
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -