2013-07-04 17 views
5

Wenn Sie dies tun:Warum zeigt TEdit nur Text mit einer Länge von weniger als 37440 Zeichen an?

Edit1.Text := StringOfChar('X', 37440); 

Es wird der Text angezeigt, aber wenn Sie dies tun:

Edit1.Text := StringOfChar('X', 37441); 

Der Text wird nicht angezeigt.

Weiß jemand warum?
Wenn dies ein Fehler ist, gibt es eine andere Möglichkeit, alle vorhandenen Komponenten an TMemo anzupassen anstatt sie zu ersetzen.
Warum 37440 Wie auch immer?

+0

Wenn Sie ein ähnliches Betriebssystem verwenden, können Sie mehr als 37440 Zeichen anzeigen, wenn Sie '.' f.i verwenden. anstelle von 'X'. Dies impliziert, dass die in der MS-Dokumentation angegebenen Grenzen überhaupt nichts bedeuten, da Sie stattdessen willkürliche Grenzen durch Implementierungsdetails erreichen. –

+0

Ja, in diesem Fall wird es in 43679 dots – EProgrammerNotFound

+0

limite sein Und dann, wenn Sie die verwenden. , musst du nicht bei W-Versionen von API-Aufrufen bleiben, wenn du diese Zeichenfolge in einem verwendest? – Glenn1234

Antwort

4

Auf dem Gesicht von ihm sollten Sie in der Lage sein, dies die EM_LIMITTEXT Nachricht mit steuern:

Die EM_LIMITTEXT Nachricht begrenzt nur den Text der Benutzer eingeben. Sie wirkt sich nicht auf Text aus, der sich bereits in dem Bearbeitungssteuerelement befindet, wenn die Nachricht gesandt wird, noch auf die Länge des Texts, der von der WM_SETTEXT-Nachricht zu dem Bearbeitungssteuerelement kopiert wird. Wenn eine Anwendung die WM_SETTEXT-Nachricht verwendet, um mehr Text in einem Bearbeitungssteuerelement zu platzieren, als in der EM_LIMITTEXT-Nachricht angegeben ist, kann der Benutzer den gesamten Inhalt des Bearbeitungssteuerelements bearbeiten.

Bevor EM_LIMITTEXT aufgerufen wird, ist das Standardlimit für die Textmenge, die ein Benutzer in einem Bearbeitungssteuerelement eingeben kann, 32.767 Zeichen.

Und diese Botschaft wird durch die MaxLength Eigenschaft TEdit ausgesetzt.

Die Einstellung von MaxLength auf einen großen Wert scheint jedoch nicht hilfreich zu sein. Ich kann ein Steuerelement für einzelne Zeilen nicht dazu bringen, eine große Anzahl von Zeichen anzuzeigen.

Ich vermute, die einzige praktikable Option für Sie ist die Verwendung eines mehrzeiligen Bearbeitungssteuerelements, das ist ein TMemo.

Ich bin sicher, MS würde argumentieren, dass einzelne Zeile Bearbeitungssteuerelemente nicht entworfen sind, um Tausende von Zeichen zu halten, und so haben sie keine Motivation, diese Kontrolle fähiger zu machen.

FWIW, mit der Unicode-Version der Steuerung scheint der Cutoff bei 37444 statt 37440 zu sein!

+0

Gut, jetzt muss ich alle Komponenten im System ersetzen !! So einfach, dies zu tun – EProgrammerNotFound

+0

Wenn Sie CnWizards haben, können Sie z. B. Component Selector verwenden, wählen Sie alle 'TEdit' Komponenten Formular per Formular und setzen sie' MaxLength' auf einen Grenzwert (anders als 0, leider). Aber wer wird aus Neugier so viele Zeichen lesen? [+1] – TLama

+0

Es gibt eine Auswahlkomponente, die Schlüsselwert ',' + Schlüsselwert .. [...] der ausgewählten Elemente zu einem TEdit zurückgibt, ich kann keinen Bereich verwenden, da der Schlüsselwert kein sequentieller Wert ist Nummer – EProgrammerNotFound