AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi SynEdit: Textfarbe an bestimmter Stelle herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

SynEdit: Textfarbe an bestimmter Stelle herausfinden

Ein Thema von derpepe · begonnen am 16. Mär 2005 · letzter Beitrag vom 17. Mär 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#1

SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 16. Mär 2005, 23:33
Hallo,

nun bin ich schon seit gestern fast ununterbrochen auf der Suche und hoffe hier endlich die Lösung zu finden

Ich verwenden in meinem Projekt die TSynEdit-Komponente von http://synedit.sf.net. Ich brauche diese Komponente wegen dem Syntax-Highlighting und kann nicht auf TRichEdit o.ä. ausweichen.

Wie kann ich jetzt nun die Farbe an einer bestimmten Stelle (sagen wir Zeile 5, Zeichen 10) feststellen?
Die Farbe bekommt das SynEdit-Control von dem verknüpften SynHighlighter. Diesen habe ich meinen Wünschen entsprechend angepasst.

Hätte ich ein TRichEdit wäre das einfach, ich könnte per SelAttributes.Color einfach den Wert abfragen.
Auf diesem Gedanken aufbauend habe ich folgenden Code entwickelt (bitte nicht hauen, ist echt grausam):

Delphi-Quellcode:
RichEdit1.Clear;
With SynExporterRTF1 Do Begin
  ExportAll (SynEdit1.Lines);
  CopyToClipboard;
End;
With RichEdit1 Do Begin
  PasteFromClipboard;
  CaretPos := Point(10,5);
  SelLength := 1;
End;
ShowMessage (IntToStr(Richedit1.SelAttributes.Color));
Ich habe es nicht mal geschafft den Text direkt vom SynEdit zum RichEdit zu übernehmen (farbig!), dazu habe ich dann die SynExporterRTF-Komponente verwendet.
Nur nochmal zur Verdeutlichung: obiger Code funktioniert! Er hat jedoch einige Haken:
- unschön (!!)
- langsam (ist in Wirklichkeit sogar recht schnell, dennoch wohl nicht das effektivste)
- die Zwischenablage wird benutzt (eine Lösung hierzu wäre höchstens für andere Projekte hübsch, für meinen Fall ist es jedoch nicht akzeptabel, auch wenn ich den Umweg über die Zwischenablage nicht mehr bräuchte)
- ich brauche die SynExporterRTF-Komponente (darauf müßte man verzichten können)

Man müßte die Farbe über den SynHighlighter abfragen können, leider habe ich nichts passendes gefunden, auch ein Studium der Quelltexte und mehrere intensive Suchversuche (btw: tolles Wort *g*) mit Google führten nicht zum Erfolg.

Ihr seht also, ich habe mir bereits viel Mühe gegeben und hoffe hier ein offenes Ohr zu finden und jemanden der sich mit dem SynEdit besser auskennt als ich oder eine Idee für eine alternative Lösung hat

Vielen Dank schonmal im Voraus und entschuldigt das überlange Post.
Liebe Grüße

Peter
Peter J. Schneider
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#2

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 00:41
Hier ein kleines Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fDummy: String;
  fHighlighter: TSynHighlighterAttributes;
  fPos: TBufferCoord;
  fTextColor: TColor;
begin
  //Spalte 1
  fPos.Char := 1;
  //Reihe 1
  fPos.Line := 1;
  //prüfen, ob die Abfrage überhaupt mit der Position möglich ist
  if SynEdit1.GetHighlighterAttriAtRowCol(fPos, fDummy, fHighlighter) then
  begin
    //Farbe aus dem Highlighter auslesen
    fTextColor := fHighlighter.Foreground;
    //nun kann fTextColor verarbeitet werden
    //...
  end;
end;
MfG Pr0g
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#3

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 01:26
Anbei ein Beispiel:
Angehängte Dateien
Dateityp: zip attri_156.zip (2,5 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#4

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 07:34
GetHighlighterAttriAtRowCol war die Lösung, warum bin ich darauf nicht selbst gekommen!? Hab ich irgendwie nicht gefunden...
Vielen Dank!
Peter J. Schneider
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#5

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 08:01
Rein Interessehalber: Hättest Du auch eine Lösung für das übernehmen in den RichEdit? Also ohne Copy&Paste halt.

Übrigens: Mein Proggi funzt soweit, habs implementiert bekommen, Du bist ein Held
Peter J. Schneider
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#6

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 13:40
Was willst du denn ins RichEdit übernehmen? Den ganzen Text, mit Farben?
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#7

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 13:41
genau!
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#8

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 14:02
Du könntest den Code in einen Stream speichern und daraus laden, hier ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  fStream: TMemoryStream; //Stream zum Zwischenspeichern
begin
  //Code in Exporter laden
  SynExporterRTF1.ExportAll(SynEdit1.Lines);
  //Streaminstanz erzeugen
  fStream := TMemoryStream.Create;
  try
    //RTF Text/Code in Stream speichern
    SynExporterRTF1.SaveToStream(fStream);
    //an den Anfang des Stream gehen
    fStream.Position := 0;
    //dann wieder in das RichEdit laden
    RichEdit1.Lines.LoadFromStream(fStream);
  finally
    //und Stream wieder freigeben
    fStream.Free;
  end;
end;
Dem Exporter muss natürlich ein Highlighter zugewiesen werden, damit die Formatierungen übernommen werden.

Edit: Wofür brauchst du das eigentlich?
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#9

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 14:17
Cool, danke

Wofür ich das alles brauche:
Ich muss da einen Quelltext analysieren. Dieser ist in der Sprache TAG geschreiben.
Ich hab ein Beispiel in den Anhang gepackt.

Ich muss jetzt den Quelltext analysieren und habe eine Funktion geschrieben, die alle Räume (gekennzeichnet durch "raum xxxxx") in einer ListBox auflistet.

Jetzt bräuchte ich noch eine Funktion die mir daraus z.B. ausspuckt was bei "Besch" steht.
Das Problem dabei: Die Strings sind teilweise mehrzeilig, Kommentare müssen natürlich ausgelassen werden.
Wenn dafür jemand einen tollen Tipp hat: sehr gerne


Noch eine Frage zu folgendem Screenshot:
http://www.webweaver.ws/webweaver/pics/oberflaeche.jpg
Nimmst Du da auch den SynEdit?
Mich interessiert die graue Zeile (zeigt wohl die aktuelle Zeile an) und die zwei roten Vierecke um die Klammern.
Wie hast Du das realisiert?
Angehängte Dateien
Dateityp: txt karn.adv_292.txt (74,9 KB, 10x aufgerufen)
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat
Benutzerbild von derpepe
derpepe

Registriert seit: 16. Mär 2005
Ort: Dotternhausen
164 Beiträge
 
Delphi 2005 Personal
 
#10

Re: SynEdit: Textfarbe an bestimmter Stelle herausfinden

  Alt 17. Mär 2005, 14:24
Nochmal zur genaueren Erklärung:
Die Raumliste zur obigen Quelltextdatei sieht in meinem Editor aus wie auf dem Screenshot.
(Sorry für den RichEdit, die EditLine rechts und das Memo, die kommen natürlich später weg)

Ich hätte jetzt gerne eine Funktion
function GetItem(Raum,Bezeichnung:String):String; die z.B. folgendes zurückgibt:
Delphi-Quellcode:
GetItem('Eingang','Std') = BinIchBlöd
GetItem('Eingang','Besch') = 'Ich stehe hier am Eingang von Karn. Viele Legenden ranken sich um
das unterirdische Höhlensystem.

Ein kleines, wenig einladend aussehendes Loch führt nach unten.
Nebelschwaden ziehen aus dem Loch empor.
'
Jemand eine Idee wie das gehen kann?
Miniaturansicht angehängter Grafiken
tagedit_238.jpg  
Peter J. Schneider
http://raketenwerfer.de/programmieren/delphi/index.html
Nes dar in da kev, sed un est a log!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz