Ho un modulo in un'applicazione scritta utilizzando FireMonkey. Su quel modulo (modale) c'è un pulsante OK per il quale ho impostato la proprietà Default su True. C'è anche un componente memo. Ora se il tipo digita premi invio mentre scrivi il memo, il modulo viene chiuso invece di inserire un'interruzione di riga nel memo.Interruzioni di riga in TMemo su un modulo con il pulsante predefinito
Quello che mi piacerebbe realizzare, è che quando si preme (o si sposta + si inserisce o smth in quel modo) nel componente memo, si inserisce l'interruzione di riga. In altri componenti, in cui non è possibile digitare interruzioni di riga, mi piacerebbe comunque premere Invio per chiudere il modulo. Il migliore che ho trovato finora è l'aggiunta di codice riportato di seguito in azione forme OnCloseQuery:
if (Focused.GetObject.ClassName = 'TMemo') and (ModalResult = mrOk) then
begin
CanClose := False;
Memo := TMemo(Focused.GetObject);
Memo.InsertAfter(Memo.CaretPosition, sLineBreak, [TInsertOption.ioMoveCaret,
TInsertOption.ioCanUndo]);
end
else
CanClose := True;
Questo funziona, ma c'è ora c'è un piccolo ritardo fastidioso dopo aver colpito entrare e prima che appaia l'interruzione di riga. Inoltre vorrei una soluzione, che sarebbe meno hacky.
Devo anche sottolineare che ho anche dei moduli che contengono il pulsante OK, ma non il componente memo, tuttavia un memo verrà spostato in quel form in fase di runtime cambiando la sua proprietà genitore.
tentare la memo 'Memo.Lines.BeginUpdate;' prima di cambiare il contenuto Memo e 'Memo.Lines.EndUpdate;' dopo. – Abelisto
Emba ha mancato di implementare TMemo WantReturns, proprietà WantTabs: o (Vorrei utilizzare un evento OnIdle nel modulo per verificare se c'è un TMemo focalizzato per impostare la proprietà Default. Ma Emba non ha TApplicationEvent per FMX: o (Solo TActionList ha Evento OnUpdate che ha generato l'inattività se almeno un'azione è stata definita e assegnata a un controllo –
Nel tuo evento predefinito 'OnClick', verifica se il memo è a fuoco e imposta 'ModalResult' su mrNone se questo è il caso. –