Skip to content

Commit 967cf55

Browse files
fix caret drawing
1 parent 72e0cb4 commit 967cf55

File tree

1 file changed

+32
-16
lines changed

1 file changed

+32
-16
lines changed

C2Delphi.Forms.Main.pas

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ TfrmMain = class(TForm)
8888
procedure UpdateTree;
8989
procedure ShowElement(Sender:TObject; rt: TPascalElement);
9090
function ReadCCodeFromFile(cfn: string):string;
91+
procedure GetRangeSource(const text: string; e: TPascalElement; out p1,p2: TBCEditorTextPosition);
92+
procedure GetRangeRender(const text: string; e: TPascalElement; out p1,p2: TBCEditorTextPosition);
9193
public
9294
CFileName:string;
9395
Pas:WvN.Pascal.Model.TPascalUnit;
@@ -173,19 +175,33 @@ procedure TfrmMain.BCEditor1SelectionChanged(Sender: TObject);
173175
BCEditor2.Text := pas.toPascal;
174176
end;
175177

178+
procedure TfrmMain.GetRangeSource(const text: string; e: TPascalElement; out p1,p2: TBCEditorTextPosition);
179+
begin
180+
p1 := getPosition(Text, e.Sourceinfo.Position);
181+
p2 := getPosition(Text, e.Sourceinfo.Position + e.Sourceinfo.Length);
182+
end;
183+
184+
procedure TfrmMain.GetRangeRender(const text: string; e: TPascalElement; out p1,p2: TBCEditorTextPosition);
185+
begin
186+
p1 := getPosition(Text, e.Renderinfo.Position);
187+
p2 := getPosition(Text, e.Renderinfo.Position + e.Renderinfo.Length);
188+
end;
189+
190+
176191
procedure TfrmMain.BCEditor2CaretChanged(ASender: TObject; X, Y: Integer);
177192
var c:TClassdef;e:TPascalElement;
178193
p1,p2:tbceditortextposition;
194+
text:string;
179195
begin
180196
StatusBar1.Panels[4].Text := Format('[Line:%d,Col%d]', [Y,X]);
181197
if pas=nil then
182198
Exit;
183199

200+
text := BCEDitor2.Text;
184201
for c in pas.Classes do
185202
for e in c.Methods do
186203
begin
187-
p1 := getPosition(BCEDitor2.Text, e.Renderinfo.Position);
188-
p2 := getPosition(BCEDitor2.Text, e.Renderinfo.Position+e.Renderinfo.Length);
204+
GetRangeRender(text, e, p1, p2);
189205
if InRange(Y,p1.Line, p2.Line) then
190206
begin
191207
ShowElement(ASender,e);
@@ -196,8 +212,7 @@ procedure TfrmMain.BCEditor2CaretChanged(ASender: TObject; X, Y: Integer);
196212

197213
for e in pas.GlobalArrays1D do
198214
begin
199-
p1 := getPosition(BCEDitor2.Text, e.Renderinfo.Position);
200-
p2 := getPosition(BCEDitor2.Text, e.Renderinfo.Position+e.Renderinfo.Length);
215+
GetRangeRender(text, e, p1, p2);
201216
if InRange(Y,p1.Line, p2.Line) then
202217
begin
203218
ShowElement(ASender,e);
@@ -208,8 +223,7 @@ procedure TfrmMain.BCEditor2CaretChanged(ASender: TObject; X, Y: Integer);
208223

209224
for e in pas.GlobalArrays2D do
210225
begin
211-
p1 := getPosition(BCEDitor2.Text, e.Renderinfo.Position);
212-
p2 := getPosition(BCEDitor2.Text, e.Renderinfo.Position+e.Renderinfo.Length);
226+
GetRangeRender(text, e, p1, p2);
213227
if InRange(Y,p1.Line, p2.Line) then
214228
begin
215229
ShowElement(ASender,e);
@@ -315,6 +329,7 @@ procedure TfrmMain.Run;
315329
ListBox1.Items.Add(prog.Msgs.AsInfo);
316330
end;
317331
end;
332+
318333
{$ELSE}
319334
procedure TfrmMain.Run;
320335
begin
@@ -487,43 +502,40 @@ procedure TfrmMain.actRunExecute(Sender: TObject);
487502
procedure TfrmMain.BCEditor1CaretChanged(ASender: TObject; X, Y: Integer);
488503
var c:TClassdef;e:TPascalElement;
489504
p1,p2:tbceditortextposition;
505+
text:string;
490506
begin
491507
if pas=nil then
492508
Exit;
493509

510+
text := BCEditor1.Text;
511+
494512
for c in pas.Classes do
495513
for e in c.Methods do
496514
begin
497-
p1 := getPosition(BCEDitor1.Text, e.Sourceinfo.Position);
498-
p2 := getPosition(BCEDitor1.Text, e.Sourceinfo.Position+e.Sourceinfo.Length);
515+
GetRangeSource(text, e, p1, p2);
499516
if InRange(Y,p1.Line, p2.Line) then
500517
begin
501518
ShowElement(ASender,e);
502-
BCEditor1.Refresh;
503519
Exit;
504520
end;
505521
end;
506522

507523
for e in pas.GlobalArrays1D do
508524
begin
509-
p1 := getPosition(BCEDitor1.Text, e.Sourceinfo.Position);
510-
p2 := getPosition(BCEDitor1.Text, e.Sourceinfo.Position+e.Sourceinfo.Length);
525+
GetRangeSource(text, e, p1, p2);
511526
if InRange(Y,p1.Line, p2.Line) then
512527
begin
513528
ShowElement(ASender,e);
514-
BCEditor1.Refresh;
515529
Exit;
516530
end;
517531
end;
518532

519533
for e in pas.GlobalArrays2D do
520534
begin
521-
p1 := getPosition(BCEDitor1.Text, e.Sourceinfo.Position);
522-
p2 := getPosition(BCEDitor1.Text, e.Sourceinfo.Position+e.Sourceinfo.Length);
535+
GetRangeSource(text, e, p1, p2);
523536
if InRange(Y,p1.Line, p2.Line) then
524537
begin
525538
ShowElement(ASender,e);
526-
BCEditor1.Refresh;
527539
Exit;
528540
end;
529541
end;
@@ -537,7 +549,11 @@ procedure TfrmMain.BCEditor1Change(Sender:TObjecT);
537549
tl := BCEditor2.TopLine;
538550
c := BCEditor1.Text;
539551
pas := c_to_pas(c,t,BCEditor1.Hint);
540-
Caption := pas.Name + ' - ' + Application.Title;
552+
553+
Caption := Application.Title;
554+
if Pas.name <> '' then
555+
Caption := pas.Name + ' - ' + Caption;
556+
541557
UpdateTree;
542558

543559
BCEditor2.Text := pas.toPascal;

0 commit comments

Comments
 (0)