Einzelnen Beitrag anzeigen

s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#2

AW: Machbarkeit: Splitted Editor à la Word

  Alt 12. Mai 2011, 08:01
Wäre Delphi etwas populärer, dann gäbe es sicherlich etwas vergleichbares wie dieses, was so manchen sicherlich im ersten Moment abschrecken aber im zweiten umso mehr faszinieren wird (na gut - sagen wir im zwanzigsten Moment ) - ich würde *fast* alles geben, den Vi als Editor in die Delphi-IDE integrieren zu können

In Sachen Flexibilität und Anpassbarkeit ist die Delphi-IDE leider von Haus aus recht mager bestückt. Die ToolsAPI bietet zwar schon einige Sachen, aber das Non plus ultra ist das auch nicht.
Zumindest aber in Sachen Shortcuts kannst Du Dir damit selber helfen - und das ist gar nicht so schwer.
Ich füge mal eine Unit von mir ein, die Dir das mit den Shortcuts anhand eines einfachen Beispiels demonstriert. Vielleicht ist das ein Einstieg.

Delphi-Quellcode:
Unit uKeyBindings2;

Interface

Uses Classes,
   Windows,
   ToolsAPI,
   Menus;

Type
   TKeyBindings = Class(TNotifierObject, IUnknown, IOTANotifier, IOTAKeyboardBinding)

      //IOTAKeyboardBinding
      Procedure BindKeyboard(Const BindingServices: IOTAKeyBindingServices);
      Function GetBindingType: TBindingType;
      Function GetDisplayName: String;
      Function GetName: String;

      //Testroutine für Taste F2
      Procedure Do_F2(Const Context: IOTAKeyContext; KeyCode: TShortCut; Var BindingResult: TKeyBindingResult);
   public
      Procedure Destroyed;
   End;

Procedure Register;

Implementation

Const
   InvalidIndex = -1;

Var
   BindingIndex: Integer;

Procedure Register;
Begin
   BindingIndex := (BorlandIDEServices As IOTAKeyBoardServices).AddKeyboardBinding(TKeyBindings.Create);
End;

//--------------------------------------------------------------------------------------------------------------------

{ TKeyBindings }

Procedure TKeyBindings.Do_F2(Const Context: IOTAKeyContext; KeyCode: TShortCut; Var BindingResult: TKeyBindingResult);
//Fügt Trennlinie in aktuelle Zeile ein
Var
   oEditorServices: IOTAEditorServices;
   oEditView: IOTAEditView;
Begin

   BindingResult := krHandled;

   oEditorServices := BorlandIDEServices As IOTAEditorServices;
   oEditView := oEditorServices.TopView; //Aktueller Buffer

   If Assigned(oEditView) Then Begin

      //An den Anfang springen, einen Zeilenumbruch einfügen, und wieder zurück an den Anfang springen
      oEditView.Buffer.EditPosition.Move(-1, 1);
      oEditView.Buffer.EditPosition.InsertText('//-------------------------------------------');
   End;
End;

//--------------------------------------------------------------------------------------------------------------------

Procedure TKeyBindings.BindKeyboard(Const BindingServices: IOTAKeyBindingServices);
//Registriert alles KeyBindings
Begin
   BindingServices.AddKeyBinding([ShortCut(Ord(VK_F2), [])], Do_F2, Nil);
End;

//--------------------------------------------------------------------------------------------------------------------

Function TKeyBindings.GetBindingType: TBindingType;
Begin
   Result := btPartial;
End;

//--------------------------------------------------------------------------------------------------------------------

Function TKeyBindings.GetDisplayName: String;
Begin
   Result := 'SOFF_KeyBindings';
End;

//--------------------------------------------------------------------------------------------------------------------

Function TKeyBindings.GetName: String;
Begin
   Result := 'SOFF_KeyBindings';
End;

//--------------------------------------------------------------------------------------------------------------------

Procedure TKeyBindings.Destroyed;
Begin
   If BindingIndex > InvalidIndex Then
      (BorlandIDEServices As IOTAKeyBoardServices).RemoveKeyboardBinding(BindingIndex);

   BindingIndex := InvalidIndex;
End;

//--------------------------------------------------------------------------------------------------------------------

Initialization
   BindingIndex := InvalidIndex;

End.
Gruß
s-off

Geändert von s-off (12. Mai 2011 um 08:49 Uhr)
  Mit Zitat antworten Zitat