Hallo,
Ich habe ein Memo mit einem Text in Form1. Ich habe eine Suchfunktion eingebaut, die in einem weiteren Formular die gefundenen Textstellen in als Liste in ein RichEdit-Feld schreibt.
Ich möchte folgendes erreichen:
Der Anwender erhält in dem Ergebnisfenster z.B. 3 Zeilen mit den jeweiligen Fundstellen. Er klickt auf eine dieser Zeilen und in dem Memo wird dann die Fundstelle markiert. Klickt der Anwender auf eine andere Zeile in dem Ergebnisfenster, soll im Memo diese Fundstelle markiert werden.
Jetzt zum eigentlichen Problem:
Das Ganze funktioniert genau einmal, ich erhalte die angeklickte Spalte aus der Ergebnisliste(Richedit). Die gewünschte Markierung wird im Memo angezeigt.
Wenn ich jetzt eine andere Zeile in der Ergebnisliste anklicke, wird zwar wieder die MousUp-Routine angesprochen, aber der Cursor befindet sich noch in der vorherigen Zeile, deshalb wird die gleiche Fundstelle wieder angesprungen.
Wenn ich vorher mit der Maus auf Form3 klicke, so dass das Formular3 bereits den Focus hat und danach erst in das Richedit-Feld, funktioniert alles wunderbar. Dann wird durch den Klick auf RichEdit auch der Cursor in die neue Zeile gesetzt. Ich möchte mir aber diesen zusätzlichen Klick gerne sparen.
Also habe ich irgendwo einen Denkfehler...
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm3.RichEdit1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var z:longint;
begin
z:=(Form3.Richedit1.CaretPos.y); showmessage('zeile '+inttostr(z) +' angeklickt');
Form1.Memo1.SelStart := Ergebnis[z].iSelstart; Form1.Memo1.SelLength := length(Edit1.text); Form1.Memo1.Setfocus;
end; |
Achso, das mit dem Richedit Feld habe ich deshalb gemacht, weil ich das Suchergebnis noch formatieren möchte, zum Beispiel: suche nach "Fundstelle" ergibt:
Zeile 3: hier wurde die
Fundstelle entdeckt
Zeile 27:
Fundstellen gibt es jede Menge
Zeile 100: manche
Fundstellen sind schwer zu durch
Ich bin für jeden Tip dankbar.
Gruß
Schorschie