AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Zeilen einer Auswahl unter SynEdit erhalten

Ein Thema von frankg · begonnen am 18. Jan 2004 · letzter Beitrag vom 20. Jan 2004
Antwort Antwort
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#1

Zeilen einer Auswahl unter SynEdit erhalten

  Alt 18. Jan 2004, 17:39
Hallo Leute!

Heute habe ich mal eine Frage zu SynEdit. Eigentlich sollte das ganz einfach sein (ich habe auch schon verschiedene Lösungen im Internet gefunden), aber es klappt bei mir einfach nicht. Das Problem ist, ich würde gerne die Anfangs- und Endzeile einer Auswahl unter SynEdit ermitteln. Im Prinzip sollte folgender Code funktionieren:

Delphi-Quellcode:
var
  StartLine : Integer;
  EndLine : Integer;

begin
  ...
  if mySynEd.SelStart = mySynEd.SelEnd then exit;
  StartLine := mySynEd.Perform(EM_LINEFROMCHAR,mySynEd.SelStart,0);
  EndLine := mySynEd.Perform(EM_LINEFROMCHAR,mySynEd.SelEnd,0);
  MessageDlg ('StartLine: '+Inttostr(StartLine)+' - Endline: '+IntToStr(EndLine), mtWarning, [mbOK], 0);;
  ...
end;
Leider funktioniert der Code aber nicht. StartLine und EndLine sind beide 0. Weiss zufällig jemand, was ich hier falsch gemacht habe?

Viele Grüsse und vielen Dank

Frank
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Zeilen einer Auswahl unter SynEdit erhalten

  Alt 18. Jan 2004, 18:15
Wo issn der Code drinn ? Ich mein wann wird er ausgeführt ?

Und was machst du da mit dem perform ?

Wenn ich mich recht erinnere müsste doch gehen:
Delphi-Quellcode:
anfang := SynEdit1.SelStart;
ende := SynEdit.SelEnd;
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#3

Re: Zeilen einer Auswahl unter SynEdit erhalten

  Alt 18. Jan 2004, 20:59
Zitat von MrKnogge:
Wo issn der Code drinn ? Ich mein wann wird er ausgeführt ?

Und was machst du da mit dem perform ?

Wenn ich mich recht erinnere müsste doch gehen:
Delphi-Quellcode:
anfang := SynEdit1.SelStart;
ende := SynEdit.SelEnd;
Hallo Knogge!

Erstmal vielen Dank für Deine Antwort. Also der Code wird einfach über ein Kontextmenü aufgerufen. Ist aber auch eigentlich egal, dass einzige, was hier gewährleistet sein muss ist, dass irgendwas im SynEdit markiert ist, so dass SelStart und SelEnd einen sinnvollen Wert besitzen. Der Code, den Du geschrieben hast liefert mir einfach die Anfangs- bzw. Endposition der Markierung im Buffer zurück, d.h. er liefert die Zeichenposition im Puffer. Ich hätte aber gerne die Zeile, in der die Markierung beginnt und die Zeile in der die Markierung endet. Es gibt unter der Windows API die Message EM_LINEFROMCHAR (für Memos oder RichText-Edits glaube ich...), die eigentlich, wenn man eine Position im Buffer übergibt (geschieht in meinem Beispielcode durch mySynEdit.SelStart bzw SelEnd) die entsprechend Zeile zurückliefern soll. Alternativ zu Perform kann man auch SendMessage verwenden. Hier benötigt man allerdings das Handle des Objektes, an das man eine Nachricht schicken möchte.

StartLine := SendMessage (mySynEdit.Handle, EM_LINEFROMCHAR, mySynEdit.SelStart,0); Das funzt aber leider auch nicht.

Trotzdem vielen Dank

Frank
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#4

Re: Zeilen einer Auswahl unter SynEdit erhalten

  Alt 18. Jan 2004, 22:19
So geht's einfacher:
Delphi-Quellcode:
Var
  XY : TBufferCoord;
Begin
  XY := SynEdit.CharIndexToRowCol(SynEdit.SelStart);
  showmessage('Column: ' + IntToStr(XY.Char) + #13#10+
              'Row: ' + IntToStr(XY.Line));
In die Uses-clause deiner Unit musst du dazu noch SynEditTypes hinzufügen.
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Zeilen einer Auswahl unter SynEdit erhalten

  Alt 18. Jan 2004, 22:24
Funktioniert natürlich genauso mit "SynEdit.SelEnd"...
  Mit Zitat antworten Zitat
frankg

Registriert seit: 20. Mai 2003
Ort: Wetter
72 Beiträge
 
Delphi 7 Architect
 
#6

Re: Zeilen einer Auswahl unter SynEdit erhalten

  Alt 20. Jan 2004, 20:35
Hi GeorgeWNewbie!

Ich bin's noch mal. Natürlich bin ich offensichtlich wirklich zu blöd. Tut mir leid... diese Fuktion gibt es auch unter meiner SynEdit Version. Allerdings ist der Rückgabetyp nicht TBufferCoord sondern TPoint. Hier ist mein Code, der funktioniert:

Delphi-Quellcode:
var
  myLine : Integer;
  XY : TPoint;
begin
  if mySynEd.SelStart = mySynEd.SelEnd then exit;
  XY := mySynEd.CharIndexToRowCol(mySynEd.SelStart);
  myLine := XY.Y;
  MessageDlg (Inttostr(myLine), mtWarning, [mbOK], 0);;
end;
Die zweite Frage habe ich allerdings noch nicht gelöst...

Viele Grüsse und vielen Dank

Frank
  Mit Zitat antworten Zitat
Benedikt
(Gast)

n/a Beiträge
 
#7

Re: Zeilen einer Auswahl unter SynEdit erhalten

  Alt 20. Jan 2004, 21:01
Hi,

das liegt daran das du wahrscheinlich eine ältere Version hast.
Die Umstellung von TPoint auf TBufferCoord und TDisplayCoord fand erst in der letzten CVS-Version statt.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:28 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