Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi In einer Memo suchen? (https://www.delphipraxis.net/10419-einer-memo-suchen.html)

Sharky 18. Okt 2003 18:52

Re: In einer Memo suchen?
 
Hai,

warum ist hier denn das -1?

Delphi-Quellcode:
SynMemo1.SelEnd  := SynMemo1.SelStart+length(Edit1.Text)-1;
Ist doch falsch?!

Christian Seehase 19. Okt 2003 00:42

Re: In einer Memo suchen?
 
Moin Sharky,

nein, ist nicht falsch, da ja hier der Endpunkt der Markierung berechnet wird, nicht die Länge.
Das Prinzip ist das gleiche, als hätte man einen Startoffset, an dem man etwas speichert. Um jetzt die nächste freie Position zu berechnen, addiert man auf den StartOffset die Länge dessen, was man gespeichert hat drauf. Da hier aber nicht die nächste freie Stelle benötigt wird, sondern die letzte belegte wird eins abgezogen.

Beispiel

SelStart = 5
Length = 4
SelEnd = 5 + 4 - 1 = 8

Es werden die Stellen 5,6,7 und 8 markiert also 4, was der Länge entspricht.
Ist zwar nur ein konkretes Beispiel und keine mathematischer Beweis, sollte aber für diese Berechnung genügen, denke ich.

@Citybreaker:
Warum das bei Dir jetzt nicht funktioniert kann ich mir nicht erklären.
Du könntest ggf. mal den Sourcecode hier anhängen, dann kann ich mir das mal komplett ansehen.
Ansonsten könntest Du es auch noch einmal so versuchen:

Delphi-Quellcode:
  iPos := pos(trim(Edit1.Text), SynMemo.Text);
  if iPos = 0 then exit;
  SynMemo.SelStart := iPos-1;
  SynMemo.SelEnd  := SynMemo.SelStart+length(trim(Edit1.Text))-1;

Sharky 19. Okt 2003 09:11

Re: In einer Memo suchen?
 
Hai Christian,

ich habe das jetzt mal mit einem SynMemo probiert. Es geht bei mir nur mit diesem Code richtig:

http://www.sharkys-home.de/smiles/finger.gif
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  ipos : Integer;
begin
  iPos := pos(trim(Edit1.Text), SynMemo1.Text);
  if iPos = 0 then exit;
  SynMemo1.SelStart := iPos;
  SynMemo1.SelEnd  := SynMemo1.SelStart+length(trim(Edit1.Text));
end;

Christian Seehase 19. Okt 2003 11:54

Re: In einer Memo suchen?
 
Moin Sharky,

:shock: :shock: :shock:

also wenn ich das mit Deinem Code ausprobiere, dann wird
  1. eine Stelle zu spät mit der Markierung begonnen
  2. eine Stelle zu viel markiert (falls hinter der Fundstelle noch genug in der Zeile steht)

und das kann doch eigentlich auch nicht anders sein, weil
  1. TSynMemo.SelStart 0 basiert, der Rückgabewert von pos 1 basiert ist
  2. siehe vorheriges Posting

Meine SynEdit Installation stammt aus der Datei: SynEdit-20010826-CVS.zip

Sharky 19. Okt 2003 12:01

Re: In einer Memo suchen?
 
Zitat:

Zitat von Christian Seehase
...
  1. eine Stelle zu spät mit der Markierung begonnen
  2. eine Stelle zu viel markiert (falls hinter der Fundstelle noch genug in der Zeile steht)

Hai Christian,

:shock: :shock: :shock:

bei mir ist es mit deinem Code genau umgekehrt. Es wird:
  1. eine Stelle zu früh mit der Markierung begonnen
  2. eine Stelle zu wenig markiert

Ich habe SynEdit erst gestern installiert. Ist glaube ich Version 1.1

Christian Seehase 19. Okt 2003 12:16

Re: In einer Memo suchen?
 
Moin Sharky,

SynMemo.pas 31.05.2001 14:07 / $Id: SynMemo.pas,v 1.5 2001/05/31 12:07:07 claplace Exp $

$Id ist im Header der Datei zu finden.

Sharky 19. Okt 2003 12:19

Re: In einer Memo suchen?
 
Zitat:

Zitat von Christian Seehase
....
SynMemo.pas 31.05.2001 14:07 / $Id: SynMemo.pas,v 1.5 2001/05/31 12:07:07 claplace Exp $
..

$Id: SynMemo.pas,v 1.8 2002/04/12 15:47:40 harmeister Exp $


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
Seite 3 von 3     123   

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