Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Suche in einer Memo die Gruppe, in der mein Cursor ist (https://www.delphipraxis.net/66789-suche-einer-memo-die-gruppe-der-mein-cursor-ist.html)

torud 4. Apr 2006 12:19


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...!?

r2c2 4. Apr 2006 12:52

Re: Suche in einer Stringlist die Gruppe, in der mein Cursor
 
Es gibt zwei Möglichkeiten, die mir einfallen: a) Hier im Forum suchenparsen und b) gucken, wo sich n '{' vor der Aktuellen Position befindet:
Pseudocode:
Delphi-Quellcode:
  for i := Momo1.SelPos downto 0 do
  begin
    if Memo1.Text[i] = '{' then
    begin
      NameErmitteln;
    end;
  end;
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...

mfg

Christian

torud 4. Apr 2006 13:23

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:
    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;
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...

r2c2 4. Apr 2006 13:53

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

torud 4. Apr 2006 14:01

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...

r2c2 4. Apr 2006 14:13

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