Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Machbarkeit: Splitted Editor à la Word (https://www.delphipraxis.net/160418-machbarkeit-splitted-editor-%E0-la-word.html)

s.h.a.r.k 12. Mai 2011 02:27

Machbarkeit: Splitted Editor à la Word
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,

die Delphi-IDE ist an sich schon recht okay, aber an manchen stellen könnte es durchaus noch besser und flexibler werden. Zum einen fehlt mir im Moment die Funktion Shortcuts selbst definieren zu können, die dann auch noch global funktionieren -- ja, ich weiß es gibt entsprechende Experten, aber meist kollidieren manche Shortcuts. Und zum anderen will ich auch noch eine Funktion, die der angeheftete Mockup besser beschreiben kann, als ich hier mit Worten :stupid:

Es geht darum, ob es möglich ist via entsprechenden APIs den Delphi-Editor zu klonen und dazu noch einen Splitter einzubauen. Die Tabs sollen unabhängig voneinander funktionieren, sodass ich nicht auf beiden Seiten die gleiche Datei einsehen muss, ebenso unabhängig sollten die Scrollbars funktionieren. Wenn man eine neue Datei öffnet, so sollte diese in beiden Tabs vorhanden sein, d.h. die Tabs sollten komplett synchron sein, aber nur im "Main-Editor" aktiviert werden.

Nun steht eben die Frage im Raum, ob sowas überhaupt machbar ist? Denn ich selbst habe leider noch keinerlei Erfahrung mit den Delphi-IDE-APIs.

Einzig und allein die Erweiterung von Castalia kenne ich, die so halbwegs das macht, was ich haben will.

s-off 12. Mai 2011 08:01

AW: Machbarkeit: Splitted Editor à la Word
 
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.

stahli 13. Mai 2011 10:36

AW: Machbarkeit: Splitted Editor à la Word
 
@Armin
Da war doch mal was...

s.h.a.r.k 13. Mai 2011 14:41

AW: Machbarkeit: Splitted Editor à la Word
 
Habe die Funktion auch schon gefunden, zugegebenermaßen aber erst danach. Klar, das Problem, welches ich habe, löst diese Funktion schon, aber sie entspricht nicht ganz dem, was ich so haben will :stupid:

(man darf ja noch anspruchsvoll sein, oder? ;) )

Namenloser 13. Mai 2011 16:28

AW: Machbarkeit: Splitted Editor à la Word
 
[OT]Kleine Randnotiz: Das Partizip Perfekt von to split ist split, nicht splitted.[/OT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz