2013-07-20 5 views
5

Ho creato un componente personalizzato che ha bisogno di un testo UTF8 piuttosto grande (ad esempio 1 MB) per funzionare. A scopo di sviluppo, ho appena caricato questo da un file. Ora voglio sbarazzarmi di quel file. Qual è il modo più semplice per archiviare i suoi contenuti nel componente, in modo tale che l'utente del componente non debba preoccuparsi di questo?Come memorizzare un testo di grandi dimensioni in un componente Delphi?

Prima ho provato a renderlo costante di stringa, ma presto Delphi ha iniziato a lamentarsi in molti modi diversi (troppo lungo o troppo, senza memoria, ecc.). Quando sono passato a incorporarlo come una risorsa, ho scoperto che la risorsa non sarà compilato automaticamente nell'applicazione reale così, quindi non è trasparente per l'utente componente ...

Aggiornamento

ho preso lavorando se creo un file di risorse da solo, che aggiungo manualmente all'unità. Quindi, ho ancora bisogno di un evento di pre-build per essere effettivo. La domanda rimane perché non funziona se lo aggiungo al pacchetto, tramite il menu Delphi, piuttosto che all'unità. E perché {$R myresource.res myresource.rc} non lo compila automaticamente come dovrebbe ...?

Update 2

A quanto pare lo script di risorsa deve essere aggiunto al progetto per la compilazione automatica di lavorare.

+0

Come lo hai aggiunto come risorsa? Dovrebbe funzionare in questo modo ed essere inserito nella tabella delle risorse dell'applicazione (presumendo che la risorsa possa essere trovata al momento della creazione dell'applicazione). –

+2

@KenWhite Appena andato a 'Progetto',' Risorse ... 'e aggiunto il file al progetto del componente. http://stackoverflow.com/q/9824396/1163893 mi ha fatto credere che non funzionerà mai in questo modo senza fare qualcosa anche con il progetto applicativo. –

risposta

8

Aggiunta della linea {$R myresource.res} nell'unità contenente il componente dovrebbe funzionare.

È possibile aggiungere il file myresource.rc al pacchetto del componente per fare in modo che Delphi generi automaticamente myresource.res.

+0

Ho aggiunto il file al progetto componente tramite il menu come descritto nel mio commento sopra. Nel 'dpk' ho' {$ R * .res} '. Se aggiungo '{$ R .res}' anche all'unità, ricevo avvertimenti su risorse duplicate e ancora non funziona. Se, invece, creo un altro 'rc' da solo, non viene automaticamente compilato in' res'. –

+0

'{$ R MyText.res MyText.rc}' non risolve neanche questo; l'errore rimane lo stesso. –

+3

@ThijsvanDien: interrompi il tentativo di associare la risorsa al ** progetto **. Non fa parte di un progetto; fa parte del tuo componente. Non è necessario un evento di pre-build o altro, se lo si include correttamente come risorsa utilizzando uno script di risorse appropriato. Verrà compilato e collegato automaticamente ogni volta che la tua unità viene utilizzata in un progetto. –

Problemi correlati