![]() |
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 ![]() |
AW: Machbarkeit: Splitted Editor à la Word
Wäre Delphi etwas populärer, dann gäbe es sicherlich etwas vergleichbares wie
![]() 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. |
AW: Machbarkeit: Splitted Editor à la Word
|
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? ;) ) |
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 10:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz