![]() |
Suche in einer Memo die Gruppe, in der mein Cursor ist
Hallo Wissende,
ich habe eine Stringliste, in der sich CSS-Code befindet. Dieser Code wiederum befindet sich in einer Memo-Komponente. Nun möchte ich gern wissen, wo sich mein Cursor befindet. Folgender CSS-Code als Beispiel: body { font-family:verdana; font-size:12px; } td { font-family:arial; font-size:10px; } .black { color:white; font-size:10px; background-color;black: border: 1px #ffcc66 solid; } Wenn ich nun mit meinem Cursor in der Memo-Komponente bei irgendwo bei font-size:10px; stehe hätte ich gern von einer function das element .black zurück - nicht td. Ich weiss nun leider nicht, wie ich die Verbindung zwischen Cursorposition im Memo und der Strinliste herstellen kann, bzw. wie ich rückwärts oder vorwärts weitersuchen muss, wenn ich in der aktuellen Zeile nichts finden konnte, denn wie hier im Beispiel muss ja der Elementname nicht zwangsläufig in der selben Zeile stehen. Fakt ist aber, dass der Name vor der nächsten geschweiften Klammer { steht, wenn der Code korrekt ist. Leider haben meine bisherigen Versuche einfach nicht geklappt. Wer kann helfen? Scheinbar gibt es Probleme mit den Zeilenumbrüchen und den Leerzeichen in der Stringlist...!? |
Re: Suche in einer Stringlist die Gruppe, in der mein Cursor
Es gibt zwei Möglichkeiten, die mir einfallen: a)
![]() Pseudocode:
Delphi-Quellcode:
Was das allerdings mit ner StingList zu tun hat, weiß ich nicht. Wenn ich dich also missverstanden hab, musst du dein Problem geneuer/verständlicher schildern...
for i := Momo1.SelPos downto 0 do
begin if Memo1.Text[i] = '{' then begin NameErmitteln; end; end; mfg Christian |
Re: Suche in einer Stringlist die Gruppe, in der mein Cursor
Hallo r2c2,
ich denke wirklich, dass ich mich falsch ausgedrückt habe. Das mit der Stringliste kann man getrost weglassen. Ich habe Deinen Code mal erweitert, da ich den Namen gleich in der Schleife ermitteln will. Aber leider klappt es nicht.
Delphi-Quellcode:
Da scheint noch was im argen zu sein. Statt der Memo benutze ich die SynEdit-Komponente. Da diese kein SelPos bietet, habe ich es mal mit CaretX probiert. Irgendwo muckerts aber noch. Meine Messagebox bleibt noch leer...
for i := MainForm.SynEdit1.CaretX downto 0 do
begin if MainForm.SynEdit1.Text[i] = '{' then begin akt:=i; for k := akt downto 0 do begin if MainForm.SynEdit1.Text[k] = '}' then name:=Trim(MidStr(MainForm.SynEdit1.Text,k+1,akt)); ShowMessage(name); break; end; end; end; |
Re: Suche in einer Stringlist die Gruppe, in der mein Cursor
CaretX kann man nicht nehmen, da das nur in *einer* Zeile die Position angibt und nicht die insgesammte; SelPos - wenns das wirklich bei den SynEdit nicht gibt(schon lang nicht mehr damit gearbeitet) - müsstest du dir also nachbauen, weiß aber momentan auch nicht wie...
Guck nochmal, obs wirklich kein SelPos gibt. Sollte mich wundern. *sich nochmal erinnert* Könnte es vielleicht sein, dass SelPos bei den SynEdits SelStart oder so heißt? :gruebel: Ansonsten könntest du natürlich auch noch parsen. Das hätte auch den Vorteil, dass du keine Probleme mit Kommentaren hast... Is allerdings relativ aufwendig... mfg Christian |
Re: Suche in einer Memo die Gruppe, in der mein Cursor ist
Also SelStart gibts. Könntest Du mir noch nen Tipp zum Thema parsen geben? Ich knabbere schon ewig an diesem Thema, hatte aber noch nie wirklich den entscheidenden Durchbruch hierbei erlebt, da mir die Kommentare, Fehler im CSS-Code, Leerzeichen im CSS-Code und Zeilenumbrüche immer wieder nen Strich durch die Rechnung machten...
|
Re: Suche in einer Memo die Gruppe, in der mein Cursor ist
N Tipp zum Thema parsen? Hm... is n relativ komplexes Thema. Guck dir mal an, was die Suche bringt. Ansonsten(d.h. wenn du keine Lust hast an die - _pi*Daumen=:gruebel:_ - ca. 300-500 Codezeilen (minimum) zu schreiben) kannst du dich auch auf die Suche nach m fertigen CSS-Parser machen.
Stichwörter, die dir helfen könnten: - Parser - Lexer - Tokenizer - lexikalische Analyse - ... mfg Christian P.S.: Wenns SelStart gibt, kannst du auch SelStart nehmen und einen gefundenen String auf Sonderzeichen und Kommentare prüfen. Das sollte weitaus schneller gehen... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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-2025 by Thomas Breitkreuz