2013-07-04 25 views
5

Se si esegue questa operazione:Perché TEdit mostra solo testo con lunghezza uguale o inferiore a 37440 caratteri?

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

mostrerà il testo, se si esegue questa operazione:

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

non apparirà il testo.

Qualcuno sa perché?
Se si tratta di un errore, esiste un altro modo di regolare anziché sostituire tutti i componenti esistenti su TMemo?
Perché 37440 Comunque?

+0

Se si utilizza un sistema operativo simile, sarà possibile visualizzare più di 37440 caratteri se si utilizza '.' f.i. invece di 'X'. Il che implica che i limiti specificati nella documentazione di MS non significano nulla, dal momento che invece si raggiungono limiti arbitrari imposti dai dettagli di implementazione. –

+0

Sì, in questo caso sarà limite in 43679 punti – EProgrammerNotFound

+0

E quindi se si utilizza il. , non devi limitarti alle versioni W delle chiamate api se usi quella stringa in una? – Glenn1234

risposta

4

Sulla faccia di esso si dovrebbe essere in grado di controllare questo utilizzando il messaggio EM_LIMITTEXT:

Il messaggio EM_LIMITTEXT limita solo il testo l'utente può inserire. Non ha effetto su alcun testo già presente nel controllo di modifica quando il messaggio viene inviato, né influenza la lunghezza del testo copiato nel controllo di modifica dal messaggio WM_SETTEXT. Se un'applicazione utilizza il messaggio WM_SETTEXT per inserire più testo in un controllo di modifica rispetto a quanto specificato nel messaggio EM_LIMITTEXT, l'utente può modificare l'intero contenuto del controllo di modifica.

Prima di chiamare EM_LIMITTEXT, il limite predefinito per la quantità di testo che un utente può immettere in un controllo di modifica è 32.767 caratteri.

E questo messaggio è esposto dalla proprietà MaxLength di TEdit.

Tuttavia, l'impostazione di MaxLength su un valore elevato non sembra essere di aiuto. Non riesco a persuadere un controllo di modifica a riga singola per visualizzare un numero elevato di caratteri.

Sospetto che l'unica opzione valida per voi sia l'utilizzo di un controllo di modifica su più righe, ovvero TMemo.

Sono sicuro che MS sosterrebbe che i controlli di modifica a riga singola non sono progettati per contenere migliaia di caratteri e quindi non hanno alcuna motivazione per rendere il controllo più capace.

FWIW, con la versione Unicode del controllo, il limite sembra essere 37444 anziché 37440!

+0

Ottimo, ora devo sostituire tutti i componenti del sistema !! Così facile da fare questo – EProgrammerNotFound

+0

Se disponi di CnWizards, ad esempio, potresti usare Component Selector, selezionare tutti i componenti 'TEdit' in base al modulo e impostare' MaxLength' su un valore limite (diverso da 0, sfortunatamente). Ma chi leggerà mai così tanti caratteri, per curiosità? [+1] – TLama

+0

C'è un componente di selezione che restituisce il valore chiave ',' + Valore chiave .. [...] degli elementi selezionati in un TEdit, Non posso usare l'intervallo perché il valore della chiave non è un sequenziale numero – EProgrammerNotFound