![]() |
Wort unter Memo-Cursor finden.
Nabend, ich hoffe, ihr könnt mir helfen :)
Ich suche eine Möglichkeit das Wort, in dem der blinkende Cursor vom Memo liegt, herauszufinden. Es soll im Prinzip so funktionieren, wie bei der Delphi IDE: Wenn man mit dem Cursor auf einen Funktions- oder Prozedurnamen klickt und dann F1 drückt, soll mir halt eine Messagebox mit dem Wort entgegenlächeln. Ich hoffe, ich habe das verständlich genug ausgedrückt :) Gruß Nabbl |
Re: Wort unter Memo-Cursor finden.
Schau dir SelStart an. ;-)
Dann noch das Leerzeichen / Trennzeichen vorher und nachher per while-Schleife suchen, fertig. |
Re: Wort unter Memo-Cursor finden.
Habe es probiert, komme aber nicht weiter :(
Hier mein Quellcode bisher. Wäre super, wenn da jemand mal einen Blick drüber werfen würde und mich auf den Fehler hinweisen könnte. Sourcecode ist mein Memo.
Delphi-Quellcode:
Danke :)
procedure TForm1.Button1Click(Sender: TObject);
var SelTmp, Row: Integer; SelSt, SelEnd: Integer; tmp:string; begin // In welcher Zeile vom Memo befinden wir uns? Row := SendMessage(SourceCode.Handle, EM_LINEFROMCHAR, SourceCode.SelStart, 0); SelTmp := SourceCode.SelStart; SelEnd:=SelTmp; SelSt:=SelTmp; while (SelEnd <= Length(SourceCode.Lines[Row])) do begin tmp := Copy(SourceCode.Lines[Row],SelEnd,1); if ((tmp = '') or (tmp = ' ')) then begin SelEnd:=SelEnd-1; Break; end; end; while (SelSt >= 0) do begin tmp := Copy(SourceCode.Lines[Row],SelSt-1,1); if ((tmp = '') or (tmp = ' ')) then begin SelSt:=SelSt-1; Break; end; end; ShowMessage(Copy(SourceCode.Lines[Row],SelSt, SelEnd-SelSt+1)); end; |
Re: Wort unter Memo-Cursor finden.
Wofür brauchst du denn die Zeile? :gruebel:
Wie wäre es einfach so?
Delphi-Quellcode:
Wobei memText das Memo wäre.
procedure TFormX.memTextClick(Sender: TObject);
var MemoText: string; TextLen, WordStart, WordEnd: Integer; begin MemoText := memText.Text; WordStart := memText.SelStart; while (WordStart > 0) and (MemoText[WordStart] in ['a'..'z', 'ä', 'ö', 'ü', 'A'..'Z', 'Ä', 'Ö', 'Ü', '0'..'9']) do Dec(WordStart); TextLen := Length(MemoText); WordEnd := memText.SelStart; while (WordEnd < TextLen) and (MemoText[WordEnd] in ['a'..'z', 'ä', 'ö', 'ü', 'A'..'Z', 'Ä', 'Ö', 'Ü', '0'..'9']) do Inc(WordEnd); Dec(WordEnd); memText.SelStart := WordStart; memText.SelLength := WordEnd - WordStart; ShowMessage('"' + memText.SelText + '"'); end; |
Re: Wort unter Memo-Cursor finden.
Ich blick bei dir auch nicht durch :stupid:
Warum so kompliziert:
Delphi-Quellcode:
Wichtig: Wenn dieser Code verwendet wird muss {$B-} eingestellt sein (ist Standard, unter $B in der Hilfe nachschauen).
function getSelectedWord(const txt: string; start: integer): string;
const blank = [' ', #10, #13]; // <- kann erweitert werden, z.B. Punkte var count: integer; begin if length(txt) > 0 then begin if start < 1 then start := 1; count := 0; while ((start-1 >= 1) and (not (txt[start-1] in blank))) do dec(start); while ((start+count <= length(txt)) and ((not (txt[start+count] in blank)))) do inc(count); result := copy(txt, start, count); end else result := ''; end; procedure TForm1.Button1Click(Sender: TObject); begin Button1.Caption := '"'+getSelectedWord(memo1.Text, memo1.SelStart)+'"'; end; MfG, Bug @roter Kasten: ich poste meine Lösung trotzdem mal... EDIT: Standart :roll: |
Re: Wort unter Memo-Cursor finden.
Super, danke! Werde die Lösungen mal ausprobieren :D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 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