2010-08-26 15 views
4

J'utilise un TMemo pour contenir les caractères reçus d'un port série pour le visionnement. Comme ils arrivent que je fais:Y a-t-il une meilleure façon d'ajouter quelques caractères à un TMemo?

Memo1.Text := Memo1.Text + sReceivedChars; 

Cela fonctionne bien, mais je suppose qu'il est plutôt inefficace, avoir à obtenir le texte existant avant concaténer mes quelques caractères puis écrire de nouveau. Je voudrais vraiment une fonction 'SendChars()' ou quelque chose de similaire. Y a-t-il une meilleure façon d'ajouter simplement quelques caractères à la fin du texte existant?

Répondre

8

Je ne sais pas si vous pensez qu'il vaut la peine, mais vous pouvez faire quelque chose comme ceci:

procedure TForm1.Button1Click(Sender: TObject); 
var 
    index: Integer; 
    NewText: string; 
begin 
    NewText := 'Append This'; 
    index := GetWindowTextLength (Memo1.Handle); 
    SendMessage(Memo1.Handle, EM_SETSEL, index, index); 
    SendMessage (Memo1.Handle, EM_REPLACESEL, 0, Integer(@NewText[1])); 
end; 
+0

Vous pouvez faire la même chose avec la propriété 'SelText' du mémo. –

+3

Ou utilisez 'Memo1.SelStart: = Index; Memo1.SelText: = NewText; '- ceux-ci font la même chose sous le capot. Mais utiliser GetWindowTextLength est beaucoup mieux que Length (Memo1.Text) –

+0

@Per Larsen: Parfait, c'est exactement ce que je cherchais. Merci. –

2

Si votre texte est en plus d'une ligne (cordes d'une collection TStrings qui est la réelle type de la propriété Lines du TMemo), alors vous pouvez le faire:

Memo1.Lines[Memo1.Lines.Count - 1] := Memo1.Lines[Memo1.Lines.Count - 1] + sReceivedChars; 

vous ajoutez quelques caractères à la dernière ligne (la dernière chaîne dans la collection de chaînes) de la note de service, sans prendre le texte intégral en une seule chaîne.

+0

Je connais la propriété Strings, mais je ne sais pas quels caractères vont arriver, et il n'y en aura peut-être que 1. –

+0

@Brian Frost: pourquoi les caractères arriveront-ils et s'il n'y en a qu'un? –

+0

@SalvadorGomez: Je vois maintenant, cela fonctionne aussi. Merci. –