Jump to content
Nokioteca Forum

[c++] Plain Text Editors


pietro.versari
 Share

Recommended Posts

Salve a tutti..

Premetto che non sono molto ancora molto pratico con symbian..

ho creato un semplicissimo programma con App, Document, AppUi e Container..

ora provo ad inserirci un campo testuale per inserire delle stringhe,

quindi nel file rss ho inserito il seguente codice (oltre alle librerie corrette):

RESOURCE EDWIN r_S60_text_edwin
{
flags = EAknEditorFlagDefault;
width = 10;
lines = 3;
maxlength = 60;
allowed_input_modes = EAknEditorAllInputModes;
default_input_mode = EAknEditorTextInputMode;
}

nel Container .h ho aggiunto la variabile

CEikEdwin* iEdwinTitle;

nel Container .cpp ho aggiunto il seguente codice:

nella funzione ConstructL

	TResourceReader reader;
iCoeEnv->CreateResourceReaderLC(reader, R_S60_TEXT_EDWIN);

iEdwinTitle = new(ELeave) CEikEdwin;
iEdwinTitle->SetContainerWindowL( *this );

iEdwinTitle->ConstructFromResourceL(reader);
CleanupStack::PopAndDestroy();

iEdwinTitle->SetFocus(ETrue);

nella funzione SizeChanged

iEdwinTitle->SetExtent( TPoint(10,30), iEdwinTitle->MinimumSize() );

ed infine nel destructor

delete iEdwinTitle;

Il programma compila, pero da qualche problema dato che non si possono cancellare le parole, non ci si riesce a muovere tra di esse, non si riesce ad inserire i numeri..

Conclusione c'e qualche errore da qualche parte..

Come devo fare? b)

Link to comment
Condividi su altri siti

ti azzardo 1 risposta.. ma nn so se può risolverti il prb...

non è che nel cpp dell'appview devi implementare un metodo simile a questo?!?

TKeyResponse CHelloWorldBasicAppView::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
{	

   if(aType != EEventKey)
   {
	   return EKeyWasNotConsumed;
   }
   iEdwinTitle->OfferKeyEventL(aKeyEvent, aType);	
	   DrawDeferred();
  return EKeyWasConsumed;
}

cn la listbox a me serve implementare la funzione OfferKeyEventL altrimenti nn si muove! magari è la stessa cosa b)

Link to comment
Condividi su altri siti

ti azzardo 1 risposta.. ma nn so se può risolverti il prb...

non è che nel cpp dell'appview devi implementare un metodo simile a questo?!?

TKeyResponse CHelloWorldBasicAppView::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
{	

   if(aType != EEventKey)
   {
	   return EKeyWasNotConsumed;
   }
   iEdwinTitle->OfferKeyEventL(aKeyEvent, aType);	
	   DrawDeferred();
  return EKeyWasConsumed;
}

cn la listbox a me serve implementare la funzione OfferKeyEventL altrimenti nn si muove! magari è la stessa cosa b)

Grazie mille per la dritta, ho visto che c'entra sicuro, non mi risolve tutti i problemi ma e gia un passo avanti..

Grazie mille!

(fosse scritto megli sco cavolo di libro che sto seguendo..)

Link to comment
Condividi su altri siti

di niente b)

ma xkè nn risolve tt i tuoi prb? cosa c'è ancora ke nn va?

ho aggiunto la seguente funzione al costruttore:

TKeyResponse CMioProgrammaContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
if(aType != EEventKey)
	{
	return EKeyWasNotConsumed;
	}
return iEdwinTitle->OfferKeyEventL(aKeyEvent, aType);
}

e cosi funziona con un campo di testo..

Ora io devo fare un costruttore con dentro due plain text editors, e premendo le freccie su o giu dovrei passare il focus dall'uno all'altro, e quindi chiamare l'offerKeyEvent con l'uno o con l'altro..

Qui mi pianto..

ho trovato questo x caso se vi può aiutare::

http://www.forum.nokia.com/document/Cpp_De...itors_API4.html

Grazie mille dell'informazione. proprio grazie a quella pagina (e all'aiuto di dokkis!) ero riuscito a sistemare il problema.. b)

PS: ho trovato questa pagina molto interessante, ora ci lavoro un po su, e quando avro trovato una soluzione la scrivero per i posteri! ;)

(e questa..)

Modificato da pietro.versari
Link to comment
Condividi su altri siti

Risolto!

Al codice che ho scritto nel primo post ho aggiunto la seguente funzione:

TKeyResponse CMioProgrammaContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
if(aType != EEventKey)
	{
	return EKeyWasNotConsumed;
	}

  	switch ( aKeyEvent.iScanCode )
  		{
  		case EStdKeyDownArrow:
  			if ( iEdwinNumber->IsFocused() )
			{
			iEdwinNumber->SetFocus(EFalse);					
			iEdwinTitle->SetFocus(ETrue);
			return iEdwinTitle->OfferKeyEventL(aKeyEvent, aType);
  				}
  			else
  				break;
  		case EStdKeyUpArrow:
  			{
  			if ( iEdwinTitle->IsFocused() && 0 == iEdwinTitle->CursorPos())
			{
			iEdwinTitle->SetFocus(EFalse);
			iEdwinNumber->SetFocus(ETrue);
			return iEdwinNumber->OfferKeyEventL(aKeyEvent, aType);
  				}
  			else
  				break;
  			}
  		}
// Forward key events to editor. In real life only do this if editor is focused
if ( iEdwinTitle->IsFocused() )
  		return iEdwinTitle->OfferKeyEventL(aKeyEvent, aType);
if ( iEdwinNumber->IsFocused() )
  		return iEdwinNumber->OfferKeyEventL(aKeyEvent, aType);
}

e funziona tutto ok..

Nota: ho due caselle di testo, quella piu in alto (iEdwinNumber) è su una sola riga, mentre la seconda è su piu righe..

Se sto scrivendo un testo su piu righe e premo la freccia in alto non voglio che cambi subito casella di testo, ma che si sposti alla righa precedente..

Per fare questo ho aggiunto la seguente riga:

0 == iEdwinTitle->CursorPos()

Che mi restituisce la posizione del cursore..

Grazie a tutti!

Ciao

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy