Erstellen einer IDE Pascal-Script und SynEdit
-
20-08-2019 - |
Frage
Ich erstelle einen integrierten Skript-Engine Pascal von RemObjects (ausgezeichnet) und der SynEdit Editor. Es ist fast fertig, das IDE Beispiel mit Pascal und dem IDE Beispiel in SynEdit ausgeliefert mit - aber - ich kann nicht sehen, wie Pascal zu fragen, ob eine nummerierte Source-Leitung ‚ausführbare‘ ist oder nicht. (Ich kann dann diese verwenden, um die SynEdit Rinne mit dem ‚Delphi blauen Punkt‘ zu markieren). Ich glaube, ich könnte ein Zerlegen des ROPS Ausgangs zu tun?
Jeder Pascal Experten hier? Vielen Dank. Brian.
Lösung
Haben Sie einen Blick auf den Quellcode von Inno Setup . Es zeigt einen kleinen Punkt in der SynEdit Rinne Bereich für Linien mit ausführbarem Code, graue für Linien, die ausführbar sind, aber noch nicht ausgeführt worden ist, grünen für Linien, die mindestens einmal getroffen worden sind.
Der Code für diese kann in CompForm.pas
, suchen Sie nach dem TLineState
Typ zu finden. Die Informationen werden in der iscbNotifySuccess
Zustand des Compilers Rückruf einrichten, können Sie das gleiche in Ihrem IDE tun. Unter Umständen müssen Sie den Code anpassen mehrere Quelldateien zu handhaben, da die Inno Setup Compiler beschäftigt sich mit Code-Schnipsel in der Quelldatei nur.
In den Pascal-Script Quellen sollten Sie einen Blick auf die TPSCustomDebugExec.TranslatePositionEx()
Methode haben -. Den Namen der Quelldatei als auch zurückgibt
Andere Tipps
Ich weiß nicht genau, wie sie es tut, aber das IDE-Projekt in der Pascal Paket (unter \ Samples \ debug gefunden) ist in der Lage Schritt zu bieten In und Step Over (F7 und F8) Funktionalität, so logisch es hat eine Möglichkeit der Zuordnung PS-Bytecode mit Linien von Script-Code zu haben. Versuchen Sie, dieses Projekt untersucht, um zu sehen, wie sie es tut. Als Bonus, verwendet es SynEdit zu, so werden die Ideen einfach zu Ihrem eigenen System anzupassen.
Ich weiß, dass dies eine alte Frage, aber ich habe mich die gleiche Sache getan, und die oben genannten Vorschläge helfen nicht wirklich. Inno Setup zum Beispiel nicht SynEdit verwenden, verwendet es scintilla Editor.
Auch die TPSCustomDebugExec.TranslatePositionEx () macht das Gegenteil zu dem, was gewünscht wird, gibt es eine Quelle Zeilennummer aus einer Laufzeitcodeposition.
Nach faffing schon seit einiger Zeit, die ich zu dem Schluss gekommen, dass der einfachste Weg, um eine Funktion des Pascal Code hinzuzufügen war.
Die neue Methode wird in der uPSdebugger Einheit an die TPSCustomDebugExec Klasse hinzugefügt.
function TPSCustomDebugExec.HasCode(Filename:string; LineNo:integer):boolean;
var i,j:integer; fi:PFunctionInfo; pt:TIfList; r:PPositionData;
begin
result:=false;
for i := 0 to FDebugDataForProcs.Count -1 do
begin
fi := FDebugDataForProcs[i];
pt := fi^.FPositionTable;
for j := 0 to pt.Count -1 do
begin
r:=pt[j];
result:= SameText(r^.FileName,Filename) and (r^.Row=LineNo);
if result then exit
end;
end;
end;
und die Farbe Gosse Rückruf in Form Haupt-Editor ist als unten
procedure Teditor.PaintGutterGlyphs(ACanvas:TCanvas; AClip:TRect;
FirstLine, LastLine: integer);
var a,b:boolean; LH,LH2,X,Y,ImgIndex:integer;
begin
begin
FirstLine := Ed.RowToLine(FirstLine);
LastLine := Ed.RowToLine(LastLine);
X := 14;
LH := Ed.LineHeight;
LH2:=(LH-imglGutterGlyphs.Height) div 2;
while FirstLine <= LastLine do
begin
Y := LH2+LH*(Ed.LineToRow(FirstLine)-Ed.TopLine);
a:= ce.HasBreakPoint(ce.MainFileName,FirstLine);
b:= ce.Exec.HasCode(ce.MainFileName,FirstLine);
if Factiveline=FirstLine then
begin
if a then
ImgIndex := 2 //Blue arrow+red dot (breakpoint and execution point)
else
ImgIndex := 1; //Blue arrow (current line execution point)
end
else
if b then
begin
if a then
ImgIndex := 3 //Valid Breakpoint marker
else
ImgIndex := 0; //blue dot (has code)
end
else
begin
if a then
ImgIndex := 4 //Invalid breakpoint (No code on this line)
else
ImgIndex := -1; //Empty (No code for line)
end;
if ImgIndex >= 0 then
imglGutterGlyphs.Draw(ACanvas, X,Y,ImgIndex);
Inc(FirstLine);
end;
end;
end;
Die SynEdit mit Zeilennummern, Codepunkten, Haltepunkten, Lesezeichen und Ausführungspunkt Blick, wie im Bild unten