Kod:
unit EditorClass;
interface
uses
//sınıf içerisinden şimdilik test için kullanılan lüzumsuz unitlerde oldugu için kafanız
//karışmasın, zamanı gelince ayıtlayacağım.
Windows,SysUtils, StdCtrls,ImgList, Controls, Classes, ExtCtrls, ComCtrls,Graphics,
SynEditSearch,uHighlighterProcs,cxControls, cxContainer, cxListBox,
SynHighlighterPas, SynHighlighterIni,SynHighlighterGWS, SynHighlighterM3,
SynHighlighterHtml, SynHighlighterModelica, SynHighlighterGeneral,
SynHighlighterAsm, SynHighlighterIDL, SynHighlighterVB, SynHighlighterDml,
SynHighlighterSml, SynHighlighterTclTk, SynHighlighterGalaxy,
SynHighlighterFoxpro, SynHighlighterFortran, SynHighlighterSQL,
SynEditPythonBehaviour, SynHighlighterPython, SynHighlighterDfm,
SynHighlighterCSS, SynHighlighterProgress, SynHighlighterPHP,
SynHighlighterCAC, SynHighlighterPerl, SynHighlighterCache,
SynHighlighterCpp, SynHighlighterBat, SynHighlighterST,
SynHighlighterVBScript, SynHighlighterBaan, SynHighlighterXML,
SynHighlighterKix, SynHighlighterAWK, SynHighlighterUnreal,
SynHighlighterJScript, SynHighlighterADSP21xx, SynHighlighterHC11,
SynHighlighterJava, SynHighlighterMsg, SynHighlighterSDD,
SynHighlighterInno, SynEditHighlighter, SynHighlighterCPM,
SynCompletionProposal, SynExportRTF, SynEditExport, SynExportHTML,
Dialogs, SynEdit,SynEditKeyCmdsEditor, SynEditKeyCmds, RsRuler,Variants, cxPC;
type
//Editor ana sınıfı
TArsivEditor = Class(TSynEdit)
procedure SetRulerFlat(const AFlat: Boolean);
procedure SetRulerUnits(Const UnitIndex : Integer);
procedure SetRulerHairLineStyle(Const StyleIndex : Integer);
private
FSagUstKoseKorner: TRsRulerCorner;
FSolUstKoseKorner: TRsRulerCorner;
FSagAltKoseKorner: TRsRulerCorner;
FSolAltKoseKorner: TRsRulerCorner;
FCetvelSag: TRsRuler;
FCetvelUst: TRsRuler;
FCetvelSol: TRsRuler;
FCetvelAlt: TRsRuler;
FTabSheet: TcxTabSheet;
FMouseOlaylariniIzle: Boolean;
FOlayListBox: TcxListBox;
FKlavyeOlaylariniIzle: Boolean;
FDigerOlaylariIzle: Boolean;
FSuruklemeOlaylariniIzle: Boolean;
procedure LogEvent(AEvent: string);
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure KeyPress(Sender: TObject; var Key: Char);
procedure KeyUp(Sender: TObject; var Key: Word;Shift: TShiftState);
procedure MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
procedure Paint(Sender: TObject; ACanvas: TCanvas);
procedure ProcessCommand(Sender: TObject; var Command: TSynEditorCommand; var AChar: Char; Data: Pointer);
procedure ProcessUserCommand(Sender: TObject; var Command: TSynEditorCommand; var AChar: Char; Data: Pointer);
procedure ReplaceText(Sender: TObject; const ASearch, AReplace: String;Line, Column: Integer; var Action: TSynReplaceAction);
procedure StartDrag(Sender: TObject; var DragObject: TDragObject);
procedure EditorDblClick(Sender: TObject);
procedure EditorDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure EditorDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure EditorDropFiles(Sender: TObject; X, Y: Integer;
AFiles: TStrings);
procedure EditorEndDrag(Sender, Target: TObject; X, Y: Integer);
procedure EditorEnter(Sender: TObject);
procedure EditorExit(Sender: TObject);
published
property SolUstKoseKorner : TRsRulerCorner Read FSolUstKoseKorner;
property SagUstKoseKorner : TRsRulerCorner Read FSagUstKoseKorner;
property SolAltKoseKorner : TRsRulerCorner Read FSolAltKoseKorner;
property SagAltKoseKorner : TRsRulerCorner Read FSagAltKoseKorner;
property CetvelUst : TRsRuler Read FCetvelUst;
property CetvelAlt : TRsRuler Read FCetvelAlt;
property CetvelSol : TRsRuler Read FCetvelSol;
property CetvelSag : TRsRuler Read FCetvelSag;
property TabSheet : TcxTabSheet Read FTabSheet;
property MouseOlaylariniIzle : Boolean Read FMouseOlaylariniIzle Write FMouseOlaylariniIzle;
property KlavyeOlaylariniIzle : Boolean Read FKlavyeOlaylariniIzle Write FKlavyeOlaylariniIzle;
property SuruklemeOlaylariniIzle : Boolean Read FSuruklemeOlaylariniIzle Write FSuruklemeOlaylariniIzle;
property DigerOlaylariIzle : Boolean Read FDigerOlaylariIzle Write FDigerOlaylariIzle;
property OlayListBox : TcxListBox Read FOlayListBox Write FOlayListBox;
public
constructor Create(AOwner:TComponent);Override;
destructor Destroy;Override;
published
end;
//Tüm editörler bir sekme içerisinde görünecek, Editör ve bağlı nesneler için ana parent // aşağıdaki sınıfta tanımalanan TabSheet olacaktır.
type
TArsivEditorTabSheet = Class(TcxTabSheet)
ArsivEditor : TArsivEditor;
TabanPanel,
SolPanel,
SagPanel,
UstPanel,
AltPanel : TPanel;
SolCetvel,
SagCetvel,
UstCetvel,
AltCetvel : TRsRuler;
SolUstKose,
SagUstKose,
SolAltKose,
SagAltKose : TRsRulerCorner;
private
FEditorKenarlikGenisligi: Integer;
procedure CreatePanels;
procedure CreateRulers;
procedure CreateRulerKorners;
public
constructor Create(AOwner:TComponent);Override;
destructor Destroy;Override;
published
property EditorKenarlikGenisligi : Integer Read FEditorKenarlikGenisligi;
end;
implementation
uses SynEditMiscClasses;
{ TArsivEditor }
Procedure TArsivEditor.SetRulerFlat(Const AFlat : Boolean);
begin
CetvelSol.Flat := AFlat;
CetvelSag.Flat := AFlat;
CetvelUst.Flat := AFlat;
CetvelAlt.Flat := AFlat;
SolUstKoseKorner.Flat := AFlat;
SagUstKoseKorner.Flat := AFlat;
SolAltKoseKorner.Flat := AFlat;
SagAltKoseKorner.Flat := AFlat;
end;
procedure TArsivEditor.LogEvent(AEvent: string);
begin
if (Assigned(FOlayListBox)) then
FOlayListBox.Items.Insert(0, TimeToStr(Now) + ' ' + AEvent);
end;
procedure TArsivEditor.KeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if KlavyeOlaylariniIzle then LogEvent('OnKeyDown');
end;
procedure TArsivEditor.KeyPress(Sender: TObject; var Key: Char);
begin
if KlavyeOlaylariniIzle then LogEvent('OnKeyPress');
end;
procedure TArsivEditor.KeyUp(Sender: TObject; var Key: Word;Shift: TShiftState);
begin
if KlavyeOlaylariniIzle then LogEvent('OnKeyUp');
end;
procedure TArsivEditor.MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if KlavyeOlaylariniIzle then LogEvent('OnMouseDown');
end;
procedure TArsivEditor.MouseUp(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if MouseOlaylariniIzle then LogEvent('OnMouseUp');
end;
procedure TArsivEditor.Paint(Sender: TObject; ACanvas: TCanvas);
begin
if DigerOlaylariIzle then LogEvent('OnPaint');
end;
procedure TArsivEditor.ProcessCommand(Sender: TObject; var Command: TSynEditorCommand; var AChar: Char; Data: Pointer);
begin
if KlavyeOlaylariniIzle then LogEvent('OnProcessCommand');
end;
procedure TArsivEditor.ProcessUserCommand(Sender: TObject; var Command: TSynEditorCommand; var AChar: Char; Data: Pointer);
begin
if KlavyeOlaylariniIzle then LogEvent('OnProcessUserCommand');
end;
procedure TArsivEditor.ReplaceText(Sender: TObject; const ASearch,AReplace: String; Line, Column: Integer; var Action: TSynReplaceAction);
begin
if DigerOlaylariIzle then LogEvent('OnReplaceText');
end;
procedure TArsivEditor.StartDrag(Sender: TObject; var DragObject: TDragObject);
begin
if SuruklemeOlaylariniIzle then LogEvent('OnStartDrag');
end;
procedure TArsivEditor.MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
CetvelUst.HairLinePos := X;
CetvelAlt.HairLinePos := X;
CetvelSol.HairLinePos := Y;
CetvelSag.HairLinePos := Y;
//FTabSheet.Caption := Format('(%.3g; %.3g)', [RsRuler1.Pos2Unit(X), RsRuler3.Pos2Unit(Y)]);
if (MouseOlaylariniIzle) then LogEvent('OnMouseMove');
end;
procedure TArsivEditor.EditorDblClick(Sender: TObject);
begin
if MouseOlaylariniIzle then LogEvent('OnDblClick');
end;
procedure TArsivEditor.EditorDragDrop(Sender, Source: TObject; X,Y: Integer);
begin
if SuruklemeOlaylariniIzle then LogEvent('OnDragDrop');
end;
procedure TArsivEditor.EditorDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
if SuruklemeOlaylariniIzle then LogEvent('OnDragOver');
end;
procedure TArsivEditor.EditorDropFiles(Sender: TObject; X, Y: Integer; AFiles: TStrings);
begin
if DigerOlaylariIzle then LogEvent('OnDropFiles');
if AFiles.Count >= 1 then Lines.LoadFromFile(AFiles[0]);
end;
procedure TArsivEditor.EditorEndDrag(Sender, Target: TObject; X, Y: Integer);
begin
if SuruklemeOlaylariniIzle then LogEvent('OnEndDrag');
end;
procedure TArsivEditor.EditorEnter(Sender: TObject);
begin
if DigerOlaylariIzle then LogEvent('OnEnter');
end;
procedure TArsivEditor.EditorExit(Sender: TObject);
begin
if DigerOlaylariIzle then LogEvent('OnExit');
end;
constructor TArsivEditor.Create(AOwner: TComponent);
begin
inherited;
//intializes a search engine
SearchEngine := TSynEditSearch.Create(Self);
MouseOlaylariniIzle := False;
KlavyeOlaylariniIzle := False;
DigerOlaylariIzle := False;
OnMouseMove := MouseMove;
OnMouseDown := MouseDown;
OnMouseUp := MouseUp;
OnPaint := Paint;
OnKeyPress := KeyPress;
OnKeyDown := KeyDown;
OnKeyUp := KeyUp;
OnStartDrag := StartDrag;
OnReplaceText := ReplaceText;
OnProcessCommand := ProcessCommand;
OnProcessUserCommand := ProcessUserCommand;
OnDblClick := EditorDblClick;
OnDragDrop := EditorDragDrop;
OnDragOver := EditorDragOver;
OnDropFiles := EditorDropFiles;
OnEndDrag := EditorEndDrag;
OnEnter := EditorEnter;
OnExit := EditorExit;
Options := [eoAutoIndent,eoDragDropEditing,eoDropFiles,eoScrollPastEOL,eoShowScrollHint,eoSmartTabs,eoTabsToSpaces];
ScrollBars := ssBoth;
With BookMarkOptions do
begin
DrawBookmarksFirst := True;
EnableKeys := True;
GlyphsVisible := True;
LeftMargin := 2;
Xoffset := 12;
end;
end;
destructor TArsivEditor.Destroy;
begin
SearchEngine.Free;
inherited;
end;
procedure TArsivEditor.SetRulerUnits(const UnitIndex: Integer);
Var
AUnits : TRulerUnit;
begin
Case UnitIndex of
0 : AUnits := ruPixel;
1 : AUnits := ruInch;
2 : AUnits := ruMilli;
3 : AUnits := ruCenti;
4 : AUnits := ruMeter;
5 : AUnits := ruKilo;
else
AUnits := ruNone;
end;
CetvelSol.Units := AUnits;
CetvelSag.Units := AUnits;
CetvelUst.Units := AUnits;
CetvelAlt.Units := AUnits;
SolUstKoseKorner.Units := AUnits;
SagUstKoseKorner.Units := AUnits;
SolAltKoseKorner.Units := AUnits;
SagAltKoseKorner.Units := AUnits;
end;
procedure TArsivEditor.SetRulerHairLineStyle(const StyleIndex: Integer);
Var
AStyle : THairLineStyle;
begin
Case StyleIndex of
0 : AStyle := hlsLine;
1 : AStyle := hlsRect;
end;
CetvelSol.HairLineStyle := AStyle;
CetvelSag.HairLineStyle := AStyle;
CetvelUst.HairLineStyle := AStyle;
CetvelAlt.HairLineStyle := AStyle;
end;
{ TArsivEditorTabSheet }
Procedure TArsivEditorTabSheet.CreatePanels;
Begin
//* Panel *//
TabanPanel := TPanel.Create(Self);
TabanPanel.Parent := Self;
TabanPanel.Align := alClient;
TabanPanel.Caption := '';
TabanPanel.BevelInner := bvNone;
TabanPanel.BevelOuter := bvNone;
TabanPanel.BorderStyle := bsNone;
SolPanel := TPanel.Create(Self);
SolPanel.Parent := TabanPanel;
SolPanel.Align := alLeft;
SolPanel.Caption := '';
SolPanel.Width := 25;
SolPanel.BevelInner := bvNone;
SolPanel.BevelOuter := bvNone;
SolPanel.BorderStyle := bsNone;
SagPanel := TPanel.Create(Self);
SagPanel.Parent := TabanPanel;
SagPanel.Align := alRight;
SagPanel.Caption := '';
SagPanel.Width := 25;
SagPanel.BevelInner := bvNone;
SagPanel.BevelOuter := bvNone;
SagPanel.BorderStyle := bsNone;
UstPanel := TPanel.Create(Self);
UstPanel.Parent := TabanPanel;
UstPanel.Height := 25;
UstPanel.Align := alTop;
UstPanel.Caption := '';
UstPanel.BevelInner := bvNone;
UstPanel.BevelOuter := bvNone;
UstPanel.BorderStyle := bsNone;
AltPanel := TPanel.Create(Self);
AltPanel.Parent := TabanPanel;
AltPanel.Height := 25;
AltPanel.Align := alBottom;
AltPanel.Caption := '';
AltPanel.BevelInner := bvNone;
AltPanel.BevelOuter := bvNone;
AltPanel.BorderStyle := bsNone;
end;
Procedure TArsivEditorTabSheet.CreateRulers;
Begin
//* Ruler *//
SolCetvel := TRsRuler.Create(Self);
With SolCetvel do
begin
parent := SolPanel;
Units := ruCenti;
Align := alClient;
Flat := true;
Offset := 0;
Width := 25;
Direction := rdLeft;
HairLineStyle := hlsLine;
HairLine := True;
end;
SagCetvel := TRsRuler.Create(Self);
With SagCetvel do
begin
parent := SagPanel;
Units := ruCenti;
Align := alClient;
Flat := true;
Offset := 0;
Width := 25;
Direction := rdRight;
HairLineStyle := hlsLine;
HairLine := True;
end;
UstCetvel := TRsRuler.Create(Self);
With UstCetvel do
begin
parent := UstPanel;
Units := ruCenti;
Align := alClient;
Flat := true;
Offset := 0;
Height := 25;
HairLineStyle := hlsLine;
HairLine := True;
end;
AltCetvel := TRsRuler.Create(Self);
With AltCetvel do
begin
parent := AltPanel;
Units := ruCenti;
Align := alClient;
Flat := true;
Offset := 0;
Height := 25;
Direction := rdBottom;
HairLineStyle := hlsLine;
HairLine := True;
end;
end;
Procedure TArsivEditorTabSheet.CreateRulerKorners;
Begin
//* Ruler Corner *//
SolUstKose := TRsRulerCorner.Create(Self);
With SolUstKose do
begin
parent := UstPanel;
Position := cpLeftTop;
Units := ruCenti;
Flat := True;
Align := alLeft;
Height := 25;
Width := EditorKenarlikGenisligi+25;
end;
SagUstKose := TRsRulerCorner.Create(Self);
With SagUstKose do
begin
parent := UstPanel;
Position := cpRightTop;
Units := ruCenti;
Flat := True;
Align := alRight;
Height := 25;
Width := 22;
end;
SolAltKose := TRsRulerCorner.Create(Self);
With SolAltKose do
begin
parent := AltPanel;
Position := cpLeftBottom;
Units := ruCenti;
Flat := True;
Align := alLeft;
Height := 25;
Width := EditorKenarlikGenisligi +25;
end;
SagAltKose := TRsRulerCorner.Create(Self);
With SagAltKose do
begin
parent := AltPanel;
Position := cpRightBottom;
Units := ruCenti;
Flat := True;
Align := alRight;
Height := 25;
Width := 22;
end;
End;
//Aşağıdaki yöntem bir editör bileşeni ile, 4 adet cetvel, 4 adet köşe ve bunların yer
//üzerine yerleştirilecek 4 adet paneli ve tüm bunları üzerinde barındıracak sekmeyi
//yaratır.
constructor TArsivEditorTabSheet.Create(AOwner: TComponent);
begin
inherited;
FEditorKenarlikGenisligi := 30;
CreatePanels;
CreateRulerKorners;
CreateRulers;
//* Editör *//
ArsivEditor := TArsivEditor.Create(Self);
With ArsivEditor do
begin
parent := TabanPanel;
Align := alClient;
BorderStyle := bsNone;
FSolUstKoseKorner := SolUstKose;
FSagUstKoseKorner := SagUstKose;
FSolAltKoseKorner := SolAltKose;
FSagAltKoseKorner := SagAltKose;
FCetvelSol := SolCetvel;
FCetvelSag := SagCetvel;
FCetvelAlt := AltCetvel;
FCetvelUst := UstCetvel;
FTabSheet := Self;
end;
end;
destructor TArsivEditorTabSheet.Destroy;
begin
ArsivEditor.Free;
SolCetvel.Free;
SagCetvel.Free;
UstCetvel.Free;
AltCetvel.Free;
SolUstKose.Free;
SagUstKose.Free;
SolAltKose.Free;
SagAltKose.Free;
SolPanel.Free;
SagPanel.Free;
UstPanel.Free;
AltPanel.Free;
inherited;
end;
end.
Dikkat ettiyseniz editörün bir çok olayı, sınıf tanımında dinamik olarak deklare ediliyor. Editörle birlikte kullanılan başka nesnelerde var. Bunlar ReplaceTextEngine, HighLighter gibi nesneler... Siz biraz daha göz gezdirin...
Bookmarks